偷懶是進步的原動力,即使就像關閉視窗這樣一個簡單的動作。
先前介紹過的StrokeIt!用右鈕畫個「L」可以達成關閉視窗的目標,但今天的需求是使用鍵盤。
EscapeClose是一個按Escape鍵來迅速關閉視窗的工具,它有幾種模式:
- 模式一:按Escape鍵後,滑鼠游標自動到到視窗的關閉按鈕(X)處
- 模式二:按Escape鍵後 ,立即關閉視窗
- 模式三:按Escape鍵後,視窗最小化
但Escape鍵是經常使用的按鍵(例如中文輸入時的取消鍵),因此單單用一個Escape來關閉視窗實在是太危險,若是連按兩個Escape鍵應該就比較妥善了。
最後是使用AutoHotkey來完成這個需求。
先用最簡單的複合鍵 Ctrl+` (Escape鍵下方的Back Quote);WinGetActiveTitle取得目前視窗的標題,再用WinClose把此標題的視窗關閉:
| ^`:: WinGetActiveTitle, Title WinClose, %Title% return |
接著用滑鼠左鈕,把左鈕(Lbutton)視同Ctrl、Shift等按鍵,按住不放後再按Escape鍵;按住不放A鍵再按B鍵的寫法是 「A & B」。
~在這裡是指示原有的左鈕仍要處理,若不加~則左鈕就整個失效了。
| ~LButton & Escape:: WinGetActiveTitle, Title WinClose, %Title% return |
比照上例,我們也可以按住左鈕不放再按右鈕(RButton)來執行,以省去鍵盤的操作。
| ~LButton & RButton:: WinGetActiveTitle, Title WinClose, %Title% return |
連按兩個Escape的寫法就複雜許多 :
- 用KeyWait讀取鍵盤輸入,如果0.5秒內不是按Escape則結束
- 0.5秒內按了Escape,則再讀第二個按鍵,若為Escape則關閉視窗
- 若第二個按鍵不為Escape則結束
| ~Esc:: Keywait, Escape, , t0.5 if errorlevel = 1 return else Keywait, Escape, d, t0.1 if errorlevel = 0 { WinGetActiveTitle, Title WinClose, %Title% return } return |
大功告成!運作起來一切正常。
在撰寫與測試期間為了方便重新載入的腳本,另外寫了個重新載入的動作:按住左鈕不放再按R鍵。
| ~LButton & r:: reload return |
##
您可能也會有興趣的類似文章
- 用AutoHotkey改造特殊按鍵 (5則留言, 2008/03/19)
- AutoHotkey:在FireFox裡用鍵盤瀏覽網頁 (2則留言, 2008/03/27)
- [AutoHotkey] 寫得不錯的AutoHotkey推薦文 (3則留言, 2007/10/31)
- 用AutoHotkey改造ThinkPad X61按鍵 (2則留言, 2008/03/23)
- [Tools] 撰寫AutoHotKey指令以複製檔案 (2則留言, 2005/06/11)
- 如何轉換AutoHotkey的預設分隔字元:冒號 (2則留言, 2008/03/17)
- 用AutoHotkey統一不同工具的偵錯功能鍵 (0則留言, 2008/03/19)
- [Tools] 常用的AutoHotKey設定 (9則留言, 2005/05/12)
- 讓MSN的Esc鍵失效 (5則留言, 2008/10/22)
- 用AutoHotkey輕鬆製作螢幕小鍵盤 (12則留言, 2008/03/16)
- [AutoHotkey] 在檔案總管裡按滑鼠滾輪切換到上層資料夾 (3則留言, 2011/06/23)
- 用AutoHotkey防止因按Esc鍵而不慎誤關視窗 (0則留言, 2011/04/01)
- 支援Unicode的Autohotkey終於浮上抬面! (0則留言, 2010/10/16)
- [Tools] 操作熱鍵與熱字串的超便利工具:AutoHotKey (13則留言, 2005/04/29)
- 輕鬆學會彈指神功-揭露AutoHotkey絕技 (38則留言, 2008/04/10)















