// HitKey.cpp: implementation of the CHitKey class.
//
//
#include "stdafx.h"
#include "HitKey.h"
#include "winio.h"
#pragma comment(lib,"winio.lib")
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#define KBC_CMD 0x64
#define KBC_DATA 0x60
//
// Construction/Destruction
//
CHitKey::CHitKey()
{
m_bInit = FALSE;
}
CHitKey::~CHitKey()
{
RemoveWinIoDriver();
ShutdownWinIo();
m_bInit = FALSE;
}
void CHitKey::KBCWait4IBE()
{
DWORD dwRegVal=0;
do
{
GetPortVal(0x64,&dwRegVal,1);
}
while(dwRegVal & 0x2);
}
void CHitKey::KEY_DOWN(int vk_in)
{
Sleep(10);
KBCWait4IBE();
SetPortVal( 0X64, 0xD2, 1 );
Sleep(10);
KBCWait4IBE();
SetPortVal(0X60, 0xE2, 1 );
Sleep(10);
KBCWait4IBE();
SetPortVal( 0X64, 0xD2, 1 );
Sleep(10);
KBCWait4IBE();
SetPortVal( 0X60, MapVirtualKey(vk_in, 0), 1 );
}
void CHitKey::KEY_UP(int vk_in)
{
Sleep(10);
KBCWait4IBE();
SetPortVal( 0X64, 0xD2, 1 );
Sleep(10);
KBCWait4IBE();
SetPortVal(0X60, 0xE0, 1 );
Sleep(10);
KBCWait4IBE();
SetPortVal( 0X64, 0xD2, 1 );
Sleep(10);
KBCWait4IBE();
SetPortVal(0X60, (MapVirtualKey(vk_in, 0) | 0x80), 1);
}
void CHitKey::HitKey(int vk, int tick)
{
KEY_DOWN(vk);
Sleep(tick);
KEY_UP(vk);
}
void CHitKey::Init()
{
if(m_bInit) return;
BOOL bInit = InstallWinIoDriver( "WinIo.sys");
if(bInit==false)
{
OutDbgStr("WinIo初始化失败.");
RemoveWinIoDriver();
ShutdownWinIo();
return;
}
InitializeWinIo();
m_bInit = TRUE;
OutDbgStr("WinIo初始化成功");
}