Главная страница
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.022 c
7-81985
UR7IUL
2003-06-08 02:52
2003.08.25
Опрос параметров железа под Win9X/2K/XP на аппаратном уровне


14-81880
Man
2003-08-07 17:57
2003.08.25
скоспилить приложение только с несколькими пакетами


1-81831
dataMaster
2003-08-13 12:58
2003.08.25
OpenDialog и его размеры


4-82020
Igor__
2003-06-24 18:58
2003.08.25
SHFileOperation


3-81552
grand_kvirtu
2003-07-30 16:21
2003.08.25
Как по клику в DBGrid получить индекс выделеной строки