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