1. 程式人生 > >windows_修改快捷鍵對映

windows_修改快捷鍵對映

作為走在時代最前沿的程式設計師,電腦必須玩的溜。要想電腦玩的溜,首先快捷鍵必須用的熟練。一般我們用快捷鍵最多的地方就是IDE,高效的寫程式碼的時候是絕對離不開各種快捷鍵的。可以說,快捷鍵在很大程度上減少了我們很多繁瑣的工作。

很多軟體都自帶了各種各樣的快捷鍵,並允許使用者修改快捷鍵。window作為一個成熟的系統,也提供了眾多快捷鍵,比如win+E快速開啟我的電腦,win+R快速開啟命令列,win+L鎖定螢幕等等。但是我們發現,win的快捷鍵還是不能解決一些我們想要的操作。比如想開啟位置比較深的某個資料夾(需要逐漸開啟好幾層目錄),想要快速最小化當前視窗,想要快速開啟某個應用(而不是跑到桌面點選應用圖示啟動),或者在眾多開啟的程式中快速開啟某個程式等等。

autohotkey可以說就是為了解決這些問題而誕生的。

安裝 Autohotkey
從autohotkey官網下載 安裝包。雙擊安裝。安裝過程很簡單,一直點下一步就好了(放心,不會給你什麼全家桶)。安裝好後就可以關閉安裝視窗。就可以開搞了。

設定快捷鍵
隨便找個目錄,滑鼠右鍵新建一個autohotkey的指令碼。 


對映一個動作——最小化當前視窗
檔名隨便叫,建立好指令碼後用編輯器開啟這個指令碼。然後我們就可以開始寫autohotkey的程式碼。輸入以下程式碼:

#w::    ;;這裡的 #->表示window鍵  w->表示字母w鍵                   
WinMinimize,A    ;;最小化當前視窗      
return     ;;結束程式碼段


寫完後我們儲存,然後雙擊該指令碼,指令碼就開始運行了。這時我們同時按下win+w鍵,當前正在活動的視窗就會最小化了。

對映一個鍵——上左下右
經常打字的人都知道,我們編輯文字時要上下左右移動游標,難免要將手移到方向鍵再移回來打字。對我這樣的懶癌後期患者,這簡直不能忍。所以我們通過autohotkey將上下左右鍵對映成其他鍵。下面是程式碼:

!k::   ;; !->alt鍵   k->字母鍵k
Send {Up}   ;;輸入 上 鍵
return

!j::
Send {Down}
return

!h::
Send {Left}
return

!l::
Send {Right}
return


我將它們對映成了 alt+h,j,k,l (符合vim風格,讀者可以設定成jkli,可能更容易適應)。這樣我們在編輯文字時想移動游標直接左手按alt鍵,右手hjkl就可以移動游標了。是不是很方便?

對映一組鍵盤操作——刪除複製貼上一整行
很多IDE都有快速刪除一行,複製一行的快捷鍵。我們通過aotohotkey也能實現

;;;;;;;;;;;;;刪除一整行
!d::   ;alt+d
Send {Home}   ;輸出回車
Send +{End}   ;輸入shitf鍵+end鍵
Send {delete}   ;輸入delete鍵
return 
;;;;;;;;;;;;;複製一整行
!y::
send {home}
send +{end}
send ^c   ;輸出ctrl+c,複製一整行
return
;;;;;;;;;;;;;另起一行貼上內容                                                                   
!p::                                                                                        
send {end}                                                                                  
send {enter}                                                                                
send %clipboard%    ;將剪貼簿的內容輸出                                                  
return  


因為autohotkey設定的是windows全域性快捷鍵。這樣,我們在任何編輯器都可以使用這些快捷鍵了,使用alt+d刪除一行,alt+y複製一行,alt+p貼上內容。(但是要注意別把軟體自帶的快捷鍵給覆蓋了)。

開啟某軟體或者某網頁
我們工作中經常要開啟某軟體或者某網站,又或者搜尋某個東西。通過autohotkey我們可以非常快速的做到這一切。

;;; 選中關鍵字後,同時按下win+b,開啟百度搜索
#b::  ;win+b
Send ^c   ;輸入 ctrl+c
sleep,100  ; 等待100毫秒
run https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=92765401_hao_pg&wd=%clipboard%  
;根據選中的內容開啟百度搜索
return

;;;  判斷xshell程序是否啟動,啟動的話快速啟用(視窗最大化)xshell,否則啟動xshell
!+s::   ;; alt+shift+s
    ifWinExist,ahk_class Xshell::MainFrame_0   ;;;判斷xshell 程序是否啟動
        winActivate   ;;; 啟用視窗
    else
        run E:\xshell\Xshell.exe   ;;; 執行xshell軟體
return

這樣我們想百度某個關鍵字的時候,直接選中這個關鍵字,然後同時按下win+b。系統就會通過預設瀏覽器開啟百度頁面(url已經攜帶了剛才那個關鍵字了)。

上面的第二段程式碼實現了快速開啟某個應用的功能,我們就不用去管它是否已經啟動了,因為這些autohotkey已經幫我們判斷了。

如果你不知道應用的 ahk_class ,也可以設定一個快捷鍵獲取應用的ahk_class。

#g::
    WinGetClass, title,A
    msgbox,%title%
    clipboard=%title%
return


各個鍵的對映關係
下面列出一些特殊鍵的對映關係,更多的請參考官方文件:

