如何 WinActivate 不遵循传统 window 体系结构的虚拟键盘程序?

How do I WinActivate a virtual keyboard program that does not follow traditional window architecture?

我有一个名为热虚拟键盘的程序,我正在尝试对其进行 WinActivate。因为它的行为总是在顶部,类似于 windows 屏幕键盘,并且它存在于图标托盘中,所以它有点在后台徘徊(无法通过任务栏访问),我想不出办法让我通过 AHK 把它带到前面。

我试过:

DetectHiddenWindows, on
#h::WinActivate, ahk_class TMainKeyboardForms

但是没有把它带到前面也无济于事。 AHK 中是否存在另一种特殊方法将这些类型的特殊 windows 带到前面?

here 是热门虚拟键盘开发人员如何在其他编程语言中显示他们如何显示 window 以获取更多信息。

AutoHotkey 有一个 PostMessage command just like the examples given in that link. The main difference is that there's no FindWindow function. Instead, PostMessage in AutoHotkey identifies windows using a WinTitle 参数。您需要 post 消息的 window 具有 class "TFirstForm" 和标题 "hvkFirstForm",因此可以像这样匹配:

DetectHiddenWindows On

WM_USER := 0x0400
; Message constants accepted by Hot Virtual Keyboard
WM_CSKEYBOARD := WM_USER + 192
WM_CSKEYBOARDMOVE := WM_USER + 193
WM_CSKEYBOARDRESIZE := WM_USER + 197

; Win+H -> show the keyboard
#h::PostMessage WM_CSKEYBOARD, 1, 0,, hvkFirstForm ahk_class TFirstForm

; Win+J -> Hide the keyboard
#j::PostMessage WM_CSKEYBOARD, 2, 0,, hvkFirstForm ahk_class TFirstForm
DetectHiddenWindows, on
#h::
    WinShow, ahk_class TMainKeyboardForms
Return