按键精灵初步,使用winIO实现驱动级模拟按键

winIO是目前非常古老的技术,是用底层驱动来实现程序控制键盘按键,要使用winIO,需要用到两个文件WinIo64.dll,与WinIo64.sys。 也有32为的 WinIO32.dll, WinIO32.sys。基于现在的操作系统,都是用的32位的,且都是win7 以上的了,所以,本文用的是winIO64.dll,WinIO64.sys

第一步: 

命令行运行: cmd-> bcdedit /set testsigning on   把系统用作测试模式

然后第二步: 修改WinIo64.sys的测试签名,我提供的WinIO64.sys,是已经签名了的。 并把 WinIO64.dll,与 winIO64.sys 复制到 C:\Windows\SysWOW64 下。

WinIO所需文件下载地址: http://www.qq249191508.com/article-detials/18

解压密码: www.qq249191508.com

那么现在就可以直接调用WinIO64里面的函数了。

现在提供给大家一个可用的winIO 的C++ 类:

MyWinIO.h

#pragma once


typedef bool (WINAPI *pInitializeWinIo)();
typedef bool (WINAPI *pShutdownWinIo)();

typedef bool (WINAPI *pGetPortVal)(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);

typedef bool (WINAPI *pSetPortVal)(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);

#define  KBC_KEY_CMD  0x64
#define KBC_KEY_DATA  0x60

// #define VK_NUMLOCK = 0x90; //数字锁定键
// #define VK_SCROLL = 0x91; //滚动锁定
// #define VK_CAPITAL = 0x14; //大小写锁定
// #define VK_A = 65;
// #define VK_TAB = 9;
// #define VK_Delete = 46;
// #define VK_ENTER = 13;
// #define VK_END = 0x23;
// #define VK_BACK = 0x08;
// #define VK_SHIFT = 0x10;
// #define VK_RETURN = 0x0D;
// #define VK_ESCAPE = 0x1B;

enum MouseEventFlags
{
	Move = 0x0001,
	LeftDown = 0x0002,
	LeftUp = 0x0004,
	RightDown = 0x0008,
	RightUp = 0x0010,
	MiddleDown = 0x0020,
	MiddleUp = 0x0040,
	Wheel = 0x0800,
	Absolute = 0x8000
};


class CMyWinIO
{
public:
	CMyWinIO();
	~CMyWinIO();

	void MyKeyDown(byte dwKey); 

	void KBCWait4IBE();

	bool InitWinIO();
	void ShutDownIO();

	void SetPortVal(WORD wPortAddr, DWORD dwPortVal);
	void GetPortVal(WORD wPortAddr, PDWORD dwPortVal);

	void MoveMouseToPoint(int xPos, int yPos);


	HMODULE m_hWinIo;

private:
	pInitializeWinIo    io_Init;
	pShutdownWinIo		io_Shutdown;
	pGetPortVal			io_GetPortVal;
	pSetPortVal			io_SetPortVal;
};

MyWinIO.cpp

#include "stdafx.h"
#include "MyWinIO.h"


CMyWinIO::CMyWinIO()
{
	m_hWinIo = NULL;
}


CMyWinIO::~CMyWinIO()
{
}

// 注意,这里传入的是字符串的ascii 码
void CMyWinIO::MyKeyDown(byte vKeyCoad)
{
	int btScancode = 0;
	btScancode = MapVirtualKey((byte)vKeyCoad, 0);
	KBCWait4IBE();
	io_SetPortVal(KBC_KEY_CMD, 0xD2, 1);// 发送命令
	KBCWait4IBE();
	io_SetPortVal(KBC_KEY_DATA, (DWORD)btScancode,1);// 写入按下键

	KBCWait4IBE();
	io_SetPortVal(KBC_KEY_CMD, 0xD2,1);// 发送命令
	KBCWait4IBE();
	io_SetPortVal(KBC_KEY_DATA, (DWORD)(btScancode | 0x80),1);// 弹出键
}

