![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Lovushka
Nostradamus © (2001-06-15 18:52:00)У меня такая проблема: я сделал ловушку :
SetWindowsHookEx(WH_Shell, ... и тд). Эта ловушка ловит создание и удаление
окон других приложений и посылает сообщение основной программе (ловушка в dll конечно).
Проблема состоит в том что все пойманные ловушкой окна не
появляются в трее как будто у них isLibrary в True стоит. Как этого избежать?
StAL (2001-06-21 13:27:00) [21]Ув. Юрий. Пожалуйста, посмотрите. Этот код я списал с Вашего дилога с Masik, когда Вы разобрались с MsgHandle. Что здесь не так?
Это DLL
library AppH;
uses
SysUtils,
windows,
messages,
Classes;
{$R *.RES}
const
wm_WindCreat = wm_User + 511;
wm_WindDestr = wm_user + 512;
var
ShellHook: HHOOK = 0;
function ShellHookProc(HookCode: Integer; wParam: Longint; lParam: Longint): Longint; stdcall;
begin
Result := 0;
if (HookCode = HSHELL_WINDOWCREATED) or (HookCode = HSHELL_WINDOWDESTROYED) then
begin
if HookCode = HSHELL_WINDOWCREATED then
PostMessage(findwindow("TWinLooker","WinLooker"), wm_WindCreat, WParam, lParam);
if HookCode = HSHELL_WINDOWDESTROYED then
PostMessage(findwindow("TWinLooker","WinLooker"), wm_WindDestr, WParam, lParam);
end
else
Result:=CallNextHookEx(ShellHook, HookCode, wParam, lParam);
end;
function SetHook: boolean; export;
begin
ShellHook := SetWindowsHookEx(WH_shell, @ShellHookProc, hInstance, 0);
Result := ShellHook <> 0
end;
function RemoveHook: boolean; export
begin
Result := UnhookWindowsHookEx(shellhook);
end;
exports SetHook,
RemoveHook;
begin
end.
А это unit
unit Unit1;
interface
uses
SysUtils,WinTypes,WinProcs,Messages,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;
const
wm_WindCreat = wm_User + 511;
wm_WindDestr = wm_user + 512;
DLLName = "AppH.dll";
type
TWinLooker = class(TForm)
wndlist: TListBox;
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
procedure WMWindCreat (Var M : TMessage); message wm_WindCreat;
procedure WMWindDestr (Var M : TMessage); message wm_WindDestr;
public
{ Public declarations }
end;
function SetHook: boolean; external DLLName name "SetHook";
function RemoveHook: boolean; external DLLName name "RemoveHook";
var
WinLooker: TWinLooker;
buff: ARRAY [0..127] OF Char;
WinF:string;
implementation
{$R *.DFM}
procedure TWinLooker.WMWindCreat(var M: TMessage);
begin
GetWindowText(m.WParam, buff, sizeof(buff));
wndlist.items.Add("Запущено приложение: ""+strpas(buff)+"" "+timetostr(time)+" "+ datetostr(date));
end;
procedure TWinLooker.WMWindDestr(var M: TMessage);
begin
GetWindowText(m.WParam, buff, sizeof(buff));
wndlist.items.Add("Закрыто приложение : ""+strpas(buff)+"" "+timetostr(time)+" "+ datetostr(date));
end;
procedure TWinLooker.FormDestroy(Sender: TObject);
begin
removehook;
wndlist.items.SaveToFile(winf);
end;
procedure TWinLooker.FormCreate(Sender: TObject);
begin
sethook;
winf:=extractfilepath(application.exename)+"data\"+datetostr(date);
if fileexists(winf) then
WndList.Items.LoadFromFile(winf);
end;
end.
Помогите пожалуйста!
Юрий Зотов (2001-06-19 21:26:00) [22]To Nostradamus.
Письмо Ваше вчера получил. Причину ошибки предполагаю, но ее надо проверять. Но Вы не приложили код DLL, а что же я могу сказать, не видя кода?
Пытался отправить Вам этот же ответ в письме, но почему-то оно не уходит. Вероятно, у меня какие-то проблемы с почтой, буду разбираться. Но на прием она, кажется, все же работает - так что, если хотите, шлите код, попробуем разобраться. А ответить смогу здесь, на форуме.
StAL (2001-06-18 14:30:00) [23]У меня точно такая проблема. Я ТРИ раза вопрос задавал. Никто не отвечает. Попробуй написать Юрию Зотову. (Я тоже ему писал). Он знает. Если узнаешь пожалуйста напиши.