Нажать на кнопку в стороннем приложении, используя WinAPI - C#
Формулировка задачи:
Здравствуйте
в кратце
Нужно на c# и winapi реализовать данное сообщение
"WM_PARENTNOTIFY fwEvent:WM_LBUTTONDOWN xPos: 386 yPos:227"
Handle мне известен, осталось разобраться с командой
а теперь подробно
У сторонней программы есть поле (допустим 500х500) и в нём по середине кнопка на которую мне необходимо нажать с помощью winapi.
Я смотрел через SPY++ и Ranorex, и они мне показывают кнопку и поле одним хэндлом.
Пробую для начала по полученному Handle отправить даблклик(есть такая функция, окно переходит в режим fullscreen)
И оно срабатывает корректно. Замечательно, теперь надо реализовать клик по середине экрана.
Изучая через SPY++ программу смог найти "сообщение" которое получает программа во время клика по кнопке.
Вот оно: WM_PARENTNOTIFY fwEvent:WM_LBUTTONDOWN xPos: 386 yPos:227.
Нагуглил, что это можно отправить клик по координатам через MAKELPARAM
Вот код, который я пробовал реализовать
Буду рад объяснению решения моей проблемы/ошибки.
Ниже скриншоты окна с кнопкой/отрезок из SPY++.
И пожалуйста, я не просто так пишу в ветку c#, мне сложно будет переделать команды win api на с++ в команды на c#.
Usr32.PostMessage(winCanvas, Usr32.WM_LBUTTONDBLCLK, (IntPtr)1, IntPtr.Zero);
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));
Решение задачи: «Нажать на кнопку в стороннем приложении, используя WinAPI»
textual
Листинг программы
PostMessage(winCanvas, WM_LBUTTONDOWN, (IntPtr)1, MakeDWord(coordButton.X, coordButton.Y)); PostMessage(winCanvas, WM_LBUTTONUP, (IntPtr)1, MakeDWord(coordButton.X, coordButton.Y));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д