无法在C#中将按键发送到正在运行的进程

时间:2010-06-01 01:16:06

标签: c# winforms sendkeys

我正在使用以下代码将焦点放在窗口上(在本例中为记事本窗口),并在每次单击按钮2时向其发送一些按键。但是,当我按下按钮2时,没有任何反应。任何人都可以告诉我为什么我的sendkeys命令失败了吗?

public partial class Form1 : Form
{
    [DllImport("user32.dll")]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    private Process s;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.s = new Process();
        s.StartInfo.FileName = "notepad";
        s.Start();
        s.WaitForInputIdle();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        ShowWindow(s.MainWindowHandle, 1);
        SendKeys.SendWait("Hello");
    }
}

2 个答案:

答案 0 :(得分:4)

ShowWindow显示已启动的'记事本',但没有给它输入焦点。您的sendkeys输出正在通过发送表单Form1收到。

答案 1 :(得分:0)

嗯,原来这就是问题所在。我没有正确地将焦点设置到记事本。应该使用命令SetForegroundWindow而不是ShowWindow。

 [DllImport("User32")]
    private static extern int SetForegroundWindow(IntPtr hwnd);

    private Process s;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.s = new Process();
        s.StartInfo.FileName = "notepad";
        s.Start();
        s.WaitForInputIdle();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        //ShowWindow(s.MainWindowHandle, SW_RESTORE);
        SetForegroundWindow(s.MainWindowHandle);
        SendKeys.SendWait("Hello");
    }
}