|
#1
|
|||
|
|||
OnSelectItemId?
Находим Список элеметов и CommandID От них
Код:
... SetCursorPos(Pt.X,Pt.Y); Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LeftDOWN, 0, 0, 0, 0); { Имитируем отпускание левой кнопки мыши } Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); Sleep(500); wndHwd:=WindowFromPoint(Mouse.CursorPos); // pt:=ScreenToClient(Pt); hMain := SendMessage(WindowFromPoint(Mouse.CursorPos), $01E1, 0, 0); if IsMenu(hMain) then begin iItem := 0; repeat GetMenuString(hMain, iItem, @ItemString, 99, MF_BYPOSITION); inc(iItem); until (ItemString = 'File')or(iItem>GetMenuItemCount(hMain)); if ItemString = 'File' then begin cbbElem.Items.Clear; hSub := GetSubMenu(hMain, iItem-1); iItem := 0; repeat GetMenuString(hSub, iItem, @ItemString, 99, MF_BYPOSITION); // ShowMessage(ItemString); if ItemString<>'' then cbbElem.Items.AddObject(ItemString,TObject(GetMenuItemID(hSub, iItem))); ... until (iItem>GetMenuItemCount(hSub)); SelectItemID := GetMenuItemID(hSub, iItem-1); // ShowMessage(Items); Sleep(200); SendMessage(wndHwd, WM_CLOSE, 0,0); ... знаем, что ждет Эту комманду. Если предварительно вызвать попап, то без проблем можем вызвать событие, которое вызывается по клику Код:
PostMessage(CmdWindow, WM_COMMAND, SelectItemID , 0); ppWnd:= FindWindow(PWideChar('#32768'), nil); if ppWnd<> 0 then PostMessage(ppWnd, WM_CLOSE, 0, 0); Последний раз редактировалось nixon232, 19.12.2017 в 08:50. |
#2
|
||||
|
||||
Это не КоммандАйДи, это АйДи пункта менюшки что лежит в ресурсах, можно напр. поменять текст итема, рисунко туда добавить, а событие на клик сохраниться, для отлова нужно вызывать GetMenu()>GetSubMenu()=GetMenuItemID(), но это только номер, без инициатора он бесполезен, проще тогда эмульнуть жим на "горячку", если она на нужном пункте висит, а если что-то просто грохнуть необходимо, то можно послать главному окну вместо wm_close wm_quit, вылетит без вопросов
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
До элемента, то я добрался, в коде выше. GetMenu в моем случае бесполезно, его заменяет SendMessage. Но плохо что инициацию нужно сделать Кликом. Способа отловить онную нет? Теория, что Id Менюшки хранится в ресурсах интересна, но что-то ничего креме манифеса и иконок не нашел. Может не тем смотрел? ResHacker
Upd: После этого открыл дельфийский ехе и ужаснулся... Чего там только нет, чуть ли не исходный код в открытом виде. Можно ли как-то заставить ИДЕ не писать весь этот мусор? может статья какая-то ессть хорошая на тему? Последний раз редактировалось nixon232, 19.12.2017 в 13:21. |
#4
|
||||
|
||||
Попапка фактически, это отдельное от аплики окошко, чтоб понятнее было - вот как зажечь на люстре только три лампочки, так для этого нужно на стене клацнуть правую клавишу выключателя, оторвав пятую точку от дивана, и по-другому не получится, вот попапка тот самый рубильник, а ItemID всего лишь инструкция какую клавишу переключать, чтоб светло стало
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#5
|
|||
|
|||
Это понятно, но пока ищу варианты. Например, есть событие WM_INITMENUPOPUP, Но что-то мне подсказиват, что ничего кроме HMenu оно мне не даст плюс надо цеплять глоб. хук
|