1 (изменено: fastlastname, 2016-07-23 11:27:32)

Тема: AHK: PostMessage

Пытаюсь отослать нажатие правой кнопки мыши в определенные координаты неактивного окна.


PostMessage, 0x204, 0x00000002, 0x00540134,, WinTitle
PostMessage, 0x205, 0x00000000, 0x00540134,, WinTitle

Помогите пожалуйста не пойму в чем проблема.

2

Re: AHK: PostMessage

wParam должен быть 0. И, видимо, контрол нужно указать. Во всяком случае для окна Блокнота только с контролом работает.


F11::
    PostMessage, 0x204, 0, 0x00540134, Edit1, Безымянный
    PostMessage, 0x205, 0, 0x00540134, Edit1, Безымянный
    Return

3

Re: AHK: PostMessage

YMP
Спасибо за ответ через некоторое время попробую отпишусь что да как получилось.

4 (изменено: fastlastname, 2016-07-21 18:30:30)

Re: AHK: PostMessage

YMP
В блокноте работает отлично а вот в в других программах не работает может ли это быть из-за Control ?.
(WinTitle точно ввожу верно).

5 (изменено: fastlastname, 2016-07-21 18:30:23)

Re: AHK: PostMessage

YMP
Вот чтобы наверняка добавил WinGet.


WinGet, S, List, ahk_exe skype.exe
F11::
PostMessage, 0x204, 0, 0x00540134, Edit1, ahk_id %S%
PostMessage, 0x205, 0, 0x00540134, Edit1, ahk_id %S%
Return

6

Re: AHK: PostMessage

Как показывает "Winspector", на момент клика "wParam" отображает нажатой соответствующую кнопку мыши. Для ЛКМ = 0x0001, ПКМ = 0x0002, а вот для отпускания уже 0. Следующие функции посылают ЛКМ и ПКМ соответственно, контролу, переданному им в параметре "varControl", в координатах "new_x" и "new_y". Последняя функция возвращает хендл контрола по координатам:



; ВАЖНО !!!
CoordMode, Mouse, Screen

SendLcilk(new_x, new_y, varControl) {
	WinGetPos, hw_x, hw_y,,, ahk_id %varControl%
	l_param := % (new_x - hw_x) + ((new_y - hw_y) * 65536)
	SendMessage, 0x0201, 0x0001, %l_param%, , ahk_id %varControl%
	sleep 50
	SendMessage, 0x0202, 0x0000, %l_param%, , ahk_id %varControl%
}
SendRcilk(new_x, new_y, varControl) {
	WinGetPos, hw_x, hw_y,,, ahk_id %varControl%
	l_param := % (new_x - hw_x) + ((new_y - hw_y) * 65536)
	SendMessage, 0x0204, 0x0002, %l_param%, , ahk_id %varControl%
	sleep 50
	SendMessage, 0x0205, 0x0000, %l_param%, , ahk_id %varControl%
}
Hget(x, y) {
	return % DllCall("WindowFromPoint", "int64", x & 0x00000000FFFFFFFF | y<<32)
}

; например:
x := 100
y := 100
SendRcilk(x, y, Hget(x, y))

7

Re: AHK: PostMessage

fastlastname, оформите код, как положено.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: PostMessage

fastlastname пишет:

В блокноте работает отлично а вот в в других программах не работает может ли это быть из-за Control ?
(WinTitle точно ввожу верно)

Ну, я уже писал про контрол. Можно попробовать его определить через Window Spy. Или использовать ControlClick вместо PostMessage. Она посылает щелчки в верхний контрол окна, если контрол не указан. Возможно, это сработает.

KusochekDobra пишет:

Как показывает "Winspector", на момент клика "wParam" отображает нажатой соответствующую кнопку мыши. Для ЛКМ = 0x0001, ПКМ = 0x0002, а вот для отпускания уже 0.

Не понятно только, зачем это нужно, если и без этого работает. Я понимаю так, что этот параметр можно использовать, чтобы послать комбинацию щелчка с нажатым шифтом, контролом или другой кнопкой мыши.

9

Re: AHK: PostMessage

YMP
Да, действительно непонятно, зачем обычные процедуры дополнены такими ненужными на наш взгляд включениями. Учитывая кстати, что и в комбинации с клавишами-модификаторами это работает не везде. Но они есть. А раз так, то, вероятно и не будет ошибкой, если свои методы дополнить столь несущественными тонкостями.

10

Re: AHK: PostMessage

Господа, что-то вы совсем расслабились. До внесения исправлений ответы в теме запрещены.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: PostMessage

KusochekDobra
Просто на рабочем столе или например в блокноте работает отлично но вот в тех программах которые мне нужны не работает одна из которых Skype

12 (изменено: fastlastname, 2016-07-21 18:39:13)

Re: AHK: PostMessage

Всем спасибо я решил снова попробовать сделать всё через controlclick (раньше видимо что-то делал не так) и теперь всё работает как задумано.
P.S. Попробовал опять запустить скрипт controlclick перестал работать.
P.S.S. Поставил больше задержку после controlclick и снова всё работает.

13

Re: AHK: PostMessage

Вы хотя бы пробовали предложенные методы? Всё что в них требуется для теста, это скопировать в скрипт и изменить "х" и "у" в примере на Ваши координаты.

14 (изменено: fastlastname, 2016-07-21 17:28:07)

Re: AHK: PostMessage

KusochekDobra
Конечно попробовал но почему не работает кроме координат я там нечего не менял (Попробовал на skype)

15

Re: AHK: PostMessage

А зачем в скайп посылать клики?
У него API есть.

16

Re: AHK: PostMessage

KusochekDobra пишет:

Но они есть. А раз так, то, вероятно и не будет ошибкой, если свои методы дополнить столь несущественными тонкостями.

Кстати, одна из тонкостей, из описания WM_RBUTTONDOWN:

The WM_RBUTTONDOWN message is posted

Posted, а не sent, т.е. предполагается использование PostMessage.

17

Re: AHK: PostMessage

fastlastname, теперь верните точки в свои сообщения.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

18

Re: AHK: PostMessage

fastlastname, сначала выполняем требования модератора, потом продолжаем пользоваться форумом.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19 (изменено: fastlastname, 2016-07-21 18:38:29)

Re: AHK: PostMessage

teadrinker
Понимаю насчет кода это нужно а вот насчет точек их ставят не все и не всегда что-то я не вижу ваших сообщений к другим пользователям.

20 (изменено: fastlastname, 2016-07-21 18:40:46)

Re: AHK: PostMessage

teadrinker
Я только что выполнил твои "требования" и ты после этого написал данное сообщение и удалил моё МОЛОДЕЦ!! так держать.
P.S. Не было точек только в одном месте да надобно удалить этот пост не соответствует правилам точек слишком мало

21

Re: AHK: PostMessage

А точка где?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

22

Re: AHK: PostMessage

YMP
Вот как. Благодарю за уточнение. Когда разбирался с этим вопросом, то было написано с использованием PostMessage, но поскольку предполагается работа скрипта на временами сильно загруженной машине, то переписал в текущий вид. У меня всё работает без нареканий.