【发布时间】:2019-05-13 16:42:09
【问题描述】:
在 C# 中使用 SendInput() 发送长击键。问题是使用它时,它在调用时适用于所有程序。是否可以将其定位为仅适用于特定程序?就像在使用 FindWindow 的 PostMessage() 中一样。
我的 SendInput():
[DllImport("user32.dll")]
internal static extern uint SendInput(
uint nInputs,
[MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs,
int cbSize);
public void KeySend(VirtualKeyShort key)
{
INPUT[] Inputs = new INPUT[1];
INPUT Input = new INPUT();
Input.type = 1;
Input.U.ki.wVk = key;
Inputs[0] = Input;
SendInput(1, Inputs, INPUT.Size);
}
public void KeyUp(VirtualKeyShort key)
{
INPUT[] Inputs = new INPUT[1];
INPUT Input = new INPUT();
Input.type = 1;
Input.U.ki.wVk = key;
Input.U.ki.dwFlags = KEYEVENTF.KEYUP;
Inputs[0] = Input;
SendInput(1, Inputs, INPUT.Size);
}
谢谢。
【问题讨论】:
-
SendInput的重点是重用操作系统输入处理逻辑。这种逻辑包括尊重焦点。如果你不想尊重焦点,你不应该要求使用这样做的逻辑。