首页 >后端开发 >C++ >如何可靠地将密钥发送到记事本等后台应用程序?

如何可靠地将密钥发送到记事本等后台应用程序?

Susan Sarandon
Susan Sarandon原创
2025-01-05 08:43:41968浏览

How Can I Reliably Send Keys to a Background Application Like Notepad?

将密钥发送到后台应用程序

提供的代码尝试将“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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn