天天看点

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