C#

C#使用Sendkey函数将密钥发送到另一个应用程序

发布于 2021-02-02 15:58:33

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

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”发送到记事本作为活动窗口?(例如,活动窗口=“ Google
chrome”,记事本位于背景中,这意味着向后台应用程序发送密钥)

关注者
0
被浏览
127
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    如果记事本已经启动,则应输入:

    // 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
    返回一个进程数组,因此您应该获得第一个进程(或找到所需的进程)。

    如果要启动notepad并发送密钥,应输入:

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

    代码可能无法正常工作的唯一情况是,当notepad以Administrator身份启动而不是您的应用程序启动时。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看