;------------------------------ ; AHK抓抓工具 ; ; 作者:飞跃 ; 版本:2.5 ; 介绍:这是一个方便的抓取屏幕坐标和颜色的工具 ;------------------------------ Goto, _Start ;======== 热键 ======== ;-- 按 PrintScreen 热键截屏 *PrintScreen:: IfWinExist, ahk_id %gui_id% { Gui, Main: Hide WinWaitClose, ahk_id %gui_id% Sleep, 50 } PrintScreen(nX, nY, nW, nH, bits) SetImage(nW, nH, bits) Gui, Main: Show return #If MouseIsOver() MouseIsOver() { global hPic, gui_id ListLines, Off MouseGetPos, px, py, id if (id!=gui_id) return, 0 WinGetPos, x, y, w, h, ahk_id %hPic% return, (px>=x && px=y && py " . "`n`n1、先按 PrintScreen 键截屏,然后" . "用 鼠标右键菜单+[0-9] 键抓点," . "`n`n2、可以用 ALT+[0-9] 组合热键抓点。" . "`n`n3、抓点时可以用上下左右键微调。`n" ;------------------------------------- Gui, Font, s12 cBlue norm Gui, Add, Edit, w180 ReadOnly Gui, Add, Button, x+10 yp-3 gRunButton, 清本空组 ;------------------------------------- Gui, Font, s14 cEE6600 bold Gui, Add, Tab3, xs vMyTab gRunTab AltSubmit -Wrap Section , 一组|二组|三组|四组|五组 Gui, Font, s12 cBlue norm C2_:=[] Loop, 5 { Gui, Tab, %A_Index% Loop, 10 { i:=Mod(A_Index,10), j:=i=1 ? "xs+15 y+15":"xs+15 y+3" Gui, Add, Text, %j%, 抓点 %i% Gui, Add, Edit, x+10 w200 +Hwndid C2_.Push(id) Gui, Add, Progress, x+0 w25 hp +Border +Hwndid Background%WindowColor% C2_.Push(id) Gui, Add, Button, x+10 yp-3 gRunButton, 复制 %i% Gui, Add, Button, x+0 gRunButton, 清空 %i% } } Gui, Tab MySlider1:=MySlider2:=0, MyTab:=1 ;------------------------------------- Gui, SubPic: Default Gui, +Parent%hPic% -Caption +ToolWindow -DPIScale +LabelGui Gui, Margin, 0, 0 Gui, Color, White Gui, Add, Picture, x0 y0 w%nW% h%nH% +HwndhPic2 +0xE Gui, Show, NA x0 y0 w%nW% h%nH%, SubPic ;------------------------------------- Gui, Main: Show,, %ToolName% v%Version% - By FeiYue OnMessage(0x201, Func("LButton_Down")) OnMessage(0x200, Func("Mouse_Move")) return LButton_Down() { global hPic, hPic2, nW, nH ListLines, Off Critical MouseGetPos, px, py WinGetPos, x, y, w, h, ahk_id %hPic% if !(px>=x && px =y && py 0 ? 0 : x y:=y0 ? 0 : y Gui, SubPic: Show, NA x%x% y%y% GuiControl, Main:, MySlider1, % Round(-x/(nW-w)*100) GuiControl, Main:, MySlider2, % Round(-y/(nH-h)*100) Sleep, 10 } } Mouse_Move() { ListLines, Off SetTimer, ReDraw, -10 } ReDraw() { global LineNumber, C_ static C3_:=[] ListLines, Off Critical SetTimer, ReDraw, Off if !MouseIsOver() return MouseGetPos, px, py c:=GetPosAndColor(px, py, x, y) if (C3_[0]=x "," y) return C3_[0]:=x "," y, c:=Format("0x{:06X}", c) GuiControl, Main:, Edit2, %x%`, %y%`, %c% n:=LineNumber, k:=n*(n//2)+(n//2)+1, i:=0 Loop, %n% { py:=y-(n//2)+A_Index-1 Loop, %n% { px:=x-(n//2)+A_Index-1, i++ if !(i=k-1||i=k+1||i=k-n||i=k+n) if (c:=GetColor(px,py))!=C3_[i] C3_[i]:=c, SetColor(c, C_[i]) } } } GuiEscape: Gui, Main: Hide return MainShow: Gui, Main: Show return RunTab: GuiControlGet, MyTab, Main:, MyTab return GuiContextMenu: if (A_Gui="SubPic") { MouseGetPos, px, py Menu, MyMenu, Show, %px%, %py% } return RunMenu: n:=A_ThisMenuItemPos CaptureN: Gosub, RunTab c:=GetPosAndColor(px, py, x, y) n:=(MyTab-1)*20+2*n-1+20*(!n) c:=Format("0x{:06X}", c) GuiControl, Main:, % C2_[n], %x%`, %y%`, %c% SetColor(c, C2_[n+1]) return MovePic: ListLines, Off WinGetPos,,, w, h, ahk_id %hPic% x:=-(nW-w)*MySlider1//100 y:=-(nH-h)*MySlider2//100 Gui, SubPic: Show, NA x%x% y%y% return RunButton: Gosub, RunTab k:=A_GuiControl, n:=RegExReplace(k, "D+") n:=(MyTab-1)*20+2*n-1+20*(!n) if InStr(k, "组") { Loop, 10 { n:=(MyTab-1)*20+2*A_Index-1 GuiControl, Main:, % C2_[n] SetColor(WindowColor, C2_[n+1]) } } else if InStr(k, "复制") { GuiControlGet, r, Main:, % C2_[n] Clipboard:=r } else { GuiControl, Main:, % C2_[n] SetColor(WindowColor, C2_[n+1]) } ToolTip, %k% OK ! SetTimer, Tip_Off, -500 return Tip_Off: ToolTip return SaveLoad: SaveLoad() return SaveLoad() { global bits, nW, nH k:=A_GuiControl, i:=RegExReplace(k, "D+") f:=A_Temp "~pic" i ".tmp" ToolTip, %k% OK ! SetTimer, Tip_Off, -500 if InStr(k,"存") { file:=FileOpen(f, "w") file.RawWrite(bits, nW*nH*4) file.Close() GuiControl, Main: Enable, 取%i% } else if InStr(k,"删") { FileDelete, %f% GuiControl, Main: Disable, 取%i% } else if FileExist(f) { file:=FileOpen(f, "r") file.RawRead(bits, nW*nH*4) file.Close() SetImage(nW, nH, bits) } } SetColor(c, hwnd) { c:=((c&0xFF)>16) SendMessage, 0x2001, 0, c,, ahk_id %hwnd% } GetPosAndColor(px, py, ByRef x="", ByRef y="") { global VarSetCapacity(pt,8), NumPut(py,NumPut(px,pt,"int"),"int") DllCall("ScreenToClient", "ptr",hPic2, "ptr",&pt) x:=NumGet(pt,0,"int")+nX, y:=NumGet(pt,4,"int")+nY return, GetColor(x, y) } GetColor(x, y, bpp=32) { global return, (x nX+nW-1 or y>nY+nH-1) ? 0xFFFFFF : NumGet(bits,(y-nY)*(((nW*bpp+31)//32)*4) +(x-nX)*(bpp//8),"uint")&0xFFFFFF } PrintScreen(x, y, w, h, ByRef bits, bpp=32) { Ptr:=A_PtrSize ? "UPtr" : "UInt" Scan0:=&bits, Stride:=((w*bpp+31)//32)*4 win:=DllCall("GetDesktopWindow", Ptr) hDC:=DllCall("GetWindowDC", Ptr,win, Ptr) mDC:=DllCall("CreateCompatibleDC", Ptr,hDC, Ptr) if (hBM:=CreateDIBSection(w, -h, mDC, bpp, ppvBits)) { oBM:=DllCall("SelectObject", Ptr,mDC, Ptr,hBM, Ptr) DllCall("BitBlt", Ptr,mDC, "int",0, "int",0, "int",w, "int",h , Ptr,hDC, "int",x, "int",y, "uint",0x00CC0020|0x40000000) DllCall("RtlMoveMemory", Ptr,Scan0, Ptr,ppvBits, Ptr,Stride*h) DllCall("SelectObject", Ptr,mDC, Ptr,oBM) DllCall("DeleteObject", Ptr,hBM) } DllCall("DeleteDC", Ptr,mDC) DllCall("ReleaseDC", Ptr,win, Ptr,hDC) } SetImage(w, h, ByRef bits, bpp=32) { global hPic2 static hBM Ptr:=A_PtrSize ? "UPtr" : "UInt" if (hBM) DllCall("DeleteObject", Ptr,hBM) Scan0:=&bits, Stride:=((w*bpp+31)//32)*4 if (hBM:=CreateDIBSection(w, -h, 0, bpp, ppvBits)) DllCall("RtlMoveMemory",Ptr,ppvBits,Ptr,Scan0,Ptr,Stride*h) SendMessage, 0x172, 0x0, hBM,, ahk_id %hPic2% if (E:=ErrorLevel) DllCall("DeleteObject", Ptr,E) WinSet, ReDraw,, ahk_id %hPic2% } CreateDIBSection(w, h, hdc=0, bpp=32, ByRef ppvBits=0) { Ptr:=A_PtrSize ? "UPtr" : "UInt", PtrP:=Ptr "*" VarSetCapacity(bi, 40, 0), NumPut(40, bi, 0, "int") NumPut(w, bi, 4, "int"), NumPut(h, bi, 8, "int") NumPut(1, bi, 12, "short"), NumPut(bpp, bi, 14, "short") hbm:=DllCall("CreateDIBSection", Ptr,hdc, Ptr,&bi , "int",0, PtrP,ppvBits, Ptr,0, "uint",0, Ptr) return, hbm } ;======== 脚本结束 ======== ;
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。