Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.25;
Скачать: CL | DM;

Вниз

как сделать хук на WM_COPYDATA   Найти похожие ветки 

 
Kirill_S ©   (2003-06-05 12:19) [0]

Господа, как сделать хук на WM_COPYDATA чтобы перехватывать добавление, удаление, модификацию иконок приложений в стандартном трее? Может есть у кого примерчик?


 
Spawn ©   (2003-06-05 16:27) [1]

SetWindowsHook + WH_GETMESSAGE + Help ?


 
Kirill_S ©   (2003-06-05 16:43) [2]

да, если можно:)


 
Spawn ©   (2003-06-05 17:17) [3]

А ты уверен, что иконки изменяются при помощи WM_COPYDATA?


 
Kirill_S ©   (2003-06-05 17:25) [4]

Здесь _ http://rsdn.ru/forum/Message.aspx?mid=93662&only=1_ рассказывается как реализовать в своей программе SystemTray, но на второй вопрос там же (как получить список программ свернутых в Tray?) толкового ответа не дано, только: Если нужно просто перехватывать добавление/удаление/модификацию иконок в стандартном трее, а не писать свой, то здесь поможет хук. Ловите WM_COPYDATA, а дальше - аналогично своему трею.

Мне нужно реализовать как раз именно это! , т.е. отловить в трее иконку приложения и спрятать ее любым способом, хоть API, хоть нет, без разницы. Этот вопрос я задавал в других ветках и форумах, но никто не дает нормального ответа:(


 
Spawn ©   (2003-06-05 17:42) [5]

Погоди маленько - если будет время, то завтра, послезавтра чо нить помозгую))


 
Kirill_S ©   (2003-06-05 17:49) [6]

ОК, буду очень признателен, спасибо!


 
Kirill_S ©   (2003-06-09 15:48) [7]

никаких вариантов?


 
Spawn ©   (2003-06-10 10:01) [8]

Сори нету щас времени, чтобы детально все изучать (все таки сдача диплома на носу). Но вот тебе каркас ДЛЛ-ки. Поэксперементируй, может что получится.

library HookWMCopyData;

uses
SysUtils,
Windows,
Dialogs,
Forms,
Messages;


var
HookHandle:THandle;

{$R *.res}

function MsgProc(Code:integer;wParam:word;lParam:longint):longint;stdcall;
var
Msg: PMsg;
begin
Msg := Pointer(lParam);
if code < 0 then
begin
Result:=CallNextHookEx(HookHandle,Code,wParam,lParam);
Exit;
end;
if Msg.message=WM_COPYDATA then
begin
//Делать что то
end;
CallNextHookEx(HookHandle,Code,wParam,lParam);
Result:= 0;
end;

procedure SetHook; export; stdcall;
begin
HookHandle := SetWindowsHookEx(WH_GETMESSAGE, @MsgProc, HInstance, 0);
end;

procedure FreeHook;export;stdcall;
begin
UnhookWindowsHookEx(HookHandle);
end;

exports
SetHook,
FreeHook;
begin

end.

Запускаешь из своей проги:

var
Form1: TForm1;
hDLL: THandle;

implementation

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
var
SetHook: procedure; stdcall;
begin
@SetHook:= nil;
hDLL:=LoadLibrary(PChar("Hook.dll"));
if hDLL > HINSTANCE_ERROR then
begin
@SetHook:=GetProcAddress(Hdll, "SetHook");
if @SetHook<>nil then
SetHook;
end
else
ShowMessage("ошибка подключения DLL !");
end;



procedure TForm1.Button2Click(Sender: TObject);
var
FreeHook: procedure; stdcall;
begin
@FreeHook:=nil;
@FreeHook:=GetProcAddress(Hdll, "FreeHook");
if @FreeHook<>nil then
FreeHook;
FreeLibrary(hDLL);
end;

Если будут вопросы пиши.


 
Kirill_S ©   (2003-06-10 10:57) [9]

>Spawn :

ОК, большое спасибо!, буду разбираться.

ЗЫ: с меня пиво:)



Страницы: 1 вся ветка

Текущий архив: 2003.08.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.033 c
6-81852
KIE
2003-06-19 13:11
2003.08.25
Socket ошибка Дельфи


1-81713
AlexKniga
2003-08-08 19:10
2003.08.25
Сортировка массива с минимальным числом перестановок элементов


1-81670
sewix
2003-08-11 18:57
2003.08.25
TRichEdit Scroll


1-81731
Spawn
2003-08-10 17:58
2003.08.25
---|Ветка была без названия|---


6-81858
Volly
2003-06-18 13:57
2003.08.25
Отключение от Internet-а