Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   WinAPI | Изменение контекстного меню чужого процесса (http://forum.oszone.net/showthread.php?t=52636)

megad 12-08-2005 13:22 347657

WinAPI | Изменение контекстного меню чужого процесса
 
Подскажите пожалуйста, как используя WinAPI,
решить такой вопрос:
у окна зная его хендл и все что нужно (id процесса и прочие приблуды), перехватив открытие контекстного меню (WM_CONTEXTMENU, WinProc перегружена на мою), ИЗМЕНИТЬ меню которое хочет показать прога, добавив пару пунктов и вывести его на экран и потом получить юзерский выбор пункта.
Переслать дальше проге выбор - знаю как. Вывести меню и получить выбор - известно.
Единственная загвозка -КАК выцепить хендл меню, уже сформированного прогой, или заставить ее как то сформировать меню и получить его хендл.

SergeCpp 15-08-2005 07:30 348146

MSDN...

XCodeR 15-08-2005 23:48 348317

ответ прямо скажем не ахти...
может сделаем вообще автоответчик на форуме:
"if(!MSDN)
RTFM
if(!RTFM)
exit();
"
=)

SergeCpp 16-08-2005 07:36 348359

Они же совсем читать разучатся!

А на нашем горбу выезжать хотят!

Халявщики!

vadimiron 16-08-2005 16:01 348498

Цитата:

Они же совсем читать разучатся!

А на нашем горбу выезжать хотят!

Халявщики!
SergeCpp
А зачем вообще создан форум?? Если не можете ничего ответить, то лучше молчать, а не флеймить попросту


XCodeR 16-08-2005 22:50 348567

SergeCpp
Цитата:

не все же рождаются мегаХацкерами, мне вот к примеру искать в MSDN'e на модеме оч. не сподручно. другое дело, что есть масса мануалов,но тут согласен с vadimiron

SergeCpp 17-08-2005 07:40 348612

Извините за "наезд" — ничего личного

P.S. А MSDN имеется и на CD...

P.P.S. Всё-таки, в MSDN — более точная информация, чем...

DillerInc 17-08-2005 16:05 348721

Полностью согласен с 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;

...в общем я предложил,а ты сам смотри - подходит это тебе или нет.

XCodeR 17-08-2005 21:42 348778

впринципе, лучше вынести функцию MyHookProc xв отдельный DLL... имхо.....


Время: 18:40.

Время: 18:40.
© OSzone.net 2001-