winio

  1. #pragma once   
  2. #include "WinIo.h"   
  3. #pragma comment(lib,"winio.lib")   
  4. ///等待键盘缓冲区为空   
  5. void KBCWait4IBE()   
  6. {   
  7.     DWORD dwVal = 0;   
  8.     do  
  9.     {   
  10.         bool flag = GetPortVal(0x64, &dwVal, 1);   
  11.     }   
  12.     while ((dwVal & 0x2) > 0);   
  13. }   
  14. void sendwinio()   
  15. {   
  16.     if (InitializeWinIo())   
  17.     {   
  18.         KBCWait4IBE();   
  19.     }else{   
  20.         ::AfxMessageBox("失败");   
  21.     }   
  22. }   
  23. DWORD KBC_KEY_CMD = 0x64;   
  24. DWORD KBC_KEY_DATA = 0x60;   
  25. /// 模拟键盘标按下   
  26. void MykeyDown(int vKeyCoad)   
  27. {   
  28.     int btScancode = 0;   
  29.     btScancode = MapVirtualKey((byte)vKeyCoad, 0);   
  30.     KBCWait4IBE(); // 等待键盘缓冲区为空   
  31.     SetPortVal(KBC_KEY_CMD, 0xD2, 1);// 发送命令   
  32.     KBCWait4IBE();   
  33.     SetPortVal(KBC_KEY_DATA, 0xe2, 1);// 写入按键信息   
  34.     KBCWait4IBE(); // '等待键盘缓冲区为空   
  35.     SetPortVal(KBC_KEY_CMD, 0xD2, 1);// '发送键盘写入命令   
  36.     KBCWait4IBE();   
  37.     SetPortVal(KBC_KEY_DATA, btScancode, 1);// '写入按下键   
  38. }   
  39. /// 模拟键盘弹出   
  40. void MykeyUp(int vKeyCoad)   
  41. {   
  42.     int btScancode = 0;   
  43.     btScancode = MapVirtualKey((byte)vKeyCoad, 0);   
  44.     KBCWait4IBE(); // '等待键盘缓冲区为空   
  45.     SetPortVal(KBC_KEY_CMD, 0xD2, 1); //'发送键盘写入命令   
  46.     KBCWait4IBE();   
  47.     SetPortVal(KBC_KEY_DATA, 0xe0, 1);// '写入按键信息   
  48.     KBCWait4IBE(); // '等待键盘缓冲区为空   
  49.     SetPortVal(KBC_KEY_CMD, 0xD2, 1); //'发送写入命令   
  50.     KBCWait4IBE();   
  51.     SetPortVal(KBC_KEY_DATA, btScancode, 1);// '写入释放键   
  52. }   
  53. /// 模拟鼠标按下   
  54. void MyMouseDown(int vKeyCoad)   
  55. {   
  56.     int btScancode = 0;   
  57.     btScancode = MapVirtualKey((byte)vKeyCoad, 0);   
  58.     KBCWait4IBE(); // '等待键盘缓冲区为空   
  59.     SetPortVal(KBC_KEY_CMD,0xD3, 1);// '发送写入命令   
  60.     KBCWait4IBE();   
  61.     SetPortVal(KBC_KEY_DATA, (btScancode|0x80), 1);// '写入信息按下键   
  62. }   
  63. /// 模拟鼠标弹出   
  64. void MyMouseUp(int vKeyCoad)   
  65. {   
  66.     int btScancode = 0;   
  67.     btScancode = MapVirtualKey((byte)vKeyCoad, 0);   
  68.     KBCWait4IBE(); // '等待键盘缓冲区为空   
  69.     SetPortVal(KBC_KEY_CMD, 0xD3, 1); //'发送写入命令   
  70.     KBCWait4IBE();   
  71.     SetPortVal(KBC_KEY_DATA, (btScancode | 0x80), 1);// '写入信息释放键   
  72. }   
  1. #define VK_A            0x41   
  2. #define KBC_KEY_CMD        0x64 //键盘命令端口   
  3. #define KBC_KEY_DATA    0x60   
  4. //键盘数据端口   
  5. void KBCWait4IBE()   
  6. {   
  7.     DWORD dwRegVal = 0;   
  8.     do{   
  9.         GetPortVal(0x64, &dwRegVal, 1);   
  10.     }while(dwRegVal & 0x00000001);   
  11. }   
  12. void MyKeyDownEx(long vKeyCoad)    //模拟扩展键按下,参数vKeyCoad是扩展键的虚拟码   
  13. {   
  14.     long btScancode=MapVirtualKey(vKeyCoad,0);   
  15.     KBCWait4IBE();                            //等待键盘缓冲区为空   
  16.     SetPortVal(KBC_KEY_CMD,0xD2,1);            //发送键盘写入命令   
  17.     KBCWait4IBE();   
  18.     SetPortVal(KBC_KEY_DATA,0xE0,1);        //写入扩展键标志信息   
  19.     KBCWait4IBE();                            //等待键盘缓冲区为空   
  20.     SetPortVal(KBC_KEY_CMD,0xD2,1);            //发送键盘写入命令   
  21.     KBCWait4IBE();   
  22.     SetPortVal(KBC_KEY_DATA,btScancode,1);    //写入按键信息,按下键   
  23. }   
  24. void MyKeyUpEx(long vKeyCoad)//模拟扩展键弹起   
  25. {   
  26.     long btScancode = MapVirtualKey(vKeyCoad,0);   
  27.     KBCWait4IBE();                                    //等待键盘缓冲区为空   
  28.     SetPortVal(KBC_KEY_CMD,0xD2,1);                    //发送键盘写入命令   
  29.     KBCWait4IBE();   
  30.     SetPortVal(KBC_KEY_DATA,0xE0,1);                //写入扩展键标志信息   
  31.     KBCWait4IBE();                                    //等待键盘缓冲区为空   
  32.     SetPortVal(KBC_KEY_CMD,0xD2,1);                    //发送键盘写入命令   
  33.     KBCWait4IBE();   
  34.     SetPortVal(KBC_KEY_DATA,(btScancode|0x80),1);    //写入按键信息,释放键   
  35. }   
  36. void MyKeyDown(long vKeyCoad)   
  37. {   
  38.     long byScancode = MapVirtualKey(vKeyCoad,0);   
  39.     KBCWait4IBE();                                    //等待键盘缓冲区为空   
  40.     if(SetPortVal(KBC_KEY_CMD,0xD2,1)==false)   
  41.        ::AfxMessageBox("发送键盘写入命令失败!");            //发送键盘写入命令   
  42.     KBCWait4IBE();                                    //等待键盘缓冲区为空   
  43.     if(SetPortVal(KBC_KEY_DATA,(ULONG)byScancode,1)==false)   
  44.        ::AfxMessageBox("按下键失败!");                    //写入按键信息,按下键   
  45. }   
  46. void MyKeyUp(long vKeyCoad)   
  47. {   
  48.     long byScancode = MapVirtualKey(vKeyCoad,0);   
  49.     KBCWait4IBE();//等待键盘缓冲区为空   
  50.     if(SetPortVal(KBC_KEY_CMD,0xD2,1)==false)   
  51.        ::AfxMessageBox("发送键盘写入命令失败!");//发送键盘写入命令   
  52.     KBCWait4IBE();//等待键盘缓冲区为空   
  53.     if(SetPortVal(KBC_KEY_DATA,(ULONG)(byScancode|0x80),1)==false)   
  54.        ::AfxMessageBox("释放键失败!");//写入按键信息,释放键   
  55. }  
  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