LINUX.ORG.RU

Python, winapi, SendMessage


0

1

Привет всем, возникла проблема с использование функции SendMessage, а если конкретней то с последним параметром lparam. Задача тривиальная выбираем окно и в окне эмулируем клик мышой в нужной точке. вот код:

whndl = win32gui.FindWindowEx(0, 0, None, 'test.jpg - Paint')
pycwnd = win32ui.CreateWindowFromHandle(whndl)
lparam = 43909460
pycwnd.SendMessage(win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, lparam )
pycwnd.SendMessage(win32con.WM_LBUTTONUP, 0, lparam)
pycwnd.ReleaseCapture
pycwnd.UpdateWindow()
pycwnd.SetCapture()
в документации написано так: The lParam parameter of a client area mouse message indicates the position of the cursor hot spot. The low-order word indicates the x-coordinate of the hot spot, and the high-order word indicates the y-coordinate. The coordinates are specified in client coordinates. In the client coordinate system, all points on the screen are specified relative to the coordinates (0,0) of the upper-left corner of the client area.

в примере выше я сам выбрал точку в окне и посчитал lparam. однако не работает. И загвоздка именно в этом параметре потому что если ставлю 0. Окно ведет себя так как будто нажимаю левую кнопку, т.е. сообщение до окна доходит. В си есть макрос MAKELPARAM который преобразует координаты в нужное 4 байтовое число, на питоне не нашел такого. Подскажите как решить проблему. Заранее спасибо.


Ответ на: комментарий от Deleted

Вообщем пошел другим путем, на с++ написал простенькую консольную апликуху которая на входе получает 2 числа - координаты, выдает значение lparam. Подставляю эти значения, нет эфекта, кнопка нажимается но с координатами проблема, может я что то концептуально упустил ?

birst
() автор топика
Ответ на: комментарий от invy

вообще проблема как уже выяснилось не в значении lparam, вопрос в другом, почему окно отрабатывает сообщение таким образом, а именно нажатие мышки делает но не в нужных координатах.

birst
() автор топика
Ответ на: комментарий от invy

правильно,

lparam = 44564830
pycwnd.PostMessage(win32con.WM_MOUSEMOVE,0,lparam);
pycwnd.PostMessage(win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, lparam )
pycwnd.PostMessage(win32con.WM_LBUTTONUP, 0, lparam)

работает, но как то странно :) т.е. открытое окно в котором хочу нажать кнопку оно не свернуто просто сзади, запускаю скрипт, вроде как проходит,но эффект как будто кнопка сначала выбирается, при повторном запуске этого же скрипта кнопка нажимается. Что это такое ?

birst
() автор топика
Ответ на: комментарий от birst

Полагаю - это особенность работы венды. Попробуй ткнуть на кнопку неактивного окна мышом сам. Первый клик активирует оно, второй нажмёт кнопку.

invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 2)
Ответ на: комментарий от birst

Слушай, если проблема была бы в питоне, или просто геометрическая, то возможно тут и помогли бы. Но твои вопросы — откровенный оффтоп. Снесут и забанят как проснутся.

anonymous
()

валил бы ты на винфак со своим винапи

EugeneBas ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.