Autohotkey 要在单击按钮时产生按键吗

Autohotkey 要在单击按钮时产生按键吗,autohotkey,Autohotkey,我正在尝试制作一个永久浮动工具栏,以帮助我在windows平板电脑(无键盘)上执行常见任务,如“撤消”、“复制”和“删除”。 现在我有这个: Gui, Destroy Gui,+AlwaysOnTop Gui,+ToolWindow Gui,+Border Gui, Add, Button, y5 w60, &Undo Gui, Add, Button, y5 w60, &Delete Gui, Add, Button, y8 h18, X Gui, Show, y0 Retur

我正在尝试制作一个永久浮动工具栏,以帮助我在windows平板电脑(无键盘)上执行常见任务,如“撤消”、“复制”和“删除”。 现在我有这个:

Gui, Destroy
Gui,+AlwaysOnTop
Gui,+ToolWindow
Gui,+Border
Gui, Add, Button, y5 w60, &Undo
Gui, Add, Button, y5 w60, &Delete
Gui, Add, Button, y8 h18, X
Gui, Show, y0
Return

ButtonUndo:
ControlSend,, ^z
Return

ButtonDelete:
ControlSend,, {Backspace}
Return

ButtonX:
ButtonCancel:
Gui, Destroy
ExitApp

End:
Reload
Return

但当我点击按钮时,它似乎除了发出错误的声音之外,什么也没做。我是否需要告诉它先关注不同的窗口?

我真的很喜欢这个主意!问题是,只要您单击其中一个按钮,焦点就会从您想要控制的应用程序上移开。。。 因此,您将命令发送到自己的自动热键应用程序

解决此问题的一个简单方法是先发送Alt+Esc,然后在睡眠20毫秒后发送命令

ButtonUndo:
    Send, !{Esc} ; Changed from Alt+Tab
    Sleep, 20
    Send, ^z
Return

下面是一个使用Settimer切换的示例

SetTimer, CheckWin, 100; Put at the beginning of your script   

CheckWin:
WinGetTitle, CurrName, A
if (CurrName = PrevName) ; check if window has been changed
    Return ; Only continue if an other application was activated
LastName = %PrevName% ; Use %LastName% in winactivate
PrevName = %CurrName% ; When new app, then sync AppName and PrevName
Return

最后使用Send代替ControlSend。唯一的问题是我一次只能打开一个窗口,这样它才有用。我要看看我是否能以某种方式使用WinExist函数忽略包含按钮的窗口为什么只能打开一个窗口?Alt+Tab(在Windows7中设置为良好的旧XP样式)可将您切换回以前的活动应用程序。我测试了大约10个打开的窗口。winactivate的问题是,你需要知道上一个窗口的ID,而你按下按钮时无法获取该ID。你可以使用settimer循环…关于Send v.s.ControlSend,我必须承认我甚至没有看那个。我只是看看为什么它没有将数据发送到正确的窗口。我认为这与windows 8有关。metro应用程序环境似乎在向alt tab功能扔一个曲线球。但将尝试alt+esc和check window方法。请检查我的建议,先使用alt+esc,这在我的计算机上也适用,可能比让脚本不断监视windows更改更好更快。