向系统发送模拟按键消息

1)   显示桌面:  
   
                    很多软件有显示桌面的功能,   并且大家的方法都是遍历窗口,     然后让它们最小化,   其实   win系统给咱们了一个非常方便的WIN键(就是键盘上在CTRL键和ALT键之间的那个带win标志的按键),   利用它,   可以轻松的完成显示桌面的功能.  
   
          keybd_event(VK_LWIN,   0,   0   ,0);  
          keybd_event('M',   0,   0   ,0);  
          keybd_event('M',   0,   KEYEVENTF_KEYUP   ,0);  
          keybd_event(VK_LWIN,   0,   KEYEVENTF_KEYUP,0);  
   
  其他的操作也类似,   比如直接显示开始的运行,就把上面的'M'换成'R'即可。  
   
  直接         keybd_event(VK_LWIN,   0,   0   ,0);  
                          keybd_event(VK_LWIN,   0,   KEYEVENTF_KEYUP,0);  
   
  直接显示“开始”对话框了。  
   
  2)   实现快速的全选  
   
                  很多的时候,比如listctrl实现全选,你可以用listctrl循环设置每一项的状态为选中,多罗索的事情呀。用快捷键试一试CTRL+A,其他的快捷键一样的用法,呵呵,你知道怎么办了吧?  
   
          keybd_event(VK_CONTROL,   (BYTE)0,   0   ,0);  
          keybd_event('A',(BYTE)0,   0   ,0);   //此处可以用     'A',   (BYTE)65,   用'a'不起作用.  
          keybd_event('A',   (BYTE)0,   KEYEVENTF_KEYUP,0);  
          keybd_event(VK_CONTROL,   (BYTE)0,   KEYEVENTF_KEYUP,0);  
   
  3)   执行某些特殊的键,比如数字键,大小写,下面是数字键的例子  
   
          bool   bState=true;       //true为按下NumLock,false反之  
          BYTE   keyState[256];  
           
          GetKeyboardState((LPBYTE)&keyState);  
          if(   (bState   &&   !(keyState[VK_NUMLOCK]   &   1))   ||  
                  (!bState   &&   (keyState[VK_NUMLOCK]   &   1))   )  
          {  
                  //   Simulate   a   key   press  
                  keybd_event(   VK_NUMLOCK,  
                          0x45,  
                          KEYEVENTF_EXTENDEDKEY   |   0,  
                          0   );  
                   
                  //   Simulate   a   key   release  
                  keybd_event(   VK_NUMLOCK,  
                          0x45,  
                          KEYEVENTF_EXTENDEDKEY   |   KEYEVENTF_KEYUP,  
                          0);  
          }  
   
  4)   你想CTRL+ALT+DELETE三键一起按下,  
   
          keybd_event(VK_CONTROL,   0,   0   ,0);  
          keybd_event(VK_MENU,0,   0   ,0);  
          keybd_event(VK_DELETE,0,   0   ,0);  
   
          keybd_event(VK_CONTROL,   0,   KEYEVENTF_KEYUP   ,0);  
          keybd_event(VK_MENU,0,   KEYEVENTF_KEYUP   ,0);  
          keybd_event(VK_DELETE,0,   KEYEVENTF_KEYUP   ,0);  
  呵呵,这样不会成功呀,因为这几个键直接是操作系统来截获执行的,而模拟键盘只能发向应用程序,所以这种方法不行的(想显示锁定对话框,用         LockWorkStation();)  
   
  5)   Window2000/NT/XP已经不提倡用这个函数了,上面的方法只是为了让大家开阔一下思路,怎么替代呢,呵呵,看下面,所以上面的所有代码都可以用这个来完成  
   
        //2000下用这个代替   ,包含   "winable.h"  
          INPUT   input[4];  
          memset(input,   0,   sizeof(input));  
   
          input[0].type   =   input[1].type   =   input[2].type   =   input[3].type   =   INPUT_KEYBOARD;  
   
          input[0].ki.wVk     =   input[3].ki.wVk   =   VK_LWIN;  
          input[1].ki.wVk     =   input[2].ki.wVk   =   'R';  
   
           
          //接下来释放它,这一点很重要。  
          input[2].ki.dwFlags   =   input[3].ki.dwFlags   =   KEYEVENTF_KEYUP;  
          input[0].ki.time   =   input[1].ki.time   =   input[2].ki.time   =   input[3].ki.time   =   GetTickCount();  
   
          SendInput(4,   input,   sizeof(INPUT));  
   
  感觉比那个有点罗索,呵呵。  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值