Просмотр полной версии : Ловим контекстное меню и отправляем в него клик.
Добрый день.🧐
Подскажите пожалуйста как я могу отравить клик в контекстное меню чужой программы при появлении его .
Или
Получить true/вызвать cout когда оно появилось .
🤛ПРИМЕР ВЫЗОВА🤜
1. Я нажимаю правую кнопочку или Shift + F10.
2. Появляется контекстное меню где разные кнопочки . Пример контекстного меню:
https://forum.antichat.xyz/attachments/27908756/
Вопрос: Каким образом я могу отследитьпоявлениеэтого контекстного меню или нажать к примеру там любой клавишу .
👏👏👏Спасибо за внимание. 👏👏👏👏
Правую кнопку пробовал нажимать?
Receiver
24.12.2021, 15:44
Попробуй https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getforegroundwindow (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG 93cy93aW4zMi9hcGkvd2ludXNlci9uZi13aW51c2VyLWdldGZv cmVncm91bmR3aW5kb3c)
Правую кнопку пробовал нажимать?
Ты не понял суть моего вопроса .
Попробуй https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getforegroundwindow (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG 93cy93aW4zMi9hcGkvd2ludXNlci9uZi13aW51c2VyLWdldGZv cmVncm91bmR3aW5kb3c)
Я думаю это сработает но это не стабильный вариант ( может пойматся что-то другое ) .
manukhov
05.01.2022, 21:21
Так у контестного меню нет хэндла, для винды это не отдельное окно.
Так у контестного меню нет хэндла, для винды это не отдельное окно.
Спасибо за инфу , а как тогда отправить в контекстное меню клик при его появлении ?
Тема изменена . 🤓
Каким образом я могу отследитьпоявлениеэтого контекстного меню
под виндой - хукнуть TrackPopupMenu (https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-trackpopupmenu (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG 93cy93aW4zMi9hcGkvd2ludXNlci9uZi13aW51c2VyLXRyYWNr cG9wdXBtZW51))
Я вообще не понимаю зачем тебе это, ерундой занимаешься. Если хочешь выполнить какой-то пункт из контекстного меню, так и скажи.
Нельзя отследить появление контекстного меню, в этом просто нет смысла. С контекстным меню должен взаимодействовать пользователь, а не программа.
Да мне нужно выбрать/выполнить пунк который находится в этом меню чужой программы . Программа для работы и поэтому не могу выкладывать конкретику . Просто делаю софт для себя , что-бы меньше работать на удаленке ) . Выбрать я могу пункт через эмуляцию клавиш - альт + ф10 вызываем конктекст меню , page Down для того что-бы выбрать первый вариант в этом меню и в конце enter но это не дает гарантию что контектст меню не залагает и просто не появится ( такое уже было ) . Так как у меня программа выполняет действия выбора по это методу выше и это занимает 40 мс. и иногда повторно надо выполнять код а это иногда путает (99 успех , 1 мимо ) .
под виндой - хукнуть TrackPopupMenu (https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-trackpopupmenu (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG 93cy93aW4zMi9hcGkvd2ludXNlci9uZi13aW51c2VyLXRyYWNr cG9wdXBtZW51))
Если я правильно прочитал то эта функция работает из моей программы и вызывает именно меню от имени мое программы . А мне нужно работать с чужой . Но я еще раз позже прочитаю возможно беглый осмотр не был успешным 🙂 , если что отпишу .
под виндой - хукнуть TrackPopupMenu (https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-trackpopupmenu (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG 93cy93aW4zMi9hcGkvd2ludXNlci9uZi13aW51c2VyLXRyYWNr cG9wdXBtZW51))
Не подходит, или я не так что-то делал. HMENU - не удалось получить .
UP
Твоя программа это DLL или EXE?
Твоя программа это DLL или EXE?
EXE
Я не понимаю почему ты за 2 месяца не разобрался еще?
Одним из вариантов получить хендл контексного меню ты можешь через https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindow (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG 93cy93aW4zMi9hcGkvd2ludXNlci9uZi13aW51c2VyLWdldHdp bmRvdw) с параметром GW_ENABLEDPOPUP. Получить hWnd для функции выше ты можешь через https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindowa (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG 93cy93aW4zMi9hcGkvd2ludXNlci9uZi13aW51c2VyLWZpbmR3 aW5kb3dh)
Отправлять выбор меню как один из вариантов ты можешь через https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendmessage (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG 93cy93aW4zMi9hcGkvd2ludXNlci9uZi13aW51c2VyLXNlbmRt ZXNzYWdl) (с сообщениями конкретко какие взаимодействуют с контекстным окном разберись уж сам)
Каким образом я могу отследитьпоявлениеэтого контекстного меню
Вот тебе код каким образом
C++:
[CODE]
int
main
(
)
{
HWND hOpera
=
FindWindowA
(
NULL
,
"WM_INITMENUPOPUP message (Winuser.h) - Win32 apps | Microsoft Docs – Opera"
)
;
if
(
hOpera
==
NULL
)
return
1
;
std
::
cout
Если его нет, то будет 0
https://forum.antichat.xyz/attachments/27968900/
Если есть, то хеднл. Делай с ним что хочешь
https://forum.antichat.xyz/attachments/27968900/
C dll конечно было бы попроще, но и тут тоже можно справиться
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot