如何在全屏游戏中禁用Alt+Tab等切换任务

这段时间项目有个需求,要在游戏全屏的时候禁用Alt+Tab等一类可以切换任务的快捷方式,也就是禁止玩家随意跳出游戏。

Google了一下资料,发现需要用到Hook,例子简单如下:http://topic.csdn.net/t/20040826/12/3311477.html

 

LRESULT   CALLBACK   LowLevelKeyboardProc(int   nCode,  WPARAM   wParam,   LPARAM   lParam)   
{ 
   BOOL   fEatKeystroke   =   FALSE; 

   if (nCode   ==   HC_ACTION)   { 
     switch (wParam)   { 
       case   WM_KEYDOWN:   
       case   WM_SYSKEYDOWN: 
       case   WM_KEYUP:         
       case   WM_SYSKEYUP:   

      PKBDLLHOOKSTRUCT   p   =   (PKBDLLHOOKSTRUCT)   lParam; 
      fEatKeystroke   =   
        ((p-> vkCode   ==   VK_TAB)      &&     ((p-> flags   &   LLKHF_ALTDOWN)    !=   0))   || 
        ((p-> vkCode   ==   VK_ESCAPE)   &&     ((p-> flags   &   LLKHF_ALTDOWN)    !=   0))   || 
        ((p-> vkCode   ==   VK_ESCAPE)   &&     ((GetKeyState(VK_CONTROL) & 0x8000) !=   0))   || 
        ( p-> vkCode   ==   VK_LWIN)     ||     (p-> vkCode==VK_RWIN   ) 
        ; 
      break; 
    } 
  } 

  return (fEatKeystroke   ?   1   :   CallNextHookEx(NULL,   nCode,   wParam,   lParam)); 
} 


int   WINAPI   WinMain(HINSTANCE   hinstExe,   HINSTANCE,   PTSTR   pszCmdLine,   int)   
{ 
              
      //   Install   the   low-level   keyboard   &   mouse   hooks 
       HHOOK  hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc,   hinstExe,   0); 
  
       //   Keep   this   app   running   until   we 're   told   to   stop 
       MessageBox(NULL,   TEXT( "Alt+Esc,   Ctrl+Esc,   Alt+Tab,   LWIN   and   RWIN   are   now   disabled.\n ")     
                          TEXT( "Click   \ "Ok\ "   to   terminate   this   application   and   re-enable   these   keys. "), 
                          TEXT( "Disable   Low-Level   Keys "), 
                          MB_OK); 
    
      UnhookWindowsHookEx(hhkLowLevelKybd); 

      return 0; 
} 


 

实际应用的时候,可以考虑把Hook主函数放到另外一个线程里运行(比如UE3的做法)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值