感謝㊣贊助鼓勵!

Google搜尋 »

分類

有朋自遠方來

[AutoHotkey] 連按兩次Escape鍵來關閉視窗

懶是進步的原動力,即使就像關閉視窗這樣一個簡單的動作。

先前介紹過的StrokeIt!用右鈕畫個「L」可以達成關閉視窗的目標,但今天的需求是使用鍵盤。

EscapeClose是一個按Escape鍵來迅速關閉視窗的工具,它有幾種模式:

  1. 模式一:按Escape鍵後,滑鼠游標自動到到視窗的關閉按鈕(X)處
  2. 模式二:按Escape鍵後 ,立即關閉視窗
  3. 模式三:按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

##

Bookmark and Share

相關文章

13 則留言 »[AutoHotkey] 連按兩次Escape鍵來關閉視窗

  • sfufoet

    太棒了!原來我想用單個esc鍵的,但是失敗了。多謝分享。給大家一個好東西。AutoHotkey漢化了一半的幫助菜單。http://pickup.mofile.com/4743716622921562

  • 訪客

    Not for VI user!

  • Jazzdog

    您好!由於您的文章開啟對AutoHotkey的興趣,我引用您的範例發表了一篇心得以及相關的範例於:http://bloguide.ettoday.com/jazzdog/textview.php?file=54048若您認為不妥,還煩請通知一聲我便將相關資源從網路移除!在此還是感謝您的blog提供我許多有用的資訊!

  • 簡睿

    歡迎分享! 

  • 阿德

    要關閉當前視窗的化用 WinClose, A就好了。

  • Jackson

    版主您好,
    參考了您的指令碼,我作了一些變形的應用,但出了一些狀況,想向您請教
    能不能在同一按鍵上,壓一下是一個指定功能,壓兩下是另一個指定功能,我問題發生在壓兩下除了指定的功能之外還是會發送壓一下時的指令,造成干擾,我寫的指令如下:
    ~LCtrl::Keywait, LCtrl, d, t0.3if errorlevel = 1Send {LWin Down}-{LWin Up}returnelseKeywait, LCtrl, d, t0.3if errorlevel = 0{send ^creturn}return
    請版主為小弟指點一下迷津,感激不盡!

  • Jackson

    不好意思,我的指令碼應該是這個才對
    ~LCtrl::Keywait, LCtrl, d, t0.5if errorlevel = 0send #{up}elseKeywait, LCtrl, d, t0.5if errorlevel = 1send ^vreturn

  • Jackson

    沒有問題!
    您肯幫忙就很謝謝了^.^

  • Jackson

    版主大人,
    您寫的那一段指令,的確能解決我的問題,再次的感謝您的幫忙

  • san

    剛看著您的網頁入門中,這個功能超棒,可是一直試不出來,如果只是單純想連按兩下關閉目前視窗怎麼寫
    把倒數第二個黃色框框裏面copy進去都沒作用的感覺,謝謝您的網站,入門中!!

  • san

    我覺得是我不會用的可能比較大,剛試試看把條件改成比較簡單的符合就送出Alt+F4似乎可行,雖然感覺比較不智慧一點,暫時
    能用就好,另外看到板主大人你回應許久未用,嚇到一下,因為想請教一下有沒有更懶的指令,想說設成按鍵按下2秒才啟動指
    令,若還記得的話煩請不吝賜教~~~

    • 簡睿

      許久未用指的是連按Esc兩下的這個功能啦。Autohotkey無法一日沒有它哩,按下兩秒才作用要查一下指令…

填寫回應

 

 

 

您可使用這些HTML標籤

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

隨機文章

  1. 《日俄戰爭物語~萬里晴空下的驚濤駭浪》 
  2. [Tools] 輕便的桌面行事曆:Rainlendar 0.21 (7)
  3. 超級起手式-兼具效率與彈性的程式啟動器FARR 
  4. 從星際大戰三部曲看到民主的脆弱 
  5. 重置Firefox Ubiquity的設定 
  6. 專精於數位相機的照片後製處理:PhotoCap (3)
  7. HTC Touch HD連結失效! 
  8. 佈景主題Atahualpa 3.5.2增加WordPress 3.0選單功能 
  9. 在WordPress裡測試PHP指令的方法 
  10. 487李同學的網誌 (1)

歷史熱門文章