【发布时间】:2018-11-06 15:35:40
【问题描述】:
我正在尝试使用 SendInput 发送击键。例如,如果我尝试发送键 A,则该代码有效,但如果我尝试右箭头键,它会键入 6。不知道为什么。
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName,
string lpWindowName);
[DllImport("user32.dll")]
internal static extern uint SendInput(
uint nInputs,
[MarshalAs(UnmanagedType.LPArray), In] INPUT[] pInputs,
int cbSize);
private void button1_Click(object sender, EventArgs e)
{
SetForegroundWindow(FindWindow("Notepad", "Untitled - Notepad"));
SendInputWithAPI();
}
void SendInputWithAPI()
{
INPUT[] Inputs = new INPUT[1];
INPUT Input = new INPUT();
Input.type = 1; // 1 = Keyboard Input
Input.U.ki.wScan = ScanCodeShort.RIGHT;
Input.U.ki.dwFlags = KEYEVENTF.SCANCODE;
Inputs[0] = Input;
SendInput(1, Inputs, INPUT.Size);
}
顺便说一句,ScanCodeShort.RIGHT 返回 77。 谢谢。
【问题讨论】:
-
右 = NUMPAD6 = 77
-
@GSerg 不太了解,我从谷歌那里得到了输入。
-
@neil.work 那么我应该怎么做才能让它真正正常工作?
-
去掉
SCANCODE标志,不初始化Input.U.ki.wScan,把VK_RIGHT传给Input.U.ki.wVk?扫描码表示物理键而不是逻辑键,如果扫描码表示数字键盘键 6,则结果将取决于例如您的 Num Lock 状态。