Win32API - нажмите кнопку приложения Winform через адаптер - PullRequest
0 голосов
/ 29 марта 2019

Мне нужно нажать на кнопку приложения Windows Form через мой адаптер, используя win32Api.

Я нашел кнопку на экране формы Windows, используя этот код

        childHwnd = Win32API.FindWindowByPosition(ptr, new Point(intbtnx, intbtny));

Теперь мне нужно автоматически нажать эту кнопку. Я не уверен, как это сделать. Нужна помощь, пожалуйста.

Я уже написал это, но он выбирает только ту кнопку, которая мне нужна, чтобы нажать на нее.

     childHwnd = Win32API.FindWindowByPosition(ptr, new Point(intPwdx, intPwdy));

Нужно нажать на кнопку, которая доступна в childHwnd

1 Ответ

1 голос
/ 29 марта 2019

Вы можете использовать SendMessage API для этого

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, uint msg, int wParam, int lParam);

private const uint BM_CLICK = 0x00F5;

SendMessage(childHwnd, BM_CLICK, 0, 0); 

Следует отметить, что вы не увидите анимацию нажатия кнопки, которая появляется только тогда, когда вы действительно нажимаете на нее.
Однако он должен выполнить код из события click

EDIT
В комментариях ОП просит отложить SendMessage на 5 секунд, не останавливая приложение.
Одно простое решение - это

из Toolbox в VS добавьте Timer компонент в форму.

Установить его свойство Interval в 5000
Установите для его свойства Enabled значение true
Дважды щелкните по событию Tick и напишите этот код

private void timer1_Tick(object sender, EventArgs e)
{
     timer1.Enabled = false; // write this if you only want this to happen once
     SendMessage(childHwnd, BM_CLICK, 0, 0); 
}
...