我正在尝试使用SendInput来自动执行一些按键操作。在简单的测试中(即打开记事本并观察笔画发生),笔画工作正常。模拟空间一遍又一遍地工作,字母等
但是,尝试将此输入发送到某个应用程序时,SendInput仅适用于某个键的第一个实例。所以,我可以发送一次Space,下次当我尝试发送Space时,它实际上不会被发送。 (即使它会在任何其他应用程序中发送)然后我可以发送一次A,但下次我尝试发送A它不会发送。等等。
这是我正在遇到的某种许可问题吗?初始输入工作得很好,但是在按下相同键后不会。
为了提供更多内容,这里有一个示例方法,假设所有标准结构:
public static void PressEnter()
{
INPUT[] Inputs = new INPUT[1];
INPUT Input = new INPUT();
Input.type = 1; // 1 = Keyboard Input
Input.U.ki.wScan = ScanCodeShort.RETURN;
Input.U.ki.dwFlags = KEYEVENTF.SCANCODE;
Inputs[0] = Input;
uint returnInput = SendInput(1, Inputs, INPUT.Size);
Console.WriteLine(returnInput);
}
我可以用Notepad重复一遍又一遍地重复这个,并且将继续返回。但是,当将此反复发送到此特定应用程序时,只有第一个应用程序通过。但是,我可以按下键盘上的Enter键,接受就好了。应用程序是否可以拒绝来自SendInput的输入?
答案 0 :(得分:0)
这是模拟KeyUp标志的一种方法
INPUT input[4];
input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = 0;
input[0].ki.wScan = ScanCodeShort.RETURN;
input[0].ki.dwFlags = 0;
input[1].type = INPUT_KEYBOARD;
input[1].ki.wVk = 0;
input[1].ki.wScan = ScanCodeShort.RETURN;
input[1].ki.dwFlags = KEYEVENTF_KEYUP;
input[2].type = INPUT_KEYBOARD;
input[2].ki.wVk = 0;
input[2].ki.wScan = ScanCodeShort.RETURN;
input[2].ki.dwFlags = 0;
input[3].type = INPUT_KEYBOARD;
input[3].ki.wVk = 0;
input[3].ki.wScan = ScanCodeShort.RETURN;
input[3].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(4, input, sizeof(INPUT));
INPUT_KEYBOARD是输入
KEYEVENTF_KEYUP将模拟KeyUp
通过这种方式,您可以发送多次击键。试试吧,希望这对你有用。