C# InitializeWinIo()初始化返回false (Win7系统)

Elaine9656 2013-03-16 09:28:29
急!!!
我把winio32.dll,winio32.sys都放到可执行文件所在文件夹下了~
但是初始化InitializeWinIo()就是返回false
下面是代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace TCPServer.Simulate
{
class Keyboard
{
// WinIO32
//****************************

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 sendwinio()
{
if (InitializeWinIo() == true)
{
Console.WriteLine("模拟控制模块加载成功!");
KBCWait4IBE();
}
else
{
Console.WriteLine("模拟控制模块加载是失败!");
}

}

public void closewinio()
{
ShutdownWinIo();
KBCWait4IBE();
}
///等待键盘缓冲区为空
private void KBCWait4IBE()
{
int dwVal = 0;
do
{
bool flag = GetPortVal((IntPtr)0x64, out dwVal, 1);
}
while ((dwVal & 0x00000002) > 0);

}
/// 模拟键盘标按下
public void MykeyDown(int vKeyCoad)
{

int btScancode = 0;
btScancode = MapVirtualKey((byte)vKeyCoad, 0);

KBCWait4IBE(); // 等待键盘缓冲区为空
SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);// 发送命令
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)0xe2, 1);// 写入按键信息
KBCWait4IBE(); // '等待键盘缓冲区为空
SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);// '发送键盘写入命令
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)btScancode, 1);// '写入按下键


}
/// 模拟键盘弹出
public void MykeyUp(int vKeyCoad)
{
int btScancode = 0;
btScancode = MapVirtualKey((byte)vKeyCoad, 0);

KBCWait4IBE(); // '等待键盘缓冲区为空
SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1); // 发送键盘写入命令
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)0xe0, 1);// 写入按键信息
KBCWait4IBE(); // '等待键盘缓冲区为空
SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1); // 发送写入命令
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)(btScancode | 0x80), 1);// 修正的错误否则无法弹起

}
/// 模拟鼠标按下
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, 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);// '写入信息释放键

}
...全文
454 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Elaine9656 2013-03-17
  • 打赏
  • 举报
回复
问题解决了~~~~只要以管理员身份运行Microsoft Visual Studio 2010就行了~~~

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