符號    說明
#    window鍵
!    alt鍵
^    ctrl鍵
+    shift鍵
<    有兩個相同鍵時,表示左邊那個鍵.比如alt有左右兩個鍵,
>    表示相同鍵中右邊的那個鍵
LButton    滑鼠左鍵
RButton    滑鼠右鍵
MButton    滑鼠中間鍵
WheelDown    滾輪向下
WheelUp    滾輪向上
Backspace    退格鍵
CapsLock    大小寫切換鍵
Escape    退出鍵


設定字串對映
簡單對映
我們可能有時會有這樣一個場景,經常要輸出一串長字串,而且都是一樣的。但是每次都輸入也會覺得麻煩,有時甚至可能輸錯。autohotkey 提供了一種類似字串對映的功能, 能夠讓我們去掉這些重複工作。

::hello::  ;;和快捷鍵不同,前面加兩個冒號 '::'  說明這是個字串對映 
    send hello world   ;;會變成改成輸入hello world
return 

;;; 這段程式碼實現
::pwd::
    send yangjb{tab}123456
return



執行這個指令碼後,你會發現你輸入的hello會全部被autohotkey替換成 hello world。

後面一段程式碼實現了在網頁登入框,輸出pwd的時候,自動填寫使用者密碼的功能。({tab}用於換行)。建議做字串對映的時候前面帶一個或兩個反斜槓’/’,這樣就不會在平常輸入文字的時候自動被對映走了。

通過字串對映執行程式
凡是設定快捷能做的,字串對映也一樣能做。比如我們設定一個輸出 /e就開啟e盤的功能。

::/e::
    run e:  ;;開啟e盤
return


這樣,我們在任何地方輸入/e,都會開啟e盤了。當然,你也可以開啟某個具體的軟體,或者開啟某個網站。

通過視窗輸入命令
有時覺得快捷鍵太多了記不住,輸入字串又要特地去找個編輯的地方輸入,都有各自的缺點。這時,我們就可以使用autohotkey自帶的介面來優化我們的體驗了。通過autohotkey彈出視窗,我們輸入自定義的指令,快速實現我們想要的功能。autohotkey喚出一個輸出視窗很簡單,只要一句話就搞定: inputBox,fieldName,boxName。fieldName是用於接受使用者輸入的字串,boxName是視窗名。下面直接上一個程式碼示範:

tmp_path=f:\tmp    ;;; autohotkey 可以事先定義一些變數
idea_path=E:\IntelliJ IDEA 2017.1.2\bin\idea64.exe
!c::
    inputBox,command,enter command                                                          
    if ErrorLevel                                                                            
        return  
    else
        if (command=="tmp")         
            run %tmp_path%   ;;;開啟指定資料夾 用兩個百分號%%包圍說明這是一個變數
        else if (command=="baidu")
            run http://www.baidu.com  ;;; 快速開啟百度
        else if (command=="c" || command=="d" || command=="e" || command=="f")
            run %command%:/   ;;快速開啟這些盤
        else if (command=="idea")
            run %idea_path%     ;;快速開啟idea
    return


上面的程式碼,我們自定義了4個操作。當我們按下快捷鍵alt+c來喚出輸入框。輸入tmp的時候,會開啟f:\tmp 目錄。輸入baidu的時候,會開啟百度。輸入c d e f的時候,會開啟對應的碟符。最後,輸入idea的時候,會開啟idea程式。

autohotkey輸入框: 


這樣,我們可以將任何字串對應到具體的操作中去。

在具體的某個軟體中設定快捷鍵
有的時候,我們不想在window全域性設定快捷鍵,只想在某個程式中設定快捷鍵。autohotkey 
也可以滿足你的要求。

#IfWinActive ahk_class Chrome_WidgetWin_1
    ;; 下面的語句塊只在chrome中生效
    !n::Send ^t 
    !x::Send ^w
    !,::Send ^+{Tab} 
    !.::Send ^{Tab} 
    !z::Send ^+t 
    !+h::send ^h
return 



上面的程式碼實現只在chrome瀏覽器設定快捷鍵的作用。通過 #IfWinActive ahk_class Xshell::MainFrame_0 判斷當前活動的是否是chrome程序,來啟用快捷鍵設定。程序的ahk_class如何獲取上文中已經說過。

平常我們要左右移動chrome標籤,chrome雖然提供了ctrl+tab或者ctrl+shift+tab,但是相當彆扭。我們用autohotkey將它對映成alt+,鍵和alt+.鍵。就可以很方便的實現標籤的切換了。alt+n可以快速的新建標籤,alt+x快速關閉一個標籤。

快速獲取滑鼠位置處的顏色取值
 

!+c::
    MouseGetPos, mouseX, mouseY
    ; 獲得滑鼠所在座標,把滑鼠的 X 座標賦值給變數 mouseX ,同理 mouseY
    PixelGetColor, color, %mouseX%, %mouseY%, RGB
    ; 呼叫 PixelGetColor 函式,獲得滑鼠所在座標的 RGB 值,並賦值給 color
    StringRight color,color,6
    ; 擷取 color(第二個 color)右邊的6個字元,因為獲得的值是這樣的:#RRGGBB,一般我們只需要 RRGGBB 部分。把擷取到的值再賦給 color(第一個 color)。
    clipboard = %color%
    ; 把 color 的值傳送到剪貼簿
return