OCR 截屏工具,quicker有,但需要联网。实际上 AHK 早就支持离线文字识别。调用的是 Capture2Text。
ahk 通过 run 指令 调用过 Capture2Text , 传入坐标参数,后者识别屏幕后,将结果文本复制到剪贴板。于是 ahk 就可以显示一个对话框,里面一个编辑框,编辑识别的文本。
识别率感人,但用来识别简单的英文数字,还是很方便的。或者可以更换识别引擎。
; creates a click-and-drag selection box to specify an area
getSelectionCoords(ByRef x_start, ByRef x_end, ByRef y_start, ByRef y_end) {
;Mask Screen
Gui, Color, FFFFFF
Gui +LastFound
WinSet, Transparent, 75
Gui, -Caption
Gui, +AlwaysOnTop
Gui, Show, x0 y0 h%A_ScreenHeight% w%A_ScreenWidth%,"AutoHotkeySnapshotApp"
;Drag Mouse
CoordMode, Mouse, Screen
CoordMode, Tooltip, Screen
WinGet, hw_frame_m,ID,"AutoHotkeySnapshotApp"
hdc_frame_m := DllCall( "GetDC", "uint", hw_frame_m)
KeyWait, LButton, D
MouseGetPos, scan_x_start, scan_y_start
Loop
{
Sleep, 10
KeyIsDown := GetKeyState("LButton")
if (KeyIsDown = 1)
{
MouseGetPos, scan_x, scan_y
DllCall( "gdi32.dll\Rectangle", "uint", hdc_frame_m, "int", 0,"int",0,"int", A_ScreenWidth,"int",A_ScreenWidth)
DllCall( "gdi32.dll\Rectangle", "uint", hdc_frame_m, "int", scan_x_start,"int",scan_y_start,"int", scan_x,"int",scan_y)
} else {
break
}
}
;KeyWait, LButton, U
MouseGetPos, scan_x_end, scan_y_end
Gui Destroy
if(scan_x_start!=scan_x_end || scan_y_start!=scan_y_end) {
if (scan_x_start < scan_x_end)
{
x_start := scan_x_start
x_end := scan_x_end
} else {
x_start := scan_x_end
x_end := scan_x_start
}
if (scan_y_start < scan_y_end)
{
y_start := scan_y_start
y_end := scan_y_end
} else {
y_start := scan_y_end
y_end := scan_y_start
}
}
}
RunOCR(){
getSelectionCoords(x_start, x_end, y_start, y_end)
RunWait, D:\software\Capture2Text_v4.6.3_64bit\Capture2Text.exe --screen-rect "%x_start% %y_start% %x_end% %y_end%" --clipboard
; MsgBox, In area :: --screen-rect "%x_start% %y_start% %x_end% %y_end%" `n`nFound Text:`n`n%clipboard%
; global vMyText
vMyText := "In area :: --screen-rect """ . x_start . " " . y_start . " " . x_end . " " . y_end . """`n`nFound Text:`n`n" . clipboard
; MsgBox, %vMyText%
Gui, Font, s24
Gui, Add, Edit, , %vMyText%
Gui, Show
}
#IfWinActive ahk_exe AutoHotkeyU64.exe
^W::
send !{F4}
return
^!Enter::
~^Q::
RunOCR()
return