2013-02-24 87 views
2

我试图制作一个持久性浮动工具栏来帮助我在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 

,但它似乎并没有做不是让错误的声音,当我点击按钮的任何其他。我是否需要先告诉它先关注另一个窗口?

回答

0

我真的很喜欢这个主意!问题是,只要您点击其中一个按钮,焦点就会从您要控制的应用程序中被移除... 因此您将命令发送到您自己的AutoHotKey应用程序中...

一个简单解决这个问题的方法是首先发送一个Alt + Esc然后例如一个20毫秒的睡眠,发送你的命令。

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

切换的例子就这样结束了发送工作,,到位ControlSend的,, 唯一的问题是我唯一可以打开一个窗口在同一时间因为它是有用的。我会看看我是否不能使用WinExist函数来忽略包含按钮的窗口 – BFSmasher 2013-02-24 20:42:08

+0

为什么只能打开一个窗口? Alt + Tab(在Windows 7中设置好的旧XP样式)将您切换回前一个活动应用程序。我测试了大约10个窗口。 – 2013-02-25 05:42:05

+0

winactivate的问题在于,您需要知道上一个窗口的ID,在按下按钮时您无法获得该窗口的ID。您可以使用settimer循环... – 2013-02-25 05:44:06

0

这里是与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 
+0

检查我的建议,首先使用Alt + Esc,这也适用于我的机器,并且可能比脚本不断监视窗口更改的工作更好更快。 – 2013-02-25 09:20:12