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

さて、これが問題だったことがわかりました。フォーカスをメモ帳に正しく設定していませんでした。ShowWindow の代わりに SetForegroundWindow コマンドを使用する必要がありました。

 [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 に答える