太棒了!原來我想用單個esc鍵的,但是失敗了。多謝分享。給大家一個好東西。AutoHotkey漢化了一半的幫助菜單。http://pickup.mofile.com/4743716622921562
Not for VI user!
您好!由於您的文章開啟對AutoHotkey的興趣,我引用您的範例發表了一篇心得以及相關的範例於:http://bloguide.ettoday.com/jazzdog/textview.php?file=54048若您認為不妥,還煩請通知一聲我便將相關資源從網路移除!在此還是感謝您的blog提供我許多有用的資訊!
歡迎分享!
要關閉當前視窗的化用 WinClose, A就好了。
版主您好,
參考了您的指令碼,我作了一些變形的應用,但出了一些狀況,想向您請教
能不能在同一按鍵上,壓一下是一個指定功能,壓兩下是另一個指定功能,我問題發生在壓兩下除了指定的功能之外還是會發送壓一下時的指令,造成干擾,我寫的指令如下:
~LCtrl::Keywait, LCtrl, d, t0.3if errorlevel = 1Send {LWin Down}-{LWin Up}returnelseKeywait, LCtrl, d, t0.3if errorlevel = 0{send ^creturn}return
請版主為小弟指點一下迷津,感激不盡!
不好意思,我的指令碼應該是這個才對
~LCtrl::Keywait, LCtrl, d, t0.5if errorlevel = 0send #{up}elseKeywait, LCtrl, d, t0.5if errorlevel = 1send ^vreturn
沒有問題!
您肯幫忙就很謝謝了^.^
版主大人,
您寫的那一段指令,的確能解決我的問題,再次的感謝您的幫忙
剛看著您的網頁入門中,這個功能超棒,可是一直試不出來,如果只是單純想連按兩下關閉目前視窗怎麼寫
把倒數第二個黃色框框裏面copy進去都沒作用的感覺,謝謝您的網站,入門中!!
這些指令當初寫完都有測試過, 但因許久未用,不知會否與Autohotkey的版本有關?
我覺得是我不會用的可能比較大,剛試試看把條件改成比較簡單的符合就送出Alt+F4似乎可行,雖然感覺比較不智慧一點,暫時
能用就好,另外看到板主大人你回應許久未用,嚇到一下,因為想請教一下有沒有更懶的指令,想說設成按鍵按下2秒才啟動指
令,若還記得的話煩請不吝賜教~~~
許久未用指的是連按Esc兩下的這個功能啦。Autohotkey無法一日沒有它哩,按下兩秒才作用要查一下指令…
簡睿大哥,
小弟想請教您,我想在AHK寫出功能鍵取代一般論壇留言板上的Submit和Cancel的功能,以下語法會送出Submit若以此網頁為例,
當我按AHK的送出留言就會啟動留言板上的送出留言功能,懇請大哥為我解答~祝中秋節快樂。
Gui +AlwaysOnTop
Gui, Font, S09 cFF0000 , Tahoma
Gui, Add, Tab, x-4 y0 w278 h143 , Page1
Gui, Font, S16 c000000 , Tahoma
Gui, Add, Button, x2 y22 w65 h30 ,送出留言
Gui, Tab, Page1
ButtonSOIC:
WinActivate, ahk_id %k_ID%
Clipboard = Submit
SendInput Submit
Return
GuiClose:
ExitApp
網頁的submit不是按Enter就可以嗎?要控制網頁上的event,似乎用Firefox+GreaseMonkey比較方便哦?
簡睿大哥
我已看過Firefox/GreaseMonkey兩套軟體簡介,看起來是改Script來達到效果而且效果真棒,我是要改微軟的MOSS(Microsoft Office SharePoint System)網頁,因為它的Submit Button在網頁的最上面與最下面,中間我設定了大約100個Item吧,用滑鼠滾很麻煩,我怕侵犯到微軟權益所以才會想到用AHK。
若我在此網站的留言板打完字後必須將滑鼠移動到Button"送出留言"按下滑鼠才可Input,因此我想要用AHK做一個Button取代此功效,此外以此網頁為例按ENTER不會取代Submit,MOSS也是一樣,對用AHK建置Submit Button您有何建議?
附註:託您洪福,我用AHK依照我公司需求寫一個完整的鍵盤介面,這個介面獲得好評~謝謝你。
Sorry, 因為沒有使用SharePoint,無法提供作法,或許可以修改樣板,加入JavaScript來處理?
但如果硬要用Autohotkey做的話,大概是送出Ctrl+End把頁面移到最後面,再用MouseMove X, Y將游標移到(X,Y)座標,再送出LButton做click動作。
簡睿大哥,
謝謝