首頁/ 汽車/ 正文

超級熱鍵:一學就會簡單程式設計,提升 Windows 效率

超級熱鍵可透過簡單程式設計 —— 自動化完成複雜操作,提升效率。

快速上手

本教程需要一個很小的開源軟體 ImTip ( 體積 639 KB ),瞭解 ImTip 請點選:電腦必備:通用輸入法狀態提示,再也不怕按錯,再也不用看右下角

請右鍵點開 ImTip 托盤選單,然後點選

「管理超級熱鍵」

超級熱鍵:一學就會簡單程式設計,提升 Windows 效率

然後將熱鍵配置改為如下程式碼,並且勾選

「啟用超級熱鍵」

,再點選

「儲存」

按鈕使熱鍵生效。

//大寫金額、日期、時間 [“Ctrl+$”] = function(hFocus){ win。dlg。chineseNumber()。show();};//開啟調色器[“Ctrl+#”] = function(hFocus){ //建立選色器 var dlg = win。ui。ctrl。pick(); dlg。show(); //置頂 win。setTopmost(dlg。hwnd,true); };

上面的配置定義了 “Ctrl+$”,“Ctrl+#” 這兩個熱鍵。中括號裡是

按鍵名字串

,等號的後面指定要輸入的文字或

者需要執行的函式物件

以上熱鍵配置

將自動轉換為

以下 aardio 程式碼

,然後編譯執行:

//匯入超級熱鍵import key。hotkey; //建立超級熱鍵var superHotkey = key。hotkey(winform);//批次載入熱鍵配置表superHotkey。loadTable({ [“Ctrl+$”] = function(hFocus){ win。dlg。chineseNumber()。show(); }; [“Ctrl+#”] = function(hFocus){ var dlg = win。ui。ctrl。pick(); dlg。show(); win。setTopmost(dlg。hwnd,true); };});

超級熱鍵配置其實就是一個表物件 ( table )。

每個熱鍵配置由等號分隔的鍵值對組成,等號前面指定熱鍵,等號後面用一個函式指定要執行的程式碼

。多個熱鍵配置使用分號隔開。

如果不會程式設計沒關係,下面會提供可直接複製貼上的範例,建議先看幾個範例 —— 再看一下:aardio 程式語言快速入門——語法速覽

下面看一下 Ctrl + $ 熱鍵執行效果:

超級熱鍵:一學就會簡單程式設計,提升 Windows 效率

Ctrl + # 熱鍵執行效果:

超級熱鍵:一學就會簡單程式設計,提升 Windows 效率

超級熱鍵檢測規則

1、

如果首個按下的鍵不是控制鍵,則不必同時按住多個鍵

。如果按下的鍵是已註冊的熱鍵前半部分,則阻止當前按鍵繼續傳送。如果繼續按鍵已不符合任何熱鍵,則釋放已捕獲的按鍵並按原順序重新發送。

2、如果

首次按住的是控制鍵( CTRL,ALT,SHIFT,WIN 之一),則必須同時按住多個鍵才算已完成熱鍵

。如果這樣同時按住的多個鍵是一個已完成的熱鍵,但同時又是其他熱鍵的前半部分,則必須放開所有鍵才會生效。

3、如果註冊單個控制鍵熱鍵,並且加上 @ 字首,則放開該鍵(且中間沒有按其他鍵)才算完成熱鍵。

4、超鍵熱鍵中任何鍵名都只表示該鍵名所在的按鍵,不區分上檔鍵。例如熱鍵 “~hi” 指連續按 3 個鍵,其中的 ~ 鍵不必按 Shift + ~。

5、超級熱鍵會檢測按鍵順序,[“Ctrl+Shift”] 與 [“Shift+Ctrl”] 是不同的熱鍵。如果希望不同順序觸發同一個回撥函式,則需要新增多個熱鍵配置。

示例:

//按連續按 3 個鍵,每個鍵都要放開。[“~AA”] = function(){ };//按下Shift不放,再按2下Q。[“SHIFT+Q,Q”] = function(){ };//按下Ctrl不放,再按K, 然後都放開。[“Ctrl+K”] = function(){ };//按下Ctrl不放,再按2次K。//因為不是其他熱鍵的前半部分,不需要等待放開。[“Ctrl+K,K”] = function(){ };//表示按下 Shift 鍵再放開,中間不按其他鍵,//通常不會阻止 Shift 切換輸入法狀態的預設熱鍵。[“@Shift”] = function(){ };

