AutoHotkey应用于生死狙击动态键盘按键映射,願願(原创)

;***********************************************************************************;
;********************************   脚本概述    ************************************;
;***********************************************************************************;
;**     第〇,请不要利用本脚本的技术和方法进行非法外挂开发,否则后果自负!!!    **;
;**                                                                                                                                **;
;**     第一,本脚本功能不存在非法外挂特性,仅仅是为了玩家更好的体验游戏,并且仅  **;
;** 仅重新动态映射了游戏的三个功能键(f,g,h),并且完全开源。如果腾讯无端官方认定本 **;
;** 脚本为外挂,请论坛版主们手下留情。我会立即删除这个帖子。                                  **;
;**                                                                                                                                 **;
;**     第二,本脚本由腾讯生死狙击二区丿fly灬帝尊战队的高手高高手願願原创并分享, **;
;** 并保留软件所有权权利。本脚本测试环境为微软win8.1(64位)系统的firefox火狐网页 **;
;** 下的NPFLASH(64位)腾讯生死狙击flash游戏。其他系统如xp,vista,win10等等系统  **;
;** 以及微端和IE等等环境,未经测试。                                                                               **;
;**                                                                                                                                     **;
;**     第三,希望无端腾讯官方尽早开发游戏键盘按键设置功能,终结本脚本的使命。    **;
;**                                                                                                                                      **;
;**     第四,本脚本完全免费,完全开源,请自行辨别脚本的适用性。本脚本需要安装    **;
;** AutoHotkey  Version 1.1.28.02及以上的版本。为避免windows系统的用户帐户控制UAC **;
;** 的限制,最好以administrator身份运行本脚本。运行方法:右键点击脚本,选择选项卡 **;
;** Run Script。如果未出现Run Script选项,再次右键 点击脚本,重复操作。退出方法: **;
;** 点击任务栏,出现“H”字样图标,右键点击,选择 Exit。退出后,系统恢复原始状态,**;
;** 本脚本的功能完全失效。本脚本为纯绿色软件等级,本脚本基本不消耗系统资源,极其  **;
;** 轻质。                                                                                                                         **;
;**                                                                                                                                   **;
;**     第五,本脚本使用的语言是AutoHotkey Version 1.1.28.02软件的语言。如发现本  **;
;** 脚本有bug,请在论坛回复我,也可在游戏中告诉我,如有时间我会回复。                  **;
;**                                                                                                                                   **;
;**     第六,本脚本在概念上划分了三个键盘布局:一是竞技键盘布局,二是正常键盘布      **;
;** 局,三是windows原始键盘布局。                                                                             **;
;**                                                                                                                                   **;
;**     第七,windows原始键盘布局,不解释,就是字面上的意思。而正常键盘布局,仅仅 **;
;** 监听了ScrollLock键和Enter键的状态,其他特性与原始键盘布局完全一致;而竞技键盘 **;
;** 布局相比于正常键盘布局有三个变化:一是把f键变成q键,二是把g键也变成q键,三是  **;
;** 把h键变成原来的g键。                                                                                                **;
;**                                                                                                                                   **;
;**     第八,在全屏游戏下,ScrollLock键灯亮时,按回车,可在两种键盘布局间切换。  **;
;** 这样既保证了生死狙击竞技模式下,可以正常聊天打字,又保证了换枪和扔枪按键的需  **;
;** 要。                                                                                                                              **;
;**                                                                                                                                    **;
;**     第九,在脚本运行时,按ScrollLock键使其灯灭,再反复按回车键2次,则无条件   **;
;** 恢复成正常键盘布局。这样做保证了,在生死狙击冒险模式时,可以迅速恢复成正常键  **;
;** 盘,因为冒险模式打僵尸时,很少需要右换枪换枪,并且f和g键是加血或者加子弹的功  **;
;** 能,不需要再次将f键和g键重新映射,正常键盘就可以了。                                           **;
;**                                                                                                                                     **;
;***********************************************************************************;
;********************************     完       *************************************;
;***********************************************************************************;

;//////////////////////////////////////代码开始///////////////////////////////////;
;第一,#InstallKeybdHook,用来调试,查看按键消息需要;
;第二,一般需要用键盘钩子有四种情况(帮助文档中有);
;第三,本脚本功能不需要键盘钩子,所以这里注释掉了,可节约系统资源。

;;;;#InstallKeybdHook ;

;/////////////////////////////////////////////////////////////////////////;
;第一,Hotkey, IfWinActive语句可以限定脚本生效窗口;
;第二,本语句限定该脚本生效的游戏窗口为flash窗口;
;第三,可以用autohotkey自带spy查看游戏窗口的ahk_class名称;
;第四,Hotkey, IfWinActive语句使用一次就可以了,详见帮助文档。

Hotkey, IfWinActive, ahk_class ShockwaveFlashFullScreen  ;

;/////////////////////////////////////////////////////////////////////////;
;第一,刚开始是正常键盘布局,无热键生效。

HotKey,f,switchKeyBoard,off ;
HotKey,g,switchKeyBoard,off ;
HotKey,h,switchKeyBoard2,off ;

;/////////////////////////////////////////////////////////////////////////;

