1 (изменено: Flasher, 2017-01-31 16:45:54)

Тема: AHK: PostMessage послать стрелку вниз

Доброй ночи. Подскажите пожалуйста что не так? Пытаюсь послать в окно стрелку вниз. Использую программу Window Detective если что.

Послать кнопку вниз не получается:


processName := "some.exe"    
WinGet, somehwnd,id,ahk_exe %processName% ; Получаю hwnd по имени процесса
PostMessage, 0x100, VK_DOWN, , ahk_id %somehwnd%
PostMessage, 0x101, VK_DOWN, , ahk_id %somehwnd%

Не знаю нужно или нет, но в Window Detective вот что показывает при нажатии на стрелки вниз и ее отпускании:

WM_KEYDOWN (0x100)
    virtual key = VK_DOWN
    state = 0x00000028
WM_KEYUP (0x101)
    virtual key = VK_DOWN
    state = 0x00000028

P.S. Если что я могу с помощью postmessage нажать кнопку в выпадющем сверху меню.

2 (изменено: svoboden, 2017-03-11 04:20:33)

Re: AHK: PostMessage послать стрелку вниз

Вместо VK_DOWN, , надо 0x28, 0,

3

Re: AHK: PostMessage послать стрелку вниз

F2::
processName := "some.exe"    
WinGet, somehwnd,id,ahk_exe %processName%
PostMessage, 0x100, 0x28, 0, ahk_id %somehwnd%
PostMessage, 0x101, 0x28, 0, ahk_id %somehwnd%
return

Не работает.

4

Re: AHK: PostMessage послать стрелку вниз

PostMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]

5

Re: AHK: PostMessage послать стрелку вниз

Malcev пишет:

PostMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]

Msg у меня: 0x100
wParam и IParam у меня: 0x28 и 0
Получается что хендл окна это как wintitle?
Если да то что писать в контрол?
Я пробовал оставлять этот параметр пустым:

PostMessage, 0x101, 0x28, 0,, ahk_id %somehwnd%

6

Re: AHK: PostMessage послать стрелку вниз

В справке написано:

Control

    If this parameter is blank or omitted, the message will be sent directly to the target window rather than one of its controls. Otherwise, this parameter can be either ClassNN (the classname and instance number of the control) or the control's text, both of which can be determined via Window Spy. When using text, the matching behavior is determined by SetTitleMatchMode.

    To operate upon a control's HWND (window handle), leave the Control parameter blank and specify ahk_id %ControlHwnd% for the WinTitle parameter (this also works on hidden controls even when DetectHiddenWindows is Off). The HWND of a control is typically retrieved via ControlGet Hwnd, MouseGetPos, or DllCall.

Соответственно вписывайте название контрола, которому отправляете нажатие.

7 (изменено: svoboden, 2017-01-31 22:16:06)

Re: AHK: PostMessage послать стрелку вниз

Если сложно найти контрол в PostMessage, тогда ControlSend.

8

Re: AHK: PostMessage послать стрелку вниз

svoboden, а в чем по-вашему разница в алгоритме нахождения контрола для PostMessage и для ControlSend?

9 (изменено: svoboden, 2017-04-21 01:04:10)

Re: AHK: PostMessage послать стрелку вниз

Malcev, если человеку сложно найти контрол для PostMessage, в ControlSend, можно без него обойтись. А в чем разница, так не знаю, может, нет никакой разницы.

10

Re: AHK: PostMessage послать стрелку вниз

Точно также ищутся через Window Spy.
Если в ControlSend контрол не писать, то он отправит в самый верхний.
Совсем необязательно, что именно он нужен.

11

Re: AHK: PostMessage послать стрелку вниз

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

Во втором абзаце насколько я понял написано что если использовать хэндл окна, то контрол можно опустить.
Сделал так, но не работает:

F2::
processName := "some.exe"    
WinGet, somehwnd,id,ahk_exe %processName%
PostMessage, 0x100, 0x28, 0, ,ahk_id %somehwnd%
PostMessage, 0x101, 0x28, 0, ,ahk_id %somehwnd%
return

Так же тоже не работает:

PostMessage, 0x100, 0x28, 0, ahk_class TfmMain, wintitle
PostMessage, 0x101, 0x28, 0, ahk_class TfmMain, wintitle

12

Re: AHK: PostMessage послать стрелку вниз

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

Там написано, что если хотите воспользоваться хендлом контрола, а не хендлом окна.
ahk_class TfmMain - это не название контрола.

13 (изменено: Dworkin, 2017-02-01 01:52:39)

Re: AHK: PostMessage послать стрелку вниз

Не пойму

Malcev пишет:

если хотите воспользоваться хендлом контрола, а не хендлом окна.

control's HWND (window handle)

Не пойму...этот код работает:

PostMessage, 0x111, 15,,, ahk_id %somehwnd%


15 - это контрол ид.
Этот код нажимает на кнопку в выпадающем меню окна. Я здесь указываю как я понял только хэндл окна, так почему коды выше не работают?

В программе Windows Detective главное окно указано как TfmMain и хэндл там такой же как я получаю в %somehwnd%

Может я не правильно посылаю кнопку?

14

Re: AHK: PostMessage послать стрелку вниз

Вот пример м блокнотом:

f1::
PostMessage, 0x100, 0x28, 0, Edit1, A
PostMessage, 0x101, 0x28, 0, Edit1, A
return

f2::
ControlGet, OutputVar, Hwnd,, Edit1, A
PostMessage, 0x100, 0x28, 0,, ahk_id %OutputVar%
PostMessage, 0x101, 0x28, 0,, ahk_id %OutputVar%
return

15 (изменено: svoboden, 2017-06-02 05:25:12)

Re: AHK: PostMessage послать стрелку вниз

Так можно:

processName := "some.exe"    
WinGet, somehwnd, ControlListHwnd, ahk_exe %processName%
PostMessage, 0x100, 0x28,,, ahk_id %somehwnd%
PostMessage, 0x101, 0x28,,, ahk_id %somehwnd%

Или вместо "WinGet, somehwnd, ControlListHwnd, ahk_exe %processName%" - можно
"ControlGet, somehwnd, Hwnd,,, ahk_exe %processName%".