c# - 如何将 key 发送到另一个应用程序

标签 c# sendkeys

我想将一个特定的键(例如 k)发送到另一个名为记事本的程序,下面是我使用的代码:

private void SendKey()
{
    [DllImport ("User32.dll")]
    static extern int SetForegroundWindow(IntPtr point);

    var p = Process.GetProcessesByName("notepad")[0];
    var pointer = p.Handle;

    SetForegroundWindow(pointer);
    SendKeys.Send("k");
}
            

但是代码不行,代码哪里出了问题?

是否可以将“K”发送到记事本而没有记事本作为事件窗口? (例如,active window = "Google chrome",记事本在后台,这意味着向后台应用程序发送 key )?

最佳答案

如果记事本已经启动,你应该写:

// import the function in your class
[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");
}

GetProcessesByName返回一个进程数组,因此您应该获取第一个(或找到您想要的那个)。

如果你想启动记事本并发送 key ,你应该这样写:

Process p = Process.Start("notepad.exe");
p.WaitForInputIdle();
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait("k");

代码可能无法工作的唯一情况是当 notepad 以管理员身份启动而您的应用程序未启动时。

关于c# - 如何将 key 发送到另一个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15292175/

相关文章:

c# - 使用 CryptoStreams 加密和 HMAC 数据

ios - 在文本字段中输入字符串时键盘不可见

python - 将窗口的内容获取到文本文件

c# - 从字符串中剥离 WordML

C#:将对象呈现为 XML

c# - 为什么 ICollection 索引在实例化时不起作用?

c++ - 将文本/击键发送到未选择的窗口?

c# - SendKeys Ctrl-A 不工作

c# - 在 c# 中向应用程序发送击键(sendkeys、postmessage、sendmessage 都不起作用)

c# - 为什么 .CommandText 不像 sqldeveloper 中的查询那样识别 LIKE 语句?