我制作了一些只出现在OneNote上的代码并提供了一些按钮。我遇到的问题是,当我按下按钮时它会聚焦,因此GUI会消失。我找到了两种可能的解决方案,但我不确定如何实现它们。
我的第一个想法是使GUI不可聚焦,但如上所述,我不知道它是如何工作的。
第二个想法是我可以制作
WinWaitNotActive - OneNote
只有当OneNote和GUI都没有激活时才会通过,但我也不知道如何将两个可能的程序传递给命令。
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#SingleInstance force
#Notrayicon
SetTitleMatchMode 2
Gui +LastFound -Caption +ToolWindow +Border + AlwaysOnTop
Gui Add, Button, gDublicate x-1 y-1 w60 h25, Dublicate
Gui Add, Button, gDelete x57 y-1 w60 h25, Delete
Gui Add, Button, gBackwards x115 y-1 w25 h25, ←
Gui Add, Button, gForwards x138 y-1 w25 h25, →
Loop{
WinWaitActive - OneNote
Gui, Show, xCenter y35 NoActivate h23 w162
WinWaitNotActive - OneNote
Gui Hide
}
return:
Dublicate:
WinActivate - OneNote
SendInput ^c
Sleep 50
SendInput ^v
return
Delete:
WinActivate - OneNote
SendInput {Del}
return
Backwards:
WinActivate - OneNote
SendInput ^z
return
Forwards:
WinActivate - OneNote
SendInput ^y
return
答案 0 :(得分:0)
首先,我认为您可以使用扩展窗口样式WS_EX_NOACTIVATE
。通过将+E0x08000000
添加到选项中,可将其应用于GUI:
Gui +LastFound -Caption +ToolWindow +Border +AlwaysOnTop +E0x08000000
或者,我也探讨了你的第二个想法。您应该可以使用ahk_group
来执行此操作,如下所示:
GroupAdd OneNote, - OneNote
; Requires adding +HwndGuiHwnd to your GUI options
GroupAdd OneNote, ahk_id %GuiHwnd%
Loop{
WinWaitActive ahk_group OneNote
Gui, Show, xCenter y35 NoActivate h23 w162
WinWaitNotActive ahk_group OneNote
Gui Hide
}
我没有OneNote并且无法真正测试这些,但我相信它们中的任何一个都应该有效。但是,由于WinWait[Not]Active
通过不断检查前景窗口而工作,因此可能会遇到一些不一致。这涉及调用GetForegroundWindow
,它可能在切换窗口之间的一小段时间内返回NULL,导致WinWait[Not]Active
意外返回。在这种情况下,您可能希望完全放弃WinWaitActive
+ WinWaitNotActive
循环以支持shell挂钩,我写了here。