剪贴板历史记录的WinGetPos()

问题描述 投票:0回答:1

要通过 Win 瞄准黑框(我想等待)来实现动态等待 Windows 剪贴板历史

-Window (
V
+
PixelGetColor()
),我需要确定通过
WinGetPos()
调整框架的位置。然而,
WinGetPos()
需要WinTitle(ahk_class ahk_id ahk_pid ahk_exe等)。因此,我在 Windows 剪贴板历史记录窗口中发现了此信息,但它唯一的独特之处是它的“所有文本”字段(
ahk_class
ahk_pid
与 Windows 文件资源管理器等共享,我认为他们也在每个新的 Windows 上)。

所有文本”可以通过

WinGetText()
检索,但前提是您知道它的WinTitle,正如所讨论的,我不知道。

我能做的最好的事情就是获取Windows剪贴板历史记录的所有文本“CoreInput”),甚至它的XY坐标(我正在寻找)将鼠标悬停在其上,脚本❶处于活动状态(这会在右侧屏幕截图下方显示黄色工具提示):

enter image description here

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 剪贴板历史记录的 XY 坐标无需鼠标。所以我想我只需循环遍历 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 剪贴板历史记录的 XY 坐标,或者更一般地说,实现动态等待 Windows 剪贴板历史记录实际上准备好接收击键(如

{Down} 
-键)?

windows autohotkey clipboard
1个回答
0
投票

这个问题有两种解决方案:

  1. 使用FindWindowEx(以下是AHK v2代码,因为v1在我发帖时已被弃用,但将其移植到v1相当容易):
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)
  1. 重新编译 AutoHotkey,并将
    disableWindowFiltering
    添加到包清单中。请参阅此 v2 PR 了解更多信息。此更改可能会影响代码的其他部分,这些部分依赖于未找到的过滤窗口,但会导致
    WinGetPos X, Y, W, H, ahk_exe explorer.exe, CoreInput
    开始工作。
© www.soinside.com 2019 - 2024. All rights reserved.