要通过 Win
瞄准黑框(我想等待)来实现动态等待 Windows 剪贴板历史
V
+PixelGetColor()
),我需要确定通过 WinGetPos()
调整框架的位置。然而,WinGetPos()
需要WinTitle(ahk_class ahk_id ahk_pid ahk_exe等)。因此,我在 Windows 剪贴板历史记录窗口中发现了此信息,但它唯一的独特之处是它的“所有文本”字段(ahk_class
和 ahk_pid
与 Windows 文件资源管理器等共享,我认为他们也在每个新的 Windows 上)。
“所有文本”可以通过
WinGetText()
检索,但前提是您知道它的WinTitle,正如所讨论的,我不知道。
我能做的最好的事情就是获取Windows剪贴板历史记录的所有文本(“CoreInput”),甚至它的X和Y坐标(我正在寻找)将鼠标悬停在其上,脚本❶处于活动状态(这会在右侧屏幕截图下方显示黄色工具提示):
AHK 脚本❶:
#Persistent
SetTimer, WatchCursor, 100
return
WatchCursor:
MouseGetPos, WindowRelX, WindowRelY, id, control
WinGetTitle, outTitle, ahk_id %id%
WinGetText, WinText, ahk_id %id%
WinGetPos , WinPosX, WinPosY, WinPosWidth, WinPosHeight, ahk_id %id%
WinGetClass, class, ahk_id %id%
PixelGetColor, OutColor, WindowRelX, WindowRelY
ToolTip, ahk_id %id%`nahk_class %class%`n%outTitle%`nControl: %control%`nOutColor: %OutColor%`nlast_active_window: %last_active_window%`nWindowRelX: %WindowRelX%`nWinPosX: %WinPosX%`nWindowRelY: %WindowRelY%`nWinPosY: %WinPosY%`nWinPosWidth: %WinPosWidth%`nWinPosHeight: %WinPosHeight%`nWinText: %WinText%`n
return
但我需要获取 Windows 剪贴板历史记录的 X 和 Y 坐标无需鼠标。所以我想我只需循环遍历 all Windows 并将它们的文本与 Window Spy 的 CoreInput 和脚本 ❷ 进行比较,但它没有产生任何结果:
AHK 脚本❷:
Sleep, 5000
; in the meantime open Windows Clipboard History via Win+V
DetectHiddenWindows, On
WinGet, id, List,,, Program Manager
Loop, %id%
{
this_id := id%A_Index%
WinGetText, this_text, ahk_id %this_id%
if (Trim(this_text) == CoreInput){
Tooltip, %A_Index% of %id%`n`n`n%this_text%
}
}
那么我怎样才能在没有鼠标的情况下获得 Windows 剪贴板历史记录的 X 和 Y 坐标,或者更一般地说,实现动态等待 Windows 剪贴板历史记录实际上准备好接收击键(如
{Down}
-键)?
这个问题有两种解决方案:
hWnd := 0, prevHwnd := 0
Loop {
hWnd := DllCall("FindWindowExW", "Ptr", 0, "Ptr", hWnd, "Str", "ApplicationFrameWindow", "Str", "", "UPtr")
if !hWnd || hWnd = prevHwnd
break
if InStr(WinGetText(hWnd), "CoreInput")
break
prevHwnd := hWnd
}
if (hWnd)
WinGetPos(&X, &Y, &W, &H, hWnd)
disableWindowFiltering
添加到包清单中。请参阅此 v2 PR 了解更多信息。此更改可能会影响代码的其他部分,这些部分依赖于未找到的过滤窗口,但会导致 WinGetPos X, Y, W, H, ahk_exe explorer.exe, CoreInput
开始工作。