天天看點

AutoHotkey版Warkey編制

       認識和學習 AutoHotkey 還是因為Dota(改鍵)。 Auto Hotkey 能做什麼呢?能做的太多了,有興趣自己體會。下面談談用它如何 制作 Warkey,需要有點AutoHotkey基礎,版權歸AutoHotkey以及為之貢獻的人所有,由本人了解拼湊。

       顯血就不說了,War3(魔獸争霸)1.22之後版本可以勾選是否始終顯血。主要就說下改鍵吧。先說不要界面GUI的,最直接的一種方法:q::Numpad7(小鍵盤7),按q就是Numpad7了,很神奇吧,不過這就影響聊天啦,在AutoHotkey中在熱鍵前加~原來鍵的功能不會被屏蔽,比如說~q::Numpad7,就會發送q7。是以我們這樣改下,

~q:: 
Send, {Numpad7}{BS} 
return    
           

這樣就不影響聊天而且能達到改鍵的目的, 程式 起始處加上#SingleInstance force(隻 運作 一次程式),#IfWinActive,  ahk _class Warcraft III(僅當war3為活動窗體熱鍵有效)。然後根據自己的習慣,就可以制作個人的Warkey了。 

   再說下有GUI的,下面的是個單獨的程式,就是沒有标準 INI 檔案 存儲使用者 輸入 資訊,貼下程式 代碼 : 

#SingleInstance force 
#NoEnv 
#IfWinActive, ahk_class Warcraft III 
SendMode Input                         
SetMouseDelay, -1,-1 
SetKeyDelay, -1,-1 
Gosub, D_Window    ;進入主界面子程式 
Gosub, D_Tray          ;進入托盤子程式 
;以下為顯血部分; 
Loop 
{ 
   IfWinActive, Warcraft III ahk_class Warcraft III 
   { 
If (m_bIn == 0) 
{ 
    If (AllyHB == 1) 
   { 
       Send, {tab} 
       Sleep 200 
       Send, {[ Down} 
   } 
    If (EnemyHB == 1) 
   { 
       Send, {tab} 
       Sleep 200 
       Send, {] Down} 
   } 
    m_bIn := 1 
} 
   } 
   Else 
   { 
If (m_bIn == 1) 
   m_bIn := 0 
   } 
   Sleep 200 
} 
;============================; 
D_Window:     ;主界面 
{ 
Menu, SetMenu, Add, 儲存設定 (&S), D_Define 
Menu, SetMenu, Add 
Menu, SetMenu, Add, 退出程式 (&X), D_AppExit 
Menu, HelpMenu, Add, 關于 (&A), D_HelpAbout 
Menu, MyMenu, Add, 程式設定 (&D), :SetMenu 
Menu, MyMenu, Add, 幫助 (&H), :HelpMenu 
Gui, Menu, MyMenu 
Gui, Add, GroupBox, x16 y7 w180 h130 , 物品欄 
Gui, Add, GroupBox, x16 y147 w180 h50 , 血條欄 
Gui, Add, Text, x26 y32 w90 h30 , 物品欄1: 
Gui, Add, Text, x26 y92 w90 h30 , 物品欄2: 
Gui, Add, CheckBox, Checked x26 y167 w80 h20 vAllyHB, 友方血條 
Gui, Add, CheckBox, Checked x106 y167 w80 h20 vEnemyHB, 敵方血條 
Gui, Add, Hotkey, x86 y27 w90 h20 vItem7, Q 
Gui, Add, Hotkey, x86 y87 w90 h20 vItem8, ~ 
Gui, Show,   x301 y147 h233 w217, MicrOperation 
Gosub, D_Define                   ;進入定義子程式 
Return 
} 
;============================; 
D_Tray: 
{ 
   Menu, Tray, NoStandard 
   Menu, Tray, Add, 設定 
   Menu, Tray, Add, 退出 
   Menu, Tray, Default, 設定 
   Menu, Tray, Click, 1 
   Menu, Tray, Tip, MicrOperation 
   Menu, Tray, Icon, , , 1 
   Return 
} 
;============================; 
D_Define: 
{   ;下面兩句是為了取消先前定義的熱鍵,要是沒有後果很嚴重,很多鍵亂了套。當然隻定義一次是沒問題的,要是定義後再改就會出現問題。 
   if Item7 
HotKey, ~%Item7%, D_Item7,Off 
   if Item8 
HotKey, ~%Item8%, D_Item8,Off 
   Gui, Submit                                ;托盤程式,并使使用者輸入資訊與相關變量關聯 
   if Item7 
HotKey, ~%Item7%, D_Item7,On 
   if Item8 
HotKey, ~%Item8%, D_Item8,On 
   Return 
} 
;============================; 
D_Item7: 
{ 
   Send, {Numpad7}{BS}                         ;這裡出現一個倒退鍵足矣,相信不會有人定義組合鍵的,dota講的是速度和操作,按鍵越簡單越好 
   return 
} 
;============================; 
D_Item8: 
{ 
   Send, {Numpad8}{BS} 
   return 
} 
;================================; 
設定: 
{ 
Gui, Show, , MicrOperation 
Return 
} 
;============================; 
D_HelpAbout: 
{ 
Msgbox , 0, MicrOperation,AutoHotkey版權所有 
Return 
} 
;============================; 
D_AppExit: 
GuiClose: 
退出: 
{ 
ExitApp                            ;退出程式 
Return 
} 
GuiSize: 
{ 
If (A_EventInfo==1)          ;這裡隻是針對視窗最小化事件處理,就是将程式托盤并關聯變量 
Gosub, D_Define 
} 
;============================; 
LWin::          ;屏蔽左Windows鍵 
Return