///等待键盘缓冲区为空
 void CMyWinIO::KBCWait4IBE()
{
	DWORD dwVal = 0;
	do
	{
		bool flag = io_GetPortVal(0x64, &dwVal, 1);
	} while ((dwVal & 0x2) > 0);
}

bool CMyWinIO::InitWinIO()
{
	m_hWinIo = LoadLibrary("WinIo32.dll");
	if (m_hWinIo == NULL)
	{
		return false;
	}

	io_Init = (pInitializeWinIo)GetProcAddress(m_hWinIo, "InitializeWinIo");

	if (io_Init != NULL)
	{
		bool Result = io_Init();

		if (!Result)
		{
			FreeLibrary(m_hWinIo);
		}
	}

	io_Shutdown = (pShutdownWinIo)GetProcAddress(m_hWinIo, "ShutdownWinIo");
	io_GetPortVal = (pGetPortVal)GetProcAddress(m_hWinIo, "GetPortVal");
	io_SetPortVal = (pSetPortVal)GetProcAddress(m_hWinIo, "SetPortVal");

	return false;
}

void CMyWinIO::ShutDownIO()
{
	io_Shutdown();
}

void CMyWinIO::SetPortVal(WORD wPortAddr, DWORD dwPortVal)
{
	io_SetPortVal(wPortAddr, dwPortVal, 1);
}

void CMyWinIO::GetPortVal(WORD wPortAddr, PDWORD dwPortVal)
{
	io_GetPortVal(wPortAddr, dwPortVal, 1);
}

// 鼠标移动
void CMyWinIO::MoveMouseToPoint(int xPos, int yPos)
{	
	// 移动鼠标
	SetCursorPos(xPos, yPos);

	// 鼠标左键点击
	mouse_event(LeftDown | Absolute, 0, 0, 0, NULL);

	// 鼠标左键抬起
	mouse_event(LeftUp | Absolute, 0, 0, 0, NULL);
}

现在就可以使用WinIO了.

  • 1
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: python rabird.winio模块是一款用于实现驱动模拟按键的模块。这个模块可以通过Python程序,模拟人工按下或松开键盘上的按键来操作Windows系统,并且在操作系统中运行这些操作,就像用户手动按下键盘上的按键一样。 使用python rabird.winio模块模拟按键,需要先安装该模块,然后编写Python代码来实现按键模拟操作。首先需要调用winio.WinIO()函数,来初始化winio库。接下来,我们可以使用winio模块的InjectKey()函数来模拟按下或释放某个键,还可以使用winio模块的KeyPress()函数来模拟按下并释放某个键。 使用python rabird.winio模块实现驱动模拟按键具有很多优点,比如可以实现无需人工干预的全自动化操作,可以模拟长按按键或连按按键等特定操作,并且可以在各种应用程序中自由使用,同时也能很好地保护计算机的安全性。总之,python rabird.winio模块是非常实用的一款模块,可以方便地实现Windows系统中的按键模拟操作。 ### 回答2: Python rabird.winio模块是一个基于WinIO驱动的Python模块,可以实现驱动别的模拟按键。该模块可以用来模拟各种按键操作,包括单点按键、组合键、特殊按键等。 使用Python rabird.winio模块,需要先在电脑上安装WinIO驱动,然后通过Python代码操作该驱动。可以使用该模块来模拟按键事件,如按下、弹起、单次按下和单次弹起等事件,也可以模拟组合按键事件,如同时按下多个按键,或先按下一个按键,然后再按下另一个按键等。 除了模拟按键事件之外,Python rabird.winio模块也支持模拟鼠标事件,可以用来模拟鼠标单击、双击、拖拽等操作。 Python rabird.winio模块在实际应用中有很广泛的用途,比如自动化测试、游戏开发等领域。使用该模块可以方便地实现各种按键操作,提高工作效率,减少重复操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chen249191508

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值