0

我正在使用以下代码将焦点放在一个窗口(在本例中为记事本窗口)上,并在每次单击按钮 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");
    }
}
4

2 回答 2

4

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

于 2010-06-01T01:28:24.407 回答
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");
    }
}
于 2010-06-01T01:29:13.423 回答