Форум: "Система";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];
Внизкак сделать хук на 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c