WinIO驱动级模拟键盘 C#
来源:互联网 发布:ebsco 数据库 编辑:程序博客网 时间:2024/05/12 02:58
http://blog.csdn.net/bbwfang/article/details/8173749#comments
最近做一个项目用到键盘输入,试了很多种普通的模拟键盘输入,都是实现不了,特别是到输入密码这块,根本输入不了,最后用到了这个WinIo驱动级的输入才搞定的,以下是具体代码:
#region 驱动级键盘输入定义
//键盘输入
// public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
//[DllImport("User32.dll")]
//public static extern void keybd_event(Byte bVk, Byte bScan, Int32 dwFlags, Int32 dwExtraInfo);
//private const int KEYEVENTF_KEYUP = 2;
//winio开始
public const int KBC_KEY_CMD = 0x64;
public const int KBC_KEY_DATA = 0x60;
[DllImport("WinIo32.dll")]
public static extern bool InitializeWinIo();
[DllImport("WinIo32.dll")]
public static extern bool GetPortVal(IntPtr wPortAddr, out int pdwPortVal,
byte bSize);
[DllImport("WinIo32.dll")]
public static extern bool SetPortVal(uint wPortAddr, IntPtr dwPortVal,
byte bSize);
[DllImport("WinIo32.dll")]
public static extern byte MapPhysToLin(byte pbPhysAddr, uint dwPhysSize,
IntPtr PhysicalMemoryHandle);
[DllImport("WinIo32.dll")]
public static extern bool UnmapPhysicalMemory(IntPtr PhysicalMemoryHandle,
byte pbLinAddr);
[DllImport("WinIo32.dll")]
public static extern bool GetPhysLong(IntPtr pbPhysAddr, byte pdwPhysVal);
[DllImport("WinIo32.dll")]
public static extern bool SetPhysLong(IntPtr pbPhysAddr, byte dwPhysVal);
[DllImport("WinIo32.dll")]
public static extern void ShutdownWinIo();
[DllImport("user32.dll")]
public static extern int MapVirtualKey(uint Ucode, uint uMapType);
public void Initialize()
{
if (InitializeWinIo())
{
KBCWait4IBE();
}
}
public void Shutdown()
{
ShutdownWinIo();
KBCWait4IBE();
}
///等待键盘缓冲区为空
public void KBCWait4IBE()
{
int dwVal = 0;
do
{
bool flag = GetPortVal((IntPtr)0x64, out dwVal, 1);
}
while ((dwVal & 0x2) > 0);
}
/// 模拟键盘标按下
public void KeyDown(Keys vKeyCoad)
{
int btScancode = 0;
btScancode = MapVirtualKey((uint)vKeyCoad, 0);
KBCWait4IBE();
SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)0x60, 1);
KBCWait4IBE();
SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)btScancode, 1);
}
/// 模拟键盘弹出
public void KeyUp(Keys vKeyCoad)
{
int btScancode = 0;
btScancode = MapVirtualKey((uint)vKeyCoad, 0);
KBCWait4IBE();
SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)0x60, 1);
KBCWait4IBE();
SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)(btScancode | 0x80), 1);
}
/// 模拟一次按键
public void KeyDownUp(Keys vKeyCoad)
{
Initialize();
KeyUp(vKeyCoad);
Thread.Sleep(100);
KeyDown(vKeyCoad);
Shutdown();
}
/// 模拟鼠标按下
public void MyMouseDown(int vKeyCoad)
{
int btScancode = 0;
btScancode = MapVirtualKey((byte)vKeyCoad, 0);
KBCWait4IBE(); // '等待键盘缓冲区为空
SetPortVal(KBC_KEY_CMD, (IntPtr)0xD3, 1);// '发送写入命令
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)(btScancode | 0x80), 1);// '写入信息按下键
}
/// 模拟鼠标弹出
public void MyMouseUp(int vKeyCoad)
{
int btScancode = 0;
btScancode = MapVirtualKey((byte)vKeyCoad, 0);
KBCWait4IBE(); // '等待键盘缓冲区为空
SetPortVal(KBC_KEY_CMD, (IntPtr)0xD3, 1); //'发送写入命令
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)(btScancode | 0x80), 1);// '写入信息释放键
}
const int MOUSEEVENTF_MOVE = 0x0001;
const int MOUSEEVENTF_LEFTDOWN = 0x0002;
const int MOUSEEVENTF_LEFTUP = 0x0004;
const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
const int MOUSEEVENTF_RIGHTUP = 0x0010;
const int MOUSEEVENTF_MIDDLEDOWN = 0x0020;
const int MOUSEEVENTF_MIDDLEUP = 0x0040;
const int MOUSEEVENTF_ABSOLUTE = 0x8000;
/*鼠标点击的函数*/
[DllImport("user32.dll")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
/*设置鼠标的坐标*/
[DllImport("user32.dll")]
public static extern void SetCursorPos(int dx, int dy);
/*获取鼠标的坐标*/
[DllImport("user32.dll")]
public static extern void GetCursorPos(ref Point lpPoint);
//winio结束
#endregion
- WinIO驱动级模拟键盘 C#
- WinIO驱动级模拟键盘 C#
- WinIo驱动级键盘模拟编程
- WinIo驱动级键盘模拟编程
- WinIo驱动级键盘模拟编程
- C# WinIO键盘鼠标模拟
- VB 加载winIO,实现驱动级键盘模拟
- C# 封装winio.dll 驱动级按键鼠标操作模拟
- 利用WinIo模拟硬件键盘
- winio模拟键盘鼠标的输入
- WinIo 模拟键盘鼠标··
- VC C++ WinIo按键 键盘模拟
- 64位Win8系统下WinIO的使用 VS2010 驱动级模拟按键
- winio 模拟按键(无PS2键盘,未测试)
- Delphi下利用WinIo模拟鼠标键盘详解
- Delphi下利用WinIo模拟鼠标键盘详解
- WinIO模拟键盘代码《根据其他文章修改》
- 基于visual c++之windows核心编程代码分析(34)WinIo驱动级模拟按键的实现
- 野田圣子、希尔顿、松下幸之助,都喝过马桶水吗? .
- Service相关
- LDAP研究 .
- 【BZOJ】【POI2007】【对称轴osi】【题解】【计算几何】
- 信息系统开发与管理总结 .
- WinIO驱动级模拟键盘 C#
- ContentProvider介绍(一)
- Java可变参数函数
- C++之练习题42
- 海明码编码示例
- PyCon 2014:机器学习应用占据Python的半壁江山
- Java基础-->面向对象与类之概述
- 大话NoSql
- 高效代码管理--本地svn环境搭建 .