我正在尝试将字符串发送到外部程序,但我只有一个我将使用的示例程序,所以我不知道实际的文本框 ID 最终会是什么。显然这是相当有问题的。
该程序所做的是允许用户单击一个按钮,该按钮会将文本粘贴到外部程序上。这一切都可以使用 SendKeys 正常工作。然后我被要求创建一个热键,允许一个人进行击键,这相当于按下一个按钮。
我有热键,但是,当一个人使用热键时,它最终会多次发送消息。我已将其缩小为 sendKeys 函数,并且我尝试使用 SendMessage,但我不知道 textBox ID,所以据我所知,这不是一个可行的选择。这是我对 SendKeys 代码的看法。
private void FocusProcess(string procName, string message, bool hotkeyed) {
Process[] objProcesses = Process.GetProcessesByName(procName);
if (autoPasteOn.Checked || toFrontOn.Checked) {
foreach (Process currentProc in objProcesses) {
IntPtr hWnd = IntPtr.Zero;
hWnd = currentProc.MainWindowHandle;
ShowWindowAsync(new HandleRef(null, hWnd), SW_RESTORE);
SetForegroundWindow(hWnd);
if (autoPasteOn.Checked) {
SendKeys.Send(message);
}
if (toFrontOff.Checked) {
SetForegroundWindow(mainProg);
SetWindowPos(hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
}
}
}
}
它的工作原理是将另一个进程拉到前面,发送消息,然后将其发送到后面。我正在使用 SetWindowsHookEx 库注册热键,它工作正常。唯一的问题是使用热键发送消息。它有效,但它做了很多次。我已放置检查以使其以最多 4 次/秒的速度粘贴。但它的速度约为 10-20 次/秒。我已经确认代码每四分之一秒只执行一次,但 sendkeys 仍然搞砸了。