;第一,本脚本,脚本明文只有一个线程和一个进程,若有其他线程则是由系统自己管理的;
;第二,本脚本,线程不会主动退出,也没有提供退出的热键;
;第三,想要退出,请直接在任务栏关闭本脚本;
;第四,一旦脚本出现问题,先熄灭ScrollLock,然后反复按回
;      车键2次,便可以恢复到正常键盘布局。

while true   ;死循环

;/////////////////////////////////////////////////////////////////////////;

{

   
;/////////////////////////////////////////////////////////////////////////;
   while not GetKeyState("ScrollLock" ,"T") ;ScrollLock灯灭,则恢复成正常键盘布局
   {
       BlockInput, On   ;避免再次按下ScrollLock键,保证脚本运行稳定
       HotKey,f,,Off ;
       HotKey,g,,Off ;
       HotKey,h,,Off ;
       BlockInput, Off   ;恢复键盘和鼠标响应
       KeyWait,ScrollLock,D  ;无限时间等待ScrollLock键按下
       KeyWait,ScrollLock    ;无限时间等待ScrollLock键放开
   }
;/////////////////////////////////////////////////////////////////////////;
   ;第一,logicFlag这个布尔类型变量是用来使能切换热键状态的;
   ;第二,OnlyOneTimeFlag这个布尔类型变量用来在循环块中设置只执行一次的语句块;
   ;第三,光标坐标设置为相对于整个屏幕。

   CoordMode,Caret,Screen ;
   logicFlag:=true ;
   OnlyOneTimeFlag:=true ;

;/////////////////////////////////////////////////////////////////////////;
   ;第一,ScrollLock灯亮并且游戏进入全屏模式后,进入回车键切换布局状态;
   ;第二,ScrollLock灯灭或者游戏退出全屏模式后,退出回车键切换布局状态。

   while  GetKeyState("ScrollLock" ,"T") and WinActive("ahk_class ShockwaveFlashFullScreen") ;

;/////////////////////////////////////////////////////////////////////////;

   {

;/////////////////////////////////////////////////////////////////////////;
      ;为了不影响回车键切换键盘布局,所以只执行一次,并设置键盘布局为竞技键盘布局。

      if OnlyOneTimeFlag ;
      {
         HotKey,f,,On ;
         HotKey,g,,On ;
         HotKey,h,,On ;
         OnlyOneTimeFlag:=false ;
      }
;/////////////////////////////////////////////////////////////////////////;
      ;第一,此处if-else语句用来在竞技键盘布局和正常键盘布局两个键盘布局间交替切换;
      ;第二,理想的语句应该是HotKey Toggle语句,但不会用,只能这样;
      ;第三,一旦出现意外情况,比如游戏退出全屏或者游戏正常结束退出全屏,只
      ;      需要反复按回车,就能回到正常状态;
      ;第四,等待回车键敲击,用GetKeyState语句效果不好,只能用KeyWait语句;
      ;第五,这里必须是按下和松开这两条语句。如果只写一条,回车键切换布局功能将不稳定;
      ;第六,这里用KeyWait语句有诸多考虑,比如:关于输入法及其窗口生命期过程等等。
      if logicFlag ;如果logicFlag变量为真,则进入正常键盘布局
      {
          KeyWait,Enter,D  ;无限时间等待Enter键按下
          HotKey,f,,off ;
          HotKey,g,,off ;
          HotKey,h,,off ;
          logicFlag:=false ;下次循环执行else语句块
          KeyWait,Enter    ;无限时间等待Enter键放开

       }
      else ;如果logicFlag变量为假,则执行
      {
          KeyWait,Enter,D  ;无限时间等待Enter键按下
          KeyWait,Enter    ;无限时间等待Enter键放开
          BlockInput, On   ;避免再次按下Enter键,保证脚本运行稳定
          sleep,16  ;等待输入窗口被销毁
          if A_CaretY =  ;判断输入窗口是否已经完全销毁
          {
              HotKey,f,,on ;
              HotKey,g,,on ;
              HotKey,h,,on ;
              logicFlag:=true ;下次循环执行if语句块
          }
          BlockInput, Off ;
      }

;/////////////////////////////////////////////////////////////////////////;
   }
;/////////////////////////////////////////////////////////////////////////;
   ;退出循环,也就是ScrollLock键灯灭后,立即恢复成正常键盘布局。

   HotKey,f,,off ;
   HotKey,g,,off ;
   HotKey,h,,off ;

;/////////////////////////////////////////////////////////////////////////;
   sleep,663 ;为了减少对cpu时间的占用,这里规定脚本代码睡眠663毫秒
;/////////////////////////////////////////////////////////////////////////;
}
;/////////////////////////////////////////////////////////////////////////;
;第一,这里的代码是从按键历史消息中复制过来的,当时是使用静态映射f::q。
;第二,标签label名称可以随便取名,这里用了如下两个名字。

switchKeyBoard: ;
Send,{Blind}{q DownR} ;
SetKeyDelay,-1 ;
Send,{Blind}{q Up} ;
return ;

switchKeyBoard2: ;
Send,{Blind}{g DownR} ;
SetKeyDelay,-1 ;
Send,{Blind}{g Up} ;
return ;

;//////////////////////////////////////代码完///////////////////////////////////;

猜你喜欢

转载自blog.csdn.net/tom_xuzg/article/details/80841664