求教调用WinIO模拟键盘,使用的枚举和命令参数
这个东西搜了半天,五花八门,但都不对……有的说普通键直接发,扩展键要发一个e0标志;也有的代码是统一先发一个e2/e0/60标志的,但不管怎么都不对,总会有弹不起来的情况。。按说这种东西总觉得应该有个官方文档,文档又不说,文档只说函数用法,问题是该往函数里传什么天知道。。有这方面的文档链接么?
另外不会是枚举有问题吧。。枚举因为我要与System.Windows.Input里的Key枚举做转换,才改成了一致的名字,改对了没?
private static void KBCWait4IBE()--------------------编程问答-------------------- 又看到了这样的表格,彻底混乱了。。这表格的定义和这枚举相差甚远啊。。
{
System.Threading.Thread.Sleep(25);
int dwVal = 0;
do
{
bool flag = GetPortVal((IntPtr)KBC_KEY_CMD, out dwVal, 1);
}
while ((dwVal & 0x2) > 0);
do
{
bool flag = GetPortVal((IntPtr)KBC_KEY_DATA, out dwVal, 1);
}
while ((dwVal & 0x2) > 0);
}
static bool ext_key = false;
public static void KeyDown(Vk_Key vk_code) // 该发什么?
{
if (vk_code == Vk_Key.None)
return;
int btScancode = 0;
btScancode = MapVirtualKey((byte)vk_code, 0);
KBCWait4IBE();
SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)btScancode, 1);
if (ext_key == true)
{
ext_key = false;
KBCWait4IBE();
SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)btScancode, 1);
}
}
public static void KeyDownEx(Vk_Key vk_code) // 该发什么?
{
if (vk_code == Vk_Key.None)
return;
int btScancode = 0;
btScancode = MapVirtualKey((byte)vk_code, 0);
ext_key = true;
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);
}
public static void KeyUp(Vk_Key vk_code) // 该发什么?
{
if (vk_code == Vk_Key.None)
return;
int btScancode = 0;
btScancode = MapVirtualKey((byte)vk_code, 0);
KBCWait4IBE();
SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)(btScancode | 0x80), 1);
if (ext_key == true)
{
KBCWait4IBE();
SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);
KBCWait4IBE();
SetPortVal(KBC_KEY_DATA, (IntPtr)(btScancode | 0x80), 1);
ext_key = false;
}
}
public static void KeyUpEx(Vk_Key vk_code) // 该发什么?
{
if (vk_code == Vk_Key.None)
return;
int btScancode = 0;
btScancode = MapVirtualKey((byte)vk_code, 0);
ext_key = true;
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 static void KeyDown_All(Vk_Key vk_code)
{
int i = (int)vk_code;
if ((i > 48 && i <= 111) || (i == 32))
{
KeyDown(vk_code);
}
else
KeyDownEx(vk_code);
}
public static void KeyUp_All(Vk_Key vk_code)
{
int i = (int)vk_code;
if ((i > 48 && i <= 111) || (i == 32))
{
KeyUp(vk_code);
}
else
KeyUpEx(vk_code);
}
public enum Vk_Key
{
// mouse movements
None = 0,
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,
Back = 8,
Tab = 9,
Clear = 12,
Return = 13,
Enter = 13,
LeftShift = 16,
RightShift = 16,
LeftCtrl = 17,
RightCtrl = 17,
LeftAlt = 18,
RightAlt = 18,
Pause = 19,
Capital = 20,
CapsLock = 20,
Escape = 27,
Space = 32,
Prior = 33,
PageUp = 33,
Next = 34,
PageDown = 34,
End = 35,
Home = 36,
Left = 37,
Up = 38,
Right = 39,
Down = 40,
Select = 41,
Print = 42,
Execute = 43,
Snapshot = 44,
PrintScreen = 44,
Insert = 45,
Delete = 46,
Help = 47,
D0 = 48, //0
D1 = 49, //1
D2 = 50, //2
D3 = 51, //3
D4 = 52, //4
D5 = 53, //5
D6 = 54, //6
D7 = 55, //7
D8 = 56, //8
D9 = 57, //9
A = 65, //A
B = 66, //B
C = 67, //C
D = 68, //D
E = 69, //E
F = 70, //F
G = 71, //G
H = 72, //H
I = 73, //I
J = 74, //J
K = 75, //K
L = 76, //L
M = 77, //M
N = 78, //N
O = 79, //O
P = 80, //P
Q = 81, //Q
R = 82, //R
S = 83, //S
T = 84, //T
U = 85, //U
V = 86, //V
W = 87, //W
X = 88, //X
Y = 89, //Y
Z = 90, //Z
Numpad0 = 96, //0
Numpad1 = 97, //1
Numpad2 = 98, //2
NumpadD3 = 99, //3
Numpad4 = 100, //4
Numpad5 = 101, //5
Numpad6 = 102, //6
Numpad7 = 103, //7
Numpad8 = 104, //8
Numpad9 = 105, //9
Multiply = 106,
Add = 107,
Separator = 108,
Subtract = 109,
Decimal = 110,
Divide = 111,
F1 = 112,
F2 = 113,
F3 = 114,
F4 = 115,
F5 = 116,
F6 = 117,
F7 = 118,
F8 = 119,
F9 = 120,
F10 = 121,
F11 = 122,
F12 = 123,
NumLock = 144,
Scroll = 145,
ExtendedKey = 0x00E0,
middleup = 0x0040,
xdown = 0x0080,
xup = 0x0100,
wheel = 0x0800,
virtualdesk = 0x4000,
absolute = 0x8000
}
但这个枚举做按键似乎是对的,那这表格是干什么的?
补充:.NET技术 , C#