執行 「aardio 自帶範例 > Windows 視窗 > 快捷鍵 > 超級熱鍵」看下效果:

超級熱鍵:一學就會簡單程式設計,提升 Windows 效率

超級熱鍵回撥函式

熱鍵回撥函式返回 true 表示允許系統繼續傳送按鍵,否則取消該按鍵,不再繼續傳送。

例如把斜槓“/”改為頓號的熱鍵配置:

[“/”] = function(hFocus){ var openState,mode = key。ime。state();// if( !openState /*&&(mode==3) */ ) return true; key。sendString(“、”)};

上面的程式碼檢測到當前不是中文標點就執行

return true

允許系統繼續傳送按鍵。

如果熱鍵回撥函式返回一個函式物件,則取消該按鍵不再發送,並在返回函式以後非同步執行返回的函式物件。

例如輸入法糾錯熱鍵配置就是這樣做的:

[“Ctrl+,”] = function(hFocus){ //。。。 省略其他程式碼 //透過返回函式非同步執行耗時操作 return function(){ key。combine(“SHIFT”,“HOME”); key。combine(“CTRL”,“C”); //。。。 省略其他程式碼 }; };

超級熱鍵基於低階鍵盤鉤子,在熱鍵回撥中不允許做耗時操作(在熱鍵回撥中返回非同步執行的函式則不受限制)。

超級熱鍵配置範例:執行指定程式

//執行計算器[“~calc”] = function(hFocus){ process。execute(“calc。exe”)};//執行word[“~word”] = function(hFocus){ var word = com。CreateObject(“Word。Application”) if(word)word。Visible = true; };

超級熱鍵配置範例:微軟全拼雙拼切換

[“Ctrl+P”] = function(){ var dpSchemes = tsfInput。getDoublePinyinSchemes(); tsfInput。enableoublePinyinScheme(dpSchemes。default===null); }

超級熱鍵配置範例:改鍵演示

[“Ctrl+。”] = function(hFocus){ key。up(“Ctrl”); //先把已經按下的鍵彈起來 key。combine(“CTRL”,“A”); //換成別的鍵,具體看 aardio 庫函式文件 return false; //阻止按鍵事件};

超級熱鍵配置範例:取消次選鍵

[“;”] = function(hFocus){ if( winex。msCandidate。isVisible() ){ key。send(“ ;”) } else return true;};

超級熱鍵配置範例:按 Shift + Back 變 Ctrl + Z

[“SHIFT+BACK”] = function(hFocus){ key。up(“SHIFT”); //先把已經按下的鍵彈起來 key。combine(“CTRL”,“Z”)};

超級熱鍵配置範例:斜槓“/”改為頓號

[“/”] = function(hFocus){ var openState,mode = key。ime。state();// if( !openState /*&&(mode==3) */ ) return true; key。sendString(“、”)};

超級熱鍵配置範例:調整音量

//增加音量[“Ctrl+F6”] = function(hFocus){ key。press(“VOLUME_UP”);}//降低音量[“Ctrl+F7”] = function(hFocus){ key。press(“VOLUME_DOWN”);}//切換靜音[“Ctrl+F8”] = function(){ key。press(“VOLUME_MUTE”);}

超級熱鍵配置範例:依次按 ~date 輸入大寫的當前日期

[“~date”] = function(hFocus){ var zh = string。chineseNumber(‘〇一二三四五六七八九’); key。sendString(zh。date()); //改為 zh。time() 輸出大寫的當前時間};

注意超鍵熱鍵中任何鍵名都只表示該鍵名所在的按鍵,不區分上檔鍵。所以 ~ 鍵不需要同時按 Shift + ~ 。

超級熱鍵配置範例:按大寫自動切換到英文輸入

[“CAPSLK”] = function(hFocus){ key。ime。setOpenStatus(false); key。ime。setConversionMode(0); return true;};

超級熱鍵配置範例:右 Shift 鍵切換為英文

[“RSHIFT”] = function(hFocus){ key。ime。setOpenStatus(false); key。ime。setConversionMode(0); };

超級熱鍵配置範例:左 SHIFT 鍵切換為中文

[“LSHIFT”] = function(hFocus){ var openState,mode = key。ime。state(); if( openState && !key。ime。capital() ) return true; //當前已經是中文輸入模式,不改變預設行為 key。up(“SHIFT”);//先放開 SHIFT 鍵 //如果是大寫狀態,切換為小寫 if(key。ime。capital()) key。press(“CAPSLK”) //英文直接切中文 + 中文標點 key。ime。setOpenStatus(true); //開啟輸入法 key。ime。setConversionMode(1|0x400); //切換到中文狀態,這一步不能省略 //再次嘗試用鍵盤切換中文標點,這一步不能省略 key。combine(“CTRL”,“。”); //現在再次檢測中文標點狀態 var openState,mode = key。ime。state(); if(mode!=3/*_IME_SYMBOLMODE_SYMBOL*/){ //說明切換到了英文標點,再切換回去 key。combine(“CTRL”,“。”) } };

超級熱鍵配置範例:按 Ctrl + 。 切換到中文輸入 + 中文標點 + 小寫

[“Ctrl+。”] = function(hFocus){ var openState,mode = key。ime。state(); if( openState && !key。ime。capital() ) return true; //當前已經是中文輸入模式,不改變預設行為 key。up(“Ctrl”);//先放開 Ctrl 鍵 //如果是大寫狀態,切換為小寫 if(key。ime。capital()) key。press(“CAPSLK”) //英文直接切中文 + 中文標點 key。ime。setOpenStatus(true); //開啟輸入法 key。ime。setConversionMode(1|0x400); //切換到中文狀態,這一步不能省略 //再次嘗試用鍵盤切換中文標點,這一步不能省略 key。combine(“CTRL”,“。”); //現在再次檢測中文標點狀態 var openState,mode = key。ime。state(); if(mode!=3/*_IME_SYMBOLMODE_SYMBOL*/){ //說明切換到了英文標點,再切換回去 key。combine(“CTRL”,“。”) } };

超級熱鍵配置範例:輸入法糾錯,已輸出英文自動轉為中文輸入

[“Ctrl+,”] = function(hFocus){ var openState,mode = key。ime。state(); if( openState && !key。ime。capital() ) return true; //當前已經是中文輸入模式,不改變預設行為 key。up(“Ctrl”);//先放開 Ctrl 鍵 //如果是大寫狀態,切換為小寫 if(key。ime。capital()) key。press(“CAPSLK”) //英文直接切中文 + 中文標點 key。ime。setOpenStatus(true); //開啟輸入法 key。ime。setConversionMode(1|0x400); //切換到中文狀態,這一步不能省略 //再次嘗試用鍵盤切換中文標點,這一步不能省略 key。combine(“CTRL”,“。”); //現在再次檢測中文標點狀態 var openState,mode = key。ime。state(); if(mode!=3/*_IME_SYMBOLMODE_SYMBOL*/){ //說明切換到了英文標點,再切換回去 key。combine(“CTRL”,“。”) } //透過返回函式非同步執行耗時操作(避免系統刪除熱鍵鉤子) return function(){ key。combine(“SHIFT”,“HOME”);//選中當前行 key。combine(“CTRL”,“C”);//複製當前行 var line = win。clip。read(); //讀取剪貼簿文字 var str = string。match(line,“[a-zA-Z]+$”); //查詢尾部連續字母 key。press(“RIGHT”);//按右方向鍵,取消選區 //如果字串非空 if(#str){ key。repeat(“BACK”,#str);//按退格鍵指定次數(取字串長度) key。send(str);//字串轉換為傳送按鍵 //key。press(“SPACE”);//發果需要按空格,請取消前面的註釋符號 } }; };

超級熱鍵配置範例:貼上時替換指定的字元

[“Ctrl+V”] = function(){ var str = win。clip。read(); if(str && string。find(str,“abcd”)){ str = string。replace(str,“abcd”,“”); win。clip。write(str); } return true; //執行預設操作 }

超級熱鍵配置範例:引號配對

[`SHIFT+“`] = function(hFocus){ if( checkImeProcess(hFocus,”Code。exe“) ){ return true;//允許繼續傳送按鍵 } var o,s = key。ime。state(); key。sendString(s==3 ? `“”` : `”“`); //與目標視窗共享輸入狀態 winex。attach(hFocus,true); //設定LSHIFT,RSHIFT 為彈起狀態 key。up(”RSHIFT“,”LSHIFT“,”SHIFT“); key。setState(false,”RSHIFT“,”LSHIFT“,”SHIFT“); //移動游標 key。press(”LEFT“); //取消共享輸入狀態 winex。attach(hFocus,false);}

超級熱鍵配置範例:微軟五筆開啟或關閉拼音混輸

[”Ctrl+,“] = function(hFocus){ import win。reg; var reg = win。reg(”HKEY_CURRENT_USER\Software\Microsoft\InputMethod\Settings\CHS“); var mode = !reg。queryValue(”PinyinMixEnable“) ? 1 : 0 reg。setDwValue(”PinyinMixEnable“,mode) key。ime。changeRequest(0x4090409) key。ime。changeRequest(0x8040804)};

超級熱鍵配置範例:切換滑鼠左右鍵

[”Ctrl+SHIFT+RIGHT“] = function(hFocus){ ::User32。SwapMouseButton(!::User32。GetSystemMetrics(23));}

超級熱鍵配置範例:微軟五筆疊字鍵

[”`“] = function(hFocus){ var openState,mode = key。ime。state();//用法請檢視 aardio 文件 if(!openState || mode !=3 || key。getState(”Shift“) || key。getState(”Ctrl“) || key。getState(”CAPSLK“) ) { return true; //允許此按鍵繼續傳送 } key。combine(”SHIFT“,”LEFT“); //向後選一個字 key。combine(”CTRL“,”C“); //複製 key。press(”RIGHT“); //取消選中 key。combine(”CTRL“,”V“); //貼上};

實現更多功能 ……

ImTip 體積雖然小,但已自帶了大量 #aardio# 庫。您也可以下載 aardio ,將 aardio 目錄下的 /lib/ 目錄複製到 ImTip。exe 所在目錄 —— 超級熱鍵就可以使用全部的 aardio 庫了。

超級熱鍵:一學就會簡單程式設計,提升 Windows 效率

也可以在 /lib/ 目錄下新建使用者庫,然後透過 import 語句匯入超級熱鍵。

超級熱鍵配置本質是一個表物件 (table),不但可以包含鍵值對,也可以包含陣列成員。利用這個特性可在超級熱鍵配置內直接執行程式碼。例如新增一個檢測當前視窗啟動程式名的

全域性函式

checkImeProcess,然後使用該函式檢測目標視窗的啟動程式檔名:

(function(){ var lastFocus,lastPath,lastClass; checkImeProcess = function(hFocus,exeFile){ if(lastFocus != hFocus){ lastClass = win。getClass(hFocus); var tid,pid = win。getThreadProcessId(hFocus); lastPath = process。getPath(pid); lastFocus = hFocus } return (lastPath && io。splitpath(lastPath)。file == exeFile ) } })();//引號配對[`SHIFT+”`] = function(hFocus){ if( checkImeProcess(hFocus,“Code。exe”) ){ return true;//允許繼續傳送按鍵 } var o,s = key。ime。state(); key。sendString(s==3 ? `“”` : `“”`); //與目標視窗共享輸入狀態 winex。attach(hFocus,true); //設定LSHIFT,RSHIFT 為彈起狀態 key。up(“RSHIFT”,“LSHIFT”,“SHIFT”); key。setState(false,“RSHIFT”,“LSHIFT”,“SHIFT”); //移動游標 key。press(“LEFT”); //取消共享輸入狀態 winex。attach(hFocus,false);}

比較常用的按鍵、文字輸入函式:

//傳送字串key。sendString(“這裡是要傳送的字串”)//傳送按鍵key。send(“/”)//傳送按鍵key。press(“ENTER”)//判斷中文輸入法是否開啟,開啟則執行花括號中的語句if( key。ime。state() ){ }

更多庫函式用法請參考 aardio 自帶的《庫函式文件》,或者 aardio 自帶的範例:

超級熱鍵:一學就會簡單程式設計,提升 Windows 效率

aardio 也支援很多第三方程式語言,例如

C語言、C++、C#、Java、Python、R、Javascript、Node。Js、Fortran、VB、PHP、VBScript、PowerShell、NewLISP、AutoLISP、Delphi、FreeBASIC、Ruby、Rust、Julia、Nim、Go 語言、批處理 …… 用法請參考 aardio 自帶範例。

如果您對超級熱鍵還有任何疑問,歡迎在評論區留言,我會盡快解答。

相關文章

頂部