将密钥发送到后台应用程序
提供的代码尝试将“k”键发送到记事本,但遇到问题。要解决此问题,需要解决代码的几个方面问题。
正确的进程处理:
代码假定记事本已在运行。为了准确地处理这个问题,您应该使用以下命令获取第一个记事本进程:
Process p = Process.GetProcessesByName("notepad").FirstOrDefault();
如果记事本当前未运行,您可以使用以下命令启动它:
Process p = Process.Start("notepad.exe");
带上记事本到前台:
一旦你有了记事本进程,你需要将其主窗口带到前台:
IntPtr h = p.MainWindowHandle; SetForegroundWindow(h);
等待输入稳定:
在发送密钥之前,您应该等待应用程序稳定其输入循环:
p.WaitForInputIdle();
发送密钥:
最后,您可以发送所需的密钥:
SendKeys.SendWait("k");
管理员权限可能出现的问题:
值得一提如果记事本以管理员身份运行而您的应用程序不是以管理员身份运行,则此方法可能不会工作。
修改后的代码:
以下是包含必要修复的修改后的代码:
[DllImport("User32.dll")] static extern int SetForegroundWindow(IntPtr point); Process p = Process.GetProcessesByName("notepad").FirstOrDefault(); if (p != null) { IntPtr h = p.MainWindowHandle; SetForegroundWindow(h); SendKeys.SendWait("k"); } else { p = Process.Start("notepad.exe"); p.WaitForInputIdle(); IntPtr h = p.MainWindowHandle; SetForegroundWindow(h); SendKeys.SendWait("k"); }
以上是如何可靠地将密钥发送到记事本等后台应用程序?的详细内容。更多信息请关注PHP中文网其他相关文章!