2012-08-15 89 views
0

我正在測試AutoHotkeys,作爲在應用程序運行時阻止用戶使用Ctrl,Alt和Windows鍵的一種方式。使用隨AutoHotkeys編譯器如何讓AutoHotkeys的功能在關閉.exe時儘快停止工作?

LAlt::return 
RAlt::return 
LControl::return 
RControl::return 
RWin::Return 
LWin::Return 

到.exe:要做到這一點,我編寫的代碼。

我的問題是,通常當我關閉.exe文件時(通過代碼使用TerminateProcess(,)或手動),密鑰不會立即釋放。例如,Windows Key可能需要10秒鐘才能被「解鎖」,並能夠再次使用,對我而言這是不可接受的。

所以,我有兩個問題:

  • 有沒有辦法解決這個問題?如何在.exe關閉後立即釋放密鑰?
  • 如果我試圖通過代碼獲得相同的功能,會有什麼改進嗎?或者,如果我自己創建鉤子,我會遇到與AutoHotkeys相同的問題?

感謝,

Momergil

回答

2

AutoHotkey的有一個內置的終止腳本命令ExitApp
這個例子使Esc鍵您終止熱鍵:

Esc::ExitApp 

好像你正在經歷可能與它多久採取關閉該程序的延遲。 您可以嘗試使用#If命令*
(即僅當Flag = 1時它們被阻止)製作熱鍵。
然後,您可以通過使用OnExit,使腳本在ExitApp之前快速更改上下文。 OnExit子例程在腳本以任何方式退出時被調用(除非它被諸如「End Task」之類的東西所殺)。您可以使用GoSub命令通過熱鍵調用子例程。

Flag := 1 
OnExit, myExit 

Esc::GoSub, myExit 

#If Flag 
LAlt::return 
LCtrl::return 
x::return 
#If 

myExit: 
Flag := 0 
Exitapp 

*#If命令需要Autohotkey_L
另一個選項將更加詳細,但爲AHK basic工作的是hotkey命令。


另一個選擇是讓AutoHotkey運行目標應用程序,並且在退出應用程序時,AutoHotkey也會退出。這裏有一個記事本的例子。當用戶關閉記事本時,腳本會優雅地退出。

RunWait, Notepad.exe 
ExitApp ; Run after Notepad.exe closes 

LAlt::return 
RAlt::return 
LControl::return 
RControl::return 
RWin::Return 
LWin::Return 
+0

那麼,在最終產品中,我會從另一個軟件中打開和關閉AutoHotkeys.exe,因此通過代碼,我無法使用按鍵關閉.exe的想法。我會嘗試另一個。 – Momergil 2012-08-16 16:39:01

1

我會用winactive來禁用這些鍵。在這個例子中,「Evernote」禁用了modyfier鍵。一旦切換到另一個程序,鍵將被恢復,當您切換回Evernote時,修改鍵將再次被禁用。

SetTitleMatchMode, 2 ; Find the string Evernote anywhere in the windows title 
#ifWinActive Evernote 
    LAlt::return 
    RAlt::return 
    LControl::return 
    RControl::return 
    RWin::Return 
    LWin::Return 
#ifWinActive 
+0

那麼,究竟應該如何替換「Evernote」?我的應用程序的.exe的名稱? – Momergil 2012-08-16 16:32:14

+0

右鍵單擊AutoHotKey圖標並選擇Window Spy。一個間諜窗口將出現並保持在頂部。當你點擊自己的應用程序時,你會看到你的應用程序的名稱。在顯示屏的頂部。 – 2012-08-17 05:13:35