Нажать на кнопку в стороннем приложении, используя WinAPI - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте в кратце Нужно на c# и winapi реализовать данное сообщение "WM_PARENTNOTIFY fwEvent:WM_LBUTTONDOWN xPos: 386 yPos:227" Handle мне известен, осталось разобраться с командой а теперь подробно У сторонней программы есть поле (допустим 500х500) и в нём по середине кнопка на которую мне необходимо нажать с помощью winapi. Я смотрел через SPY++ и Ranorex, и они мне показывают кнопку и поле одним хэндлом. Пробую для начала по полученному Handle отправить даблклик(есть такая функция, окно переходит в режим fullscreen)
Usr32.PostMessage(winCanvas, Usr32.WM_LBUTTONDBLCLK, (IntPtr)1, IntPtr.Zero);
И оно срабатывает корректно. Замечательно, теперь надо реализовать клик по середине экрана. Изучая через SPY++ программу смог найти "сообщение" которое получает программа во время клика по кнопке. Вот оно: WM_PARENTNOTIFY fwEvent:WM_LBUTTONDOWN xPos: 386 yPos:227. Нагуглил, что это можно отправить клик по координатам через MAKELPARAM Вот код, который я пробовал реализовать
public const int WM_LBUTTONDOWN = 0x0201;
[DllImport("User32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
private int MAKELPARAM(Point coord)
{
int p = coord.X;
int p_2 = coord.Y;
return ((p_2 << 16) | (p & 0xFFFF));
}
 
//это я нахожу X,Y в который надо кликнуть
Point coordButton = new Point (this.Location.X + (this.Width / 2), this.Location.Y + (this.Height / 2));
//сама команда
PostMessage(winCanvas, WM_LBUTTONDOWN, (IntPtr)1, (IntPtr)MAKELPARAM(coordButton));
Буду рад объяснению решения моей проблемы/ошибки. Ниже скриншоты окна с кнопкой/отрезок из SPY++. И пожалуйста, я не просто так пишу в ветку c#, мне сложно будет переделать команды win api на с++ в команды на c#.

Решение задачи: «Нажать на кнопку в стороннем приложении, используя WinAPI»

textual
Листинг программы
PostMessage(winCanvas, WM_LBUTTONDOWN, (IntPtr)1, MakeDWord(coordButton.X, coordButton.Y));
PostMessage(winCanvas, WM_LBUTTONUP, (IntPtr)1, MakeDWord(coordButton.X, coordButton.Y));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.5 из 5
Похожие ответы