Показать полную графическую версию : WinAPI | Изменение контекстного меню чужого процесса
Подскажите пожалуйста, как используя WinAPI,
решить такой вопрос:
у окна зная его хендл и все что нужно (id процесса и прочие приблуды), перехватив открытие контекстного меню (WM_CONTEXTMENU, WinProc перегружена на мою), ИЗМЕНИТЬ меню которое хочет показать прога, добавив пару пунктов и вывести его на экран и потом получить юзерский выбор пункта.
Переслать дальше проге выбор - знаю как. Вывести меню и получить выбор - известно.
Единственная загвозка -КАК выцепить хендл меню, уже сформированного прогой, или заставить ее как то сформировать меню и получить его хендл.
SergeCpp
15-08-2005, 07:30
MSDN...
ответ прямо скажем не ахти...
может сделаем вообще автоответчик на форуме:
"if(!MSDN)
RTFM
if(!RTFM)
exit();
"
=)
SergeCpp
16-08-2005, 07:36
Они же совсем читать разучатся!
А на нашем горбу выезжать хотят!
Халявщики!
vadimiron
16-08-2005, 16:01
Они же совсем читать разучатся!
А на нашем горбу выезжать хотят!
Халявщики!
SergeCpp
А зачем вообще создан форум?? Если не можете ничего ответить, то лучше молчать, а не флеймить попросту
SergeCpp
не все же рождаются мегаХацкерами, мне вот к примеру искать в MSDN'e на модеме оч. не сподручно. другое дело, что есть масса мануалов,но тут согласен с vadimiron
SergeCpp
17-08-2005, 07:40
Извините за "наезд" — ничего личного
P.S. А MSDN имеется и на CD...
P.P.S. Всё-таки, в MSDN — более точная информация, чем...
DillerInc
17-08-2005, 16:05
Полностью согласен с vadimiron'ом
А теперь по делу (если уже,правда,не поздно).
megad
А почему бы тебе не использовать hook следующим образом:
var
SysHook : HHook;
Wnd : HWND;
function MyHookProc(Code : Integer; wParam : WORD; lParam : LongInt) : LongInt; stdcall; // Основная функция обработки ловушки
begin
CallNextHookEx(SysHook, Code, wParam, lParam); // Передаём сообщение другим ловушкам в системе
{ Начинаем поверку поступившего сообщения }
if Code = WM_CONTEXTMENU then
begin
Wnd := TMsg(Pointer(lParam)^).hwnd;
{ Тут мы получаем идентификатор окна,сгенерировавшего сообщение - что тебе походу и надо,а дальше
могут следовать определённые проверки,и в конце-концов мы должны быть в состоянии изменять окно... }
SendMessage(Wnd, msg, wParam, lParam);
InvalidateRect(Wnd, nil, True); // ну, и перерисовать окно
end;
end; // MyHookProc
begin
{ Устанавливаем ловушку }
SysHook := SetWindowsHookEx(WH_GETMESSAGE, // ловим все сообщения
@MyHookProc, // указатель на нашу функцию-обработчик
HInstance, // Указатель на приложение
0 // Идентификатор потока (тут используется текущий)
);
end;
...в общем я предложил,а ты сам смотри - подходит это тебе или нет.
впринципе, лучше вынести функцию MyHookProc xв отдельный DLL... имхо.....
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.