程序源碼如下.
///////////////////////////////////////////////////////////////////// #include "windows.h " #include "WinIo.h " #include "winuser.h " #include "iostream.h " #define VK_A 0x41 #define KBC_KEY_CMD 0x64 //鍵盤命令端口 #define KBC_KEY_DATA 0x60 //鍵盤數據端口 void KBCWait4IBE() { DWORD dwRegVal=0; do { GetPortVal(0x64,&dwRegVal,1); } while(dwRegVal & 0x00000001); } void MyKeyDownEx(long vKeyCoad) //模擬擴展鍵按下,參數vKeyCoad是擴展鍵的虛擬碼 { long btScancode; btScancode = MapVirtualKey(vKeyCoad, 0); KBCWait4IBE(); //等待鍵盤緩沖區為空 SetPortVal(KBC_KEY_CMD, 0xD2, 1 ); //發送鍵盤寫入命令 KBCWait4IBE(); SetPortVal(KBC_KEY_DATA, 0xE0, 1 ); //寫入擴展鍵標志信息 KBCWait4IBE(); //等待鍵盤緩沖區為空 SetPortVal( KBC_KEY_CMD, 0xD2, 1 ); //發送鍵盤寫入命令 KBCWait4IBE(); SetPortVal( KBC_KEY_DATA, btScancode, 1 ); //寫入按鍵信息,按下鍵 } void MyKeyUpEx(long vKeyCoad) //模擬擴展鍵彈起 { long btScancode; btScancode = MapVirtualKey(vKeyCoad, 0); KBCWait4IBE(); //等待鍵盤緩沖區為空 SetPortVal(KBC_KEY_CMD, 0xD2, 1 ); //發送鍵盤寫入命令 KBCWait4IBE(); SetPortVal (KBC_KEY_DATA, 0xE0, 1 ); //寫入擴展鍵標志信息 KBCWait4IBE(); //等待鍵盤緩沖區為空 SetPortVal(KBC_KEY_CMD, 0xD2, 1 ); //發送鍵盤寫入命令 KBCWait4IBE(); SetPortVal(KBC_KEY_DATA, (btScancode | 0x80), 1); //寫入按鍵信息,釋放鍵 } void MyKeyDown(long vKeyCoad) { long byScancode = MapVirtualKey(vKeyCoad,0); KBCWait4IBE();//等待鍵盤緩沖區為空 if(SetPortVal(0x64,0xD2,1)==false)cout < < "發送鍵盤寫入命令失敗! " < <endl;//發送鍵盤寫入命令 KBCWait4IBE();//等待鍵盤緩沖區為空 if(SetPortVal(0x60,(ULONG)byScancode,1)==false)cout < < "按下鍵失敗! " < <endl;//寫入按鍵信息,按下鍵 } void MyKeyUp(long vKeyCoad) { long byScancode = MapVirtualKey(vKeyCoad,0); KBCWait4IBE();//等待鍵盤緩沖區為空 if(SetPortVal(0x64,0xD2,1)==false)cout < < "發送鍵盤寫入命令失敗! " < <endl;//發送鍵盤寫入命令 KBCWait4IBE();//等待鍵盤緩沖區為空 if(SetPortVal(0x60,(ULONG)(byScancode | 0x80),1)==false)cout < < "釋放鍵失敗! " < <endl;//寫入按鍵信息,釋放鍵 } void main() { if(InitializeWinIo()==false)cout < < "驅動程序加載失敗! " < <endl; Sleep(3000); MyKeyDownEx(VK_LEFT); //按下左方向鍵 Sleep(200); //延時200毫秒 MyKeyUpEx(VK_LEFT); //釋放左方向鍵 Sleep(500); MyKeyDown(VK_SPACE); //按下空格鍵,注意要發送兩次 MyKeyDown(VK_SPACE); Sleep(200); MyKeyUp(VK_SPACE ) ; //釋放空格鍵 ShutdownWinIo(); } |