1

Тема: AHK:экранная лупа - управление зумом

Доброго времени суток. Помогите добавить в скрипт управление зумом от минимума к максимуму на горячие клавиши.

^WheelUp:: уменьшить
^WheelDown:: увеличить

#NoEnv
SetBatchLines, -1
CoordMode, Pixel
DllCall("dwmapi\DwmEnableComposition", "UInt", False)
Gui, +AlwaysOnTop -Caption +E0x80000 +HwndGUIhWnd +Owner
Gui, Show, w150 h150, 10xZoom
WinMove, % "ahk_id"GUIhWnd,, A_ScreenWidth//2-76, A_ScreenHeight//2-76
hModule:=DllCall("LoadLibrary", "Str", "gdiplus.dll")
VarSetCapacity(GdiplusStartupInput, 16, 0)
NumPut(1, GdiplusStartupInput, 0, "Char")
DllCall("gdiplus\GdiplusStartup", "UInt*", pToken, "UInt", &GdiplusStartupInput)
VarSetCapacity(BITMAPINFO, 40, 0)
NumPut(40, BITMAPINFO, 0)
NumPut(150, BITMAPINFO, 4) ; biWidth
NumPut(150,BITMAPINFO, 8) ; biHeight
NumPut(1, BITMAPINFO, 12, "UShort")
NumPut(32, BITMAPINFO, 14, "UShort")
NumPut(0, BITMAPINFO, 16)
hBitmap:=DllCall("CreateDIBSection", "UInt", hDC
                                   , "UInt", &BITMAPINFO
                                   , "UInt", 0
                                   , "UInt*", 0
                                   , "UInt", 0
                                   , "UInt", 0)
DllCall("ReleaseDC", "UInt", 0, "UInt", hDC)
hMemDC:=DllCall("CreateCompatibleDC", "UInt", 0)
DllCall("SelectObject", "UInt", hMemDC, "UInt", hBitmap)
DllCall("gdiplus\GdipCreateFromHDC", "UInt", hMemDC, "UInt*", pGraphics)
DllCall("gdiplus\GdipCreateSolidFill", "Int", Color1, "UInt*", pBrush)
SetTimer, UpdWindow, 50
OnExit, ExitScript
Return

UpdWindow:
   Loop, 15
      GdipDrawLine(A_Index-1)
   DllCall("UpdateLayeredWindow", "UInt", GUIhWnd
                                , "UInt", 0
                                , "UInt", 0
                                , "Int64*", 0x09600000096 ; 150x150
                                , "UInt", hMemDC
                                , "Int64*", 0
                                , "UInt", 0
                                , "UInt*", 0x01FF0000
                                , "UInt", 2)
   Return

ExitScript:
   DllCall("gdiplus\GdiplusShutdown", "UInt", pToken)
   DllCall("FreeLibrary", "UInt", hModule)
   DllCall("dwmapi\DwmEnableComposition", "UInt", True)
   ExitApp

GdipDrawLine(Y)
{
   global
   Loop, 15
   {
      PixelGetColor, CurrentColor, A_ScreenWidth//2-7+A_Index-1
                                 , A_ScreenHeight//2-7+Y, RGB
      DllCall("gdiplus\GdipSetSolidFillColor", "UInt", pBrush
                                             , "UInt", CurrentColor|0xFF000000)
      DllCall("gdiplus\GdipFillRectangle", "UInt", pGraphics
                                         , "UInt", pBrush
                                         , "Float", (A_Index-1)*10
                                         , "Float", Y*10
                                         , "Float", 10
                                         , "Float", 10)
   }
}

Здесь http://forum.script-coding.com/viewtopic.php?id=6638  смотрел ,пытался разобраться не получилось, помогите  пожалуйста .

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

2 (изменено: Alectric, 2013-09-25 19:14:57)

Re: AHK:экранная лупа - управление зумом

Вот держи:

