Нажатие кнопок в другой программе через C#

151
20 января 2020, 10:20

Задумка сделать программу которая выполняет действия на основе полученной голосовой команды для домашнего использования (как во всяких фильмах крикнуть на всю квартиру "Компьютер, включи музыку!" и оп!).

Голос прикрутил через Microsoft.Speech.Recognition.

Запуск процессов осуществляю через System.Diagnostics.Process.

Но вот самое сложное..

Запустил я например Windows Media Player:

process.StartInfo = new System.Diagnostics.ProcessStartInfo("wmplayer.exe");

process.Start();

Он открылся все шикарно но как мне теперь нажать на кнопку "Воспроизводить" програмно?

Я понял что нужно использовать WinAPI и с его помощью можно будет найти контрол кнопки и активировать его (наверное?) но вообще не могу понять как его использовать.

Есть может хорошие статьи/видеоуроки на данную тему? Или кому не лень обьяснить что это и с чем его едят? (сразу говорю я даже толком не понял что такое handle)

Нашел вариант через Spy++ отловить сообщение (того же нажатия кнопки "Воспроизводить") и самому его отправить но опять таки как правильно построить сообщение и в кого его отправлять я тоже не понял..

P.S. Я самоучка который только закончил учить основы и сразу прыгает выше головы.

P.P.S Про плеер это просто пример, я уже понял что можно использовать библиотеку WMPLib.

Answer 1

Можно использовать библиотеку user32.dll. На мой взгляд, сначало нужно активировать окно процесса

    [DllImport("user32.dll")]
    static extern bool SetForegroundWindow(IntPtr hWnd)
    SetForegroundWindow(process.MainWindowHandle);

Затем нажат клавишу space:

    const UInt32 WM_KEYDOWN = 0x0100;
    const int VK_SPACE = 0x20;
    [DllImport("user32.dll")]
    static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, int wParam, int lParam);
    PostMessage(process.MainWindowHandle, WM_KEYDOWN, VK_SPACE, 0);
READ ALSO
c++ что означают данные строки?

c++ что означают данные строки?

Имеется фрагмент когда

148
Fluent Api и Web Api

Fluent Api и Web Api

Я новичок в Entity Framework и Fluent ApiЯ создал несколько моделей, создал базу данных

206
C# Получение данных из mssql по полю datatable

C# Получение данных из mssql по полю datatable

Всем привет! Ситуация следующая

147