Что нового

[Окна, Диалоги] SendMessage в выпадающее меню на Delphi

r35p3ct

Продвинутый
Сообщения
226
Репутация
60
Всем привет!
Решил добить контроллы в программен на Delphi.
Есть кнопка красная, вобщем щас работаю с ней через MouseClick, после этого выпадает меню с такими параметрами:
>>>> Window <<<<
Title:
Class: #32768
Position: 401, 669
Size: 364, 125
Style: 0x94800000
ExStyle: 0x00000189
Handle: 0x000A073A

>>>> Control <<<<
Class:
Instance:
ClassnameNN:
Name:
Advanced (Class):
ID:
Text:
Position:
Size:
ControlClick Coords:
Style:
ExStyle:
Handle: 0x005B068A

>>>> Mouse <<<<
Position: 111, 32
Cursor ID: 0
Color: 0x08246B

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<


>>>> Hidden Text <<<<
дальше кликается так же на пункт.

Щас начал осваивать работу в фоновом режиме.
Код:
#Include <WinAPI.au3>

Global $hWnd974 = ControlGetHandle(WinGetHandle('ПРОГА'), '', '[CLASS:TToolbar97;INSTANCE:4]');Менюшко с +

DllCall('user32.dll', 'int', 'SendMessage', 'hwnd', $hWnd974, 'int', 0x0201, 'int', 1, 'dword', _WinAPI_MakeLong('12', '16'))

Этот код вызывает меню, после чего тормозится выполнение скрипта, пока это меню не закрыть, кликнув мышко по нему или в любое место в проге.
Winspector, ничего полезного не показал(
1. Почему блокируется выполнение скрипта? иначе в принципе можно было бы использовать такой же клик но уже ниже по пункту меню...
2. Как можно выбрать пункт меню, через SendMessage или функции Control ...?


PS Пробывал работать с hwnd этой менюшки отдельно, тоже не вышло, ни ControlClick, ни Focus.
 
Автор
R

r35p3ct

Продвинутый
Сообщения
226
Репутация
60
Первый вопрос решен.
Остался вопрос с выбором пункта. Как выбрать?
Текст можно получить с помощью:
Код:
_GUICtrlMenu_GetItemText

Но как выбрать нужный пункт с помощью _GUICtrlMenu я так и не понял, выделить можно, а кликнуть?

ЗЫ WinMenuSelectItem не работает. Номера ID у пунктов нет.


Добавлено:
Сообщение автоматически объединено:

Работает так:
Код:
$hWnd  = WinGetHandle("[CLASS:#32768]")
$hMenu = _SendMessage($hWnd, '0x01E1', 0, 0)
$aRect = _GUICtrlMenu_GetItemRect($hWnd, $hMenu, 0);0-первый пункт меню
ControlClick('','',$hWnd,'',1,$aRect[0],$aRect[1])

Специальной комманды походу нет.
 
Верх