我目前有这段代码
keybd_event(0x09, 0, 0, 0);
keybd_event(0x09, 0, 0, 0);
keybd_event(0x09, 0, 0, 0);
能够连续三次击中标签,但是,它只会在第一次点击标签而不会再次点击标签。
当我尝试调试它时,每当我继续第二个和第三个keybd_event时,它会显示消息"代码运行时不允许更改"
答案 0 :(得分:0)
您不会在每次击键之间发送任何KEYEVENTF_KEYUP
个事件,例如:
keybd_event(0x09, 0, 0, 0);
keybd_event(0x09, KEYEVENTF_KEYUP, 0, 0);
keybd_event(0x09, 0, 0, 0);
keybd_event(0x09, KEYEVENTF_KEYUP, 0, 0);
keybd_event(0x09, 0, 0, 0);
keybd_event(0x09, KEYEVENTF_KEYUP, 0, 0);
话虽如此,keybd_event()
已递减,您应该使用SendInput()
代替(Send keys through SendInput in user32.dll),例如:
INPUT input = new INPUT {
Type = 1
};
input.Data.Keyboard = new KEYBDINPUT() {
Vk = 0x09,
Scan = 0,
Flags = 0,
Time = 0,
ExtraInfo = IntPtr.Zero,
};
INPUT input2 = new INPUT {
Type = 1
};
input2.Data.Keyboard = new KEYBDINPUT() {
Vk = 0x09,
Scan = 0,
Flags = 2,
Time = 0,
ExtraInfo = IntPtr.Zero
};
INPUT[] inputs = new INPUT[] { input, input2, input, input2, input, input2 };
SendInput(6, inputs, Marshal.SizeOf(typeof(INPUT)));
或者,您可以使用SendKeys()
代替,例如:
SendKeys.Send("{TAB}{TAB}{TAB}");