博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#中使用WinIO模拟键盘鼠标(转)
阅读量:6419 次
发布时间:2019-06-23

本文共 2420 字,大约阅读时间需要 8 分钟。

原文地址在哪忘了,对不起额。

  
public 
class WinIOLab
    {
        
private 
const 
int KBC_KEY_CMD = 
0x64;
        
private 
const 
int KBC_KEY_DATA = 
0x60;
        [DllImport(
"
winio32.dll
")]
        
private 
static 
extern 
bool InitializeWinIo();
        [DllImport(
"
winio32.dll
")]
        
private 
static 
extern 
bool GetPortVal(IntPtr wPortAddr, 
out 
int pdwPortVal, 
byte bSize);
        [DllImport(
"
winio32.dll
")]
        
private 
static 
extern 
bool SetPortVal(
uint wPortAddr, IntPtr dwPortVal, 
byte bSize);
        [DllImport(
"
winio32.dll
")]
        
private 
static 
extern 
byte MapPhysToLin(
byte pbPhysAddr, 
uint dwPhysSize, IntPtr PhysicalMemoryHandle);
        [DllImport(
"
winio32.dll
")]
        
private 
static 
extern 
bool UnmapPhysicalMemory(IntPtr PhysicalMemoryHandle, 
byte pbLinAddr);
        [DllImport(
"
winio32.dll
")]
        
private 
static 
extern 
bool GetPhysLong(IntPtr pbPhysAddr, 
byte pdwPhysVal);
        [DllImport(
"
winio32.dll
")]
        
private 
static 
extern 
bool SetPhysLong(IntPtr pbPhysAddr, 
byte dwPhysVal);
        [DllImport(
"
winio32.dll
")]
        
private 
static 
extern 
void ShutdownWinIo();
        [DllImport(
"
user32.dll
")]
        
private 
static 
extern 
int MapVirtualKey(
uint Ucode, 
uint uMapType);
        
private WinIOLab()
        {
            IsInitialize = 
true;
        }
        
public 
static 
void Initialize()
        {
            
if (InitializeWinIo())
            {
                KBCWait4IBE();
                IsInitialize = 
true;
            }
        }
        
public 
static 
void Shutdown()
        {
            
if (IsInitialize)
                ShutdownWinIo();
            IsInitialize = 
false;
        }
        
private 
static 
bool IsInitialize { 
get
set; }
        
///
等待键盘缓冲区为空
        
private 
static 
void KBCWait4IBE()
        {
            
int dwVal = 
0;
            
do
            {
                
bool flag = GetPortVal((IntPtr)
0x64
out dwVal, 
1);
            }
            
while ((dwVal & 
0x2) > 
0);
        }
        
///
 模拟键盘标按下
        
public 
static 
void KeyDown(Keys vKeyCoad)
        {
            
if (!IsInitialize) 
return;
            
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 
static 
void KeyUp(Keys vKeyCoad)
        {
            
if (!IsInitialize) 
return;
            
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);
        }
    }

 

调用

 WinIOLab.Initialize(); 
//
 注册
 WinIOLab.KeyDown(Keys.A); 
//
 按下A
 WinIOLab.KeyUp(Keys.A); 
//
 松开A
 WinIOLab.Shutdown(); 
//
 用完后注销

 

 

转载地址:http://sclra.baihongyu.com/

你可能感兴趣的文章
《动手搭建智能家居系统》——1.2 安全管理和居家护理自动化
查看>>
《Python高性能编程》——2.2 Julia集合的介绍
查看>>
大型网站的 HTTPS 实践(二):HTTPS 对性能的影响
查看>>
《Swift 权威指南》——第6章,第6.10节嵌套函数
查看>>
git add . 的时候遇到warning: LF will be replaced by CRLF in ...... 解决办法
查看>>
《自己动手做交互系统》——1.3 本章小结
查看>>
Mobile devices bundled with malware?
查看>>
《Node应用程序构建——使用MongoDB和Backbone》一导读
查看>>
《JavaScript面向对象精要》——1.5 访问属性
查看>>
《Python数据可视化编程实战》—— 第 1 章 准备工作环境
查看>>
Android应用性能优化最佳实践.1.1 Android Studio的优势
查看>>
《设计模式解析(第2版•修订版)》—第2章 2.2节什么是UML
查看>>
【健康医疗】4步完成数据分析报表,让医疗数据转化为生产力
查看>>
【直播】APP全量混淆和瘦身技术揭秘
查看>>
10个大坑,当你产品上架AppStore会遇到
查看>>
Yii2批量插入数据
查看>>
袋鼠云助力光伏产业 | 基于阿里云数加平台做算法预测
查看>>
阿里云机器学习8月特别推荐
查看>>
[转]CentOS-6.3安装配置SVN
查看>>
Linux_Rsync远程同步备份服务器
查看>>