|
#1
|
|||
|
|||
GetMenu
Есть древний рабочий пример вызова меню окна
Код:
NPadHandle := FindWindow(nil, PChar('Безымянный — Блокнот')); NPadMenu := GetMenu(NPadHandle); NPadSubMenu := GetSubMenu(NPadMenu, 2); SendMessage(NPadHandle, WM_COMMAND, GetMenuItemId(NPadSubMenu, 1), 0); Код:
NPadHandle := Form1.Handle; NPadMenu:= Popupmenu1.handle; Пробовал вызвать перед выбором Код:
PopupMenu1.Popup(Mouse.CursorPos.X,Mouse.CursorPos.y); Sleep(2000); Код:
HiliteMenuItem(Form1.Handle, PopupMenu1.Handle, 2, MF_BYPOSITION or MF_HILITE); Последний раз редактировалось nixon232, 07.09.2016 в 10:13. |
#2
|
||||
|
||||
Можно и посылкой сообщения вызов сделать, не забыв только попапку к форме прикрутить, в смысле Form1.PopupMenu:= PopupMenu1, а дальше
будто бы мыша правой кнопкой отжалась Код:
sendmessage(Form1.Handle, WM_RBUTTONDOWN, MK_RBUTTON, x + y shl 16); sendmessage(Form1.Handle, WM_RBUTTONUP, MK_RBUTTON, x + y shl 16); Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
nixon232 (07.09.2016)
|
#3
|
|||
|
|||
Сам поппап ввызвать не проблема, хотя способ интересный, может получиться адаптировать под свои нужды, спасибо.. Главный вопрос это выбрать элемент меню без использования клавы/мыши. Такой способ не дает стопроцентный клик, если юзер что-то делает в момент клика и не дай бог попал на попапку, возможен клик в другой пунк. Шанс этого мал, но в моей задаче он критичен.
|
#4
|
||||
|
||||
Эмулируют обычно так: сначало блокируют мышу, затем запоминают координаты/состояние курсора, потом собсно сам процесс, в конце возвращают указалку на место и врубают грызуна, юзер испортить такое не успеет, в "чужом" оконце по-другому, без этого, не обойтись
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#5
|
|||
|
|||
Цитата:
|
#6
|
|||
|
|||
Цитата:
Код:
procedure BlockInput(fBlockIt : boolean); stdcall; external 'USER32.DLL'; |
#7
|
||||
|
||||
У меня BlockInput не работает, просто никакой реакции, можно ещё прятать курсор и не давать его сдвинуть с нулевых координат, но может объясните задачу более конкретно, что требуется, видимо нужно вызвать попапку чужого окна, выбрать и нажать определённый пункт, а может можно глянуть в ресурсах его номер айди и вызвать по нему, вдруг так проще
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#8
|
|||
|
|||
Цитата:
Нужно вызвать меню-поп-апа кликнув на обект, который создан как Hud-element на чужом окне. И в этом меню выбрать там нужный элнмент. блокировка нужна для стабильной работы. смещать мышку не желательно. Про какой Айди идет речь? |
#9
|
|||
|
|||
Цитата:
Код:
SendMessage(h, WM_LBUTTONDOWN, MK_LBUTTON, v.x + v.y shl 16); Sleep(100); SendtMessage(h, WM_LBUTTONUP, MK_LBUTTON, v.x + v.Y shl 16); Последний раз редактировалось nixon232, 10.09.2016 в 10:18. |
#10
|
||||
|
||||
Со "своей" попапкой такое действует
Кстати, вспомнилось: Цитата:
З.Ы. Правда наверное, это верно лишь для эксплорера :-( З.Ы.З.Ы. К сожалению, это так и оказалось на самом деле, в системный реестр записываются лишь сторонние контекстные команды проводника. А если в корень смотреть, любая попапка программы - это отдельное оконце, со своим хендлом, с обработкой "обычного" меню проблем поэтому и нет, ибо существует несколько десятков функций работы с ним, а для PopUp, при всей их схожести, нужно видимо извращаться, как, явного ответа в тырнете почему-то не нашлось Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 11.09.2016 в 10:50. |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
nixon232 (11.09.2016)
|
#11
|
|||
|
|||
У моей попапки класс #32768. Что за он кстати? судя по всему он не "самопальный". Нашел схожую тему 15-го года в гугле, но там решения так и не нашли, автор там не смог найти хедл. Хендл то есть, а толку )
|