Не удается отправить нажатие клавиш для работающего процесса в C # - PullRequest
0 голосов
/ 01 июня 2010

Я использую следующий код, чтобы установить фокус на окне (в данном случае это окно блокнота), и посылаю несколько нажатий клавиш на него каждый раз, когда нажимается кнопка 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 ]

4 голосов
/ 01 июня 2010

ShowWindow показывает запущенный «Блокнот», но не дает ему фокус ввода. Ваш вывод sendkeys получен отправкой формы, Form1.

0 голосов
/ 01 июня 2010

Ну, оказывается, это была проблема. Я не правильно установил фокус на блокнот. Команда 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");
    }
}
...