把dll文件和sys文件放在同一个目录下,一般放在工程debug下。
设置虚拟码
public enum VKKey
{
VK_A = 65, //A
VK_B = 66, //B
VK_C = 67, //C
VK_D = 68, //D
VK_E = 69, //E
VK_F = 70, //F
VK_G = 71, //G
VK_H = 72, //H
VK_I = 73, //I
VK_J = 74, //J
VK_K = 75, //K
VK_L = 76, //L
VK_M = 77, //M
VK_N = 78, //N
VK_O = 79, //O
VK_P = 80, //P
VK_Q = 81, //Q
VK_R = 82, //R
VK_S = 83, //S
VK_T = 84, //T
VK_U = 85, //U
VK_V = 86, //V
VK_W = 87, //W
VK_X = 88, //X
VK_Y = 89, //Y
VK_Z = 90, //Z
VK_LEFT = 37,
VK_UP = 38,
VK_RIGHT = 39,
VK_DOWN = 40,
}123456789101112131415161718192021222324252627282930313233
然后声明各种所需要的dll中的函数
[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()123456789101112131415161718192021222324
声明和实现自己编写的按键函数。
//初始化public static void Initialize()
{if (InitializeWinIo())//库函数
{
KBCWait4IBE()IsInitialize = true
}else
System.Console.WriteLine("有问题")
}
//关闭
public static void Shutdown()
{
if (IsInitialize)
ShutdownWinIo()
IsInitialize = false
}
//清理缓冲区private static void KBCWait4IBE()
{
int dwVal = 0
do
{
bool flag = GetPortVal((IntPtr)0x64, out dwVal, 1)
}
while ((dwVal &0x2) >0)
}
/// key down
public static void MykeyDown(VKKey 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)btScancode, 1)
System.Console.WriteLine("按下")
}
/// Key up
public static void MykeyUp(VKKey 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)(btScancode | 0x80), 1)
System.Console.WriteLine("d起")
} 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
在main函数中,调用自己的按键函数
MykeyDown(VKKey.VK_D)MykeyUp(VKKey.VK_D)12
这样便可以绕过windows消息机制,直接向io端口写消息。
电脑丢失dll文件一键修复的方法如下:
电脑:MacBook
系统:OSX10.9
首先下载一个第三方工具,以电脑管家为例,进入电脑管家后,点击打开左侧的工具箱选项。在工具箱页面中,再点击电脑诊所选项。在d出的页面中,选择软件硬件选项,最后点击丢失dll文件选项,在d出的界面中,点击立即修复,等待一段修复时间后,再重启电脑即可。
DLL文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库。
dll文件的作用:
DLL文件,放置于系统中,当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。
动态链接库是早期Windows系统由于受限于当时计算机内存空间较小的问题而出现的一种内存优化方法。当一段相同的子程序被多个程序调用时,为了减少内存消耗,可以将这段子程序存储为一个可执行文件,当被多个程序调用时只在内存中生成和使用同一个实例。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)