VC 调用winio 模拟按键.

// 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初始化成功");
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值