#NoEnv
#NoTrayIcon
SetBatchLines -1
OnExit,GuiClose
SetFormat,float,6.0
SysGet,w,MonitorWorkArea
wbottom+=30
zoom=4
Rx=128
Ry=128
Zx:=Rx/zoom
Zy:=Ry/zoom
paused=0
start=1

Gui,3:-Caption +Border +ToolWindow +AlwaysOnTop
Gui,3:Color,EEEEEE
Gui,3:Margin,0,0
Gui +AlwaysOnTop +Resize +ToolWindow
Gui,Show, % "w" 2*Rx " h" 2*Ry " x0 y0",Увеличительное окно.
WinGet,ID,id,Увеличительное окно.
WinGet,PrintSourceID,ID
hdd_frame:=DllCall("GetDC",UInt,PrintSourceID)
hdc_frame:=DllCall("GetDC",UInt,ID)

GuiSize:
loop
{
sleep,10

GetKeyState,rctrl,rctrl,P
if (rctrl="D")
{
  if paused=0
  {
    Gui,Hide
    Gui,3:Hide
    paused=1
    sleep,500
    tooltip,
  }
  else
  {
    pausedchek=0
    Gui,Show
    paused=0
    sleep,500
  }
}

if paused=0
{
WinGetPos,winx,winy,Wn,Hn,Увеличительное окно.
wn-=8
Hn-=26
Rx:=Wn/2
Ry:=Hn/2
Zx:=Rx/zoom
Zy:=Ry/zoom
CoordMode,Mouse,Screen
MouseGetPos,x,y,mwin,mctrl
xz:=In(x-Zx-6,0,wright-2*Zx)
yz:=In(y-Zy-6,0,wbottom-2*Zy)
ifwinnotactive,Увеличительное окно.
{
  DllCall("gdi32.dll\StretchBlt",UInt,hdc_frame,Int,0,Int,0,Int,2*Rx,Int,2*Ry,UInt,hdd_frame,UInt,xz,UInt,yz,Int,2*Zx,Int,2*Zy,UInt,0xCC0020)
  tooltip,
}
else
{
  CoordMode,tooltip,Screen
  tooltip,Увеличение - %zoom%00 `%`nВ кадре %ww% x %hh% пикселей`nПравый Ctrl - скрыть\показать.`nЛевый Ctrl+Колесо мыши - масштаб.,%winx%,%winy%
}
ww=%Zx%
hh=%Zy%
ww*=2
hh*=2
xx=%xz%
yy=%yz%
xx-=1
yy-=1
Gui,3:Show,x%xx% y%yy% w%ww% h%hh% NoActivate,Рамка
WinGet,guiid,ID,Рамка
WinSet,TransColor,EEEEEE,ahk_id %guiid%
ifwinactive,Рамка
{
  zoom-=1
  winactivate,ahk_class Shell_TrayWnd
}

In(x,a,b)
{
   IfLess x,%a%,Return a
   IfLess b,%x%,Return b
   Return x
}

}
else
  sleep,100
}
Return

^WheelUp::
^WheelDoWn::
If (A_ThisHotKey="^WheelUp")
  zoom+=1
If (A_ThisHotKey="^WheelDoWn")
  zoom-=1
if zoom<1
  zoom=1
if zoom>35
  zoom=35
Zx:=Rx/zoom
Zy:=Ry/zoom
Return

GuiClose:
DllCall("gdi32.dll\DeleteDC",UInt,hdc_frame)
DllCall("gdi32.dll\DeleteDC",UInt,hdd_frame)
ExitApp
Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

3

Re: AHK:экранная лупа - управление зумом

Нужно что бы окно лупы показывало центр экрана и при движении курсора не куда не двигалось но при этом можно было менять зум клавишами  ^WheelUp:: уменьшить
                                                                             ^WheelDown:: увеличить.

OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).

4 (изменено: Alectric, 2013-09-27 15:27:18)

Re: AHK:экранная лупа - управление зумом

Впиши нужные координаты вместо переменных, там где меняются координаты.

MouseGetPos,x,y,mwin,mctrl
Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.