using
System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace lizheAionWG
{
public class WinIo
{
public const int KBC_KEY_CMD = 0x64 ;
public const int KBC_KEY_DATA = 0x60 ;
[DllImport( " winio.dll " )]
public static extern bool InitializeWinIo();
[DllImport( " winio.dll " )]
public static extern bool GetPortVal(IntPtr wPortAddr, out int pdwPortVal, byte bSize);
[DllImport( " winio.dll " )]
public static extern bool SetPortVal( uint wPortAddr, IntPtr dwPortVal, byte bSize);
[DllImport( " winio.dll " )]
public static extern byte MapPhysToLin( byte pbPhysAddr, uint dwPhysSize, IntPtr PhysicalMemoryHandle);
[DllImport( " winio.dll " )]
public static extern bool UnmapPhysicalMemory(IntPtr PhysicalMemoryHandle, byte pbLinAddr);
[DllImport( " winio.dll " )]
public static extern bool GetPhysLong(IntPtr pbPhysAddr, byte pdwPhysVal);
[DllImport( " winio.dll " )]
public static extern bool SetPhysLong(IntPtr pbPhysAddr, byte dwPhysVal);
[DllImport( " winio.dll " )]
public static extern void ShutdownWinIo();
[DllImport( " user32.dll " )]
public static extern int MapVirtualKey( uint Ucode, uint uMapType);
public void sendwinio()
{
if (InitializeWinIo())
{
KBCWait4IBE();
}
}
/// Wait for Buffer gets empty
private void KBCWait4IBE()
{
int dwVal = 0 ;
do
{
bool flag = GetPortVal((IntPtr) 0x64 , out dwVal, 1 );
}
while ((dwVal & 0x2 ) > 0 );
}
/// key down
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 );
}
/// Key up
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, 1 );
}
/// Simulate mouse down
public void MyMouseDown( int vKeyCoad)
{
int btScancode = 0 ;
btScancode = MapVirtualKey(( byte )vKeyCoad, 0 );
KBCWait4IBE(); // 'wait for buffer gets empty
SetPortVal(KBC_KEY_CMD, (IntPtr) 0xD3 , 1 ); // 'send write command
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)(btScancode | 0x80 ), 1 ); // 'write in io
}
/// Simulate mouse up
public void MyMouseUp( int vKeyCoad)
{
int btScancode = 0 ;
btScancode = MapVirtualKey(( byte )vKeyCoad, 0 );
KBCWait4IBE(); // 'wait for buffer gets empty
SetPortVal(KBC_KEY_CMD, (IntPtr) 0xD3 , 1 ); // 'send write command
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)(btScancode | 0x80 ), 1 ); // 'write in io
}
// ----------------------------------------------------------------------------------
// VK codes
// ----------------------------------------------------------------------------------
public enum Key
{
// mouse movements
move = 0x0001 ,
leftdown = 0x0002 ,
leftup = 0x0004 ,
rightdown = 0x0008 ,
rightup = 0x0010 ,
middledown = 0x0020 ,
// keyboard stuff
VK_LBUTTON = 1 ,
VK_RBUTTON = 2 ,
VK_CANCEL = 3 ,
VK_MBUTTON = 4 ,
VK_BACK = 8 ,
VK_TAB = 9 ,
VK_CLEAR = 12 ,
VK_RETURN = 13 ,
VK_SHIFT = 16 ,
VK_CONTROL = 17 ,
VK_MENU = 18 ,
VK_PAUSE = 19 ,
VK_CAPITAL = 20 ,
VK_ESCAPE = 27 ,
VK_SPACE = 32 ,
VK_PRIOR = 33 ,
VK_NEXT = 34 ,
VK_END = 35 ,
VK_HOME = 36 ,
VK_LEFT = 37 ,
VK_UP = 38 ,
VK_RIGHT = 39 ,
VK_DOWN = 40 ,
VK_SELECT = 41 ,
VK_PRINT = 42 ,
VK_EXECUTE = 43 ,
VK_SNAPSHOT = 44 ,
VK_INSERT = 45 ,
VK_DELETE = 46 ,
VK_HELP = 47 ,
VK_NUM0 = 48 , // 0
VK_NUM1 = 49 , // 1
VK_NUM2 = 50 , // 2
VK_NUM3 = 51 , // 3
VK_NUM4 = 52 , // 4
VK_NUM5 = 53 , // 5
VK_NUM6 = 54 , // 6
VK_NUM7 = 55 , // 7
VK_NUM8 = 56 , // 8
VK_NUM9 = 57 , // 9
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_NUMPAD0 = 96 , // 0
VK_NUMPAD1 = 97 , // 1
VK_NUMPAD2 = 98 , // 2
VK_NUMPAD3 = 99 , // 3
VK_NUMPAD4 = 100 , // 4
VK_NUMPAD5 = 101 , // 5
VK_NUMPAD6 = 102 , // 6
VK_NUMPAD7 = 103 , // 7
VK_NUMPAD8 = 104 , // 8
VK_NUMPAD9 = 105 , // 9
VK_NULTIPLY = 106 ,
VK_ADD = 107 ,
VK_SEPARATOR = 108 ,
VK_SUBTRACT = 109 ,
VK_DECIMAL = 110 ,
VK_DIVIDE = 111 ,
VK_F1 = 112 ,
VK_F2 = 113 ,
VK_F3 = 114 ,
VK_F4 = 115 ,
VK_F5 = 116 ,
VK_F6 = 117 ,
VK_F7 = 118 ,
VK_F8 = 119 ,
VK_F9 = 120 ,
VK_F10 = 121 ,
VK_F11 = 122 ,
VK_F12 = 123 ,
VK_NUMLOCK = 144 ,
VK_SCROLL = 145 ,
middleup = 0x0040 ,
xdown = 0x0080 ,
xup = 0x0100 ,
wheel = 0x0800 ,
virtualdesk = 0x4000 ,
absolute = 0x8000
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace lizheAionWG
{
public class WinIo
{
public const int KBC_KEY_CMD = 0x64 ;
public const int KBC_KEY_DATA = 0x60 ;
[DllImport( " winio.dll " )]
public static extern bool InitializeWinIo();
[DllImport( " winio.dll " )]
public static extern bool GetPortVal(IntPtr wPortAddr, out int pdwPortVal, byte bSize);
[DllImport( " winio.dll " )]
public static extern bool SetPortVal( uint wPortAddr, IntPtr dwPortVal, byte bSize);
[DllImport( " winio.dll " )]
public static extern byte MapPhysToLin( byte pbPhysAddr, uint dwPhysSize, IntPtr PhysicalMemoryHandle);
[DllImport( " winio.dll " )]
public static extern bool UnmapPhysicalMemory(IntPtr PhysicalMemoryHandle, byte pbLinAddr);
[DllImport( " winio.dll " )]
public static extern bool GetPhysLong(IntPtr pbPhysAddr, byte pdwPhysVal);
[DllImport( " winio.dll " )]
public static extern bool SetPhysLong(IntPtr pbPhysAddr, byte dwPhysVal);
[DllImport( " winio.dll " )]
public static extern void ShutdownWinIo();
[DllImport( " user32.dll " )]
public static extern int MapVirtualKey( uint Ucode, uint uMapType);
public void sendwinio()
{
if (InitializeWinIo())
{
KBCWait4IBE();
}
}
/// Wait for Buffer gets empty
private void KBCWait4IBE()
{
int dwVal = 0 ;
do
{
bool flag = GetPortVal((IntPtr) 0x64 , out dwVal, 1 );
}
while ((dwVal & 0x2 ) > 0 );
}
/// key down
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 );
}
/// Key up
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, 1 );
}
/// Simulate mouse down
public void MyMouseDown( int vKeyCoad)
{
int btScancode = 0 ;
btScancode = MapVirtualKey(( byte )vKeyCoad, 0 );
KBCWait4IBE(); // 'wait for buffer gets empty
SetPortVal(KBC_KEY_CMD, (IntPtr) 0xD3 , 1 ); // 'send write command
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)(btScancode | 0x80 ), 1 ); // 'write in io
}
/// Simulate mouse up
public void MyMouseUp( int vKeyCoad)
{
int btScancode = 0 ;
btScancode = MapVirtualKey(( byte )vKeyCoad, 0 );
KBCWait4IBE(); // 'wait for buffer gets empty
SetPortVal(KBC_KEY_CMD, (IntPtr) 0xD3 , 1 ); // 'send write command
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)(btScancode | 0x80 ), 1 ); // 'write in io
}
// ----------------------------------------------------------------------------------
// VK codes
// ----------------------------------------------------------------------------------
public enum Key
{
// mouse movements
move = 0x0001 ,
leftdown = 0x0002 ,
leftup = 0x0004 ,
rightdown = 0x0008 ,
rightup = 0x0010 ,
middledown = 0x0020 ,
// keyboard stuff
VK_LBUTTON = 1 ,
VK_RBUTTON = 2 ,
VK_CANCEL = 3 ,
VK_MBUTTON = 4 ,
VK_BACK = 8 ,
VK_TAB = 9 ,
VK_CLEAR = 12 ,
VK_RETURN = 13 ,
VK_SHIFT = 16 ,
VK_CONTROL = 17 ,
VK_MENU = 18 ,
VK_PAUSE = 19 ,
VK_CAPITAL = 20 ,
VK_ESCAPE = 27 ,
VK_SPACE = 32 ,
VK_PRIOR = 33 ,
VK_NEXT = 34 ,
VK_END = 35 ,
VK_HOME = 36 ,
VK_LEFT = 37 ,
VK_UP = 38 ,
VK_RIGHT = 39 ,
VK_DOWN = 40 ,
VK_SELECT = 41 ,
VK_PRINT = 42 ,
VK_EXECUTE = 43 ,
VK_SNAPSHOT = 44 ,
VK_INSERT = 45 ,
VK_DELETE = 46 ,
VK_HELP = 47 ,
VK_NUM0 = 48 , // 0
VK_NUM1 = 49 , // 1
VK_NUM2 = 50 , // 2
VK_NUM3 = 51 , // 3
VK_NUM4 = 52 , // 4
VK_NUM5 = 53 , // 5
VK_NUM6 = 54 , // 6
VK_NUM7 = 55 , // 7
VK_NUM8 = 56 , // 8
VK_NUM9 = 57 , // 9
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_NUMPAD0 = 96 , // 0
VK_NUMPAD1 = 97 , // 1
VK_NUMPAD2 = 98 , // 2
VK_NUMPAD3 = 99 , // 3
VK_NUMPAD4 = 100 , // 4
VK_NUMPAD5 = 101 , // 5
VK_NUMPAD6 = 102 , // 6
VK_NUMPAD7 = 103 , // 7
VK_NUMPAD8 = 104 , // 8
VK_NUMPAD9 = 105 , // 9
VK_NULTIPLY = 106 ,
VK_ADD = 107 ,
VK_SEPARATOR = 108 ,
VK_SUBTRACT = 109 ,
VK_DECIMAL = 110 ,
VK_DIVIDE = 111 ,
VK_F1 = 112 ,
VK_F2 = 113 ,
VK_F3 = 114 ,
VK_F4 = 115 ,
VK_F5 = 116 ,
VK_F6 = 117 ,
VK_F7 = 118 ,
VK_F8 = 119 ,
VK_F9 = 120 ,
VK_F10 = 121 ,
VK_F11 = 122 ,
VK_F12 = 123 ,
VK_NUMLOCK = 144 ,
VK_SCROLL = 145 ,
middleup = 0x0040 ,
xdown = 0x0080 ,
xup = 0x0100 ,
wheel = 0x0800 ,
virtualdesk = 0x4000 ,
absolute = 0x8000
}
}
}