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

Вниз

Можно ли отловить запуски приложений?   Найти похожие ветки 

 
sosv   (2003-06-02 14:33) [0]

Если можно, то как?


 
DVM ©   (2003-06-02 16:01) [1]

Те, которые создают окна, можно отловить хуком на WH_SHELL. Причем тут даже dll не обязательна.


 
sosv   (2003-06-02 16:38) [2]

DLL необязательна начиная с Win2000. Я правильно понял?


 
Morfein ©   (2003-06-02 17:42) [3]

DLL обязательна начиная с Win2000


 
DVM ©   (2003-06-02 18:16) [4]


> Morfein © (02.06.03 17:42)
> DLL обязательна начиная с Win2000


DLL не нужен! Я устал спорить со всеми!

Можно "сказать" системе, что данная программа - оболочка и ей будут пересылаться персональные сообщения.
Как-то так. Кому надо - пришлю полностью рабочий код БЕЗ DLL

const

RSH_DEREGISTER = 0;
RSH_REGISTER = 1;
RSH_REGISTER_PROGMAN = 2;
RSH_REGISTER_TASKMAN = 3;

HSHELL_ACTIVATESHELLWINDOW = 3;
HSHELL_WINDOWCREATED = 1;
HSHELL_WINDOWDESTROYED = 2;
HSHELL_WINDOWACTIVATED = 4;
HSHELL_GETMINRECT = 5;
HSHELL_REDRAW = 6;
HSHELL_TASKMAN = 7;
HSHELL_LANGUAGE = 8;

var WM_SHELLHOOK:integer;

procedure RegisterShellHook(Wnd:hWnd;n:dword); stdcall; external "shell32.dll" index 181;

begin

...

WM_SHELLHOOK := RegisterWindowMessage("SHELLHOOK");
if WM_SHELLHOOK<>0 then
begin
RegisterShellHook(0, 1);
if not IsWinNT then
RegisterShellHook(hMainWnd, RSH_REGISTER)
else
RegisterShellHook(hMainWnd, RSH_REGISTER_TASKMAN);
end;
...

end;
//-------------------------------
ну и в оконной процедуре:

function MainWndProc(wnd:HWND; Msg:Integer; wParam:wParam; lParam:lParam):integer; stdcall;

begin
//------------------------------------------------------------------------------
if Msg = WM_SHELLHOOK then
begin
case wParam of
//Создано новое окно верхнего уровня
HSHELL_WINDOWCREATED: ;
//Окно уничтожено
HSHELL_WINDOWDESTROYED: ;
//Окно активируется
HSHELL_WINDOWACTIVATED: ;
//Изменился текст заголовока или иконка окна
HSHELL_REDRAW: ;
end;
end;


 
Morfein ©   (2003-06-02 18:30) [5]

DVM, ты забыл свой предыдущий, пока писал следующий? Там ясно написано Те, которые создают окна, можно отловить хуком на WH_SHELL. Вот на это я и сказал, что ДЛЛ для этого обязательна, начиная с Windows 2000. А потом уже ты упомянул RegisterWindowMessage и прочее. А с этим я и не спорю.


 
DVM ©   (2003-06-02 20:50) [6]


> Morfein ©

да...эта...что я там написал WH_SHELL я действительно запамятовал.

Хотя...В shell32.dll скорее всего и ставится именно этот хук (WH_SHELL) + некоторые другие.


 
Digitman ©   (2003-06-03 11:46) [7]


> DVM



> //Создано новое окно верхнего уровня
> HSHELL_WINDOWCREATED: ;


а что, разве создание окна верхнего уровня есть факт старта нового процесса ? разве уже стартованный процесс не имеет права создавать произвольное кол-во окон верхнего уровня ?

конечно, можно в хук-процедуре анализировать, не принадлежит ли вновь создаваемое окно уже работающему процессу, но это немало осложняет логику

imho, корректней было бы внедрение во все уже работающие процессы ф-ции для перехвата API-вызова CreateProcess[Ex].
как это сделать - уже вопрос техники : то ли это будет установка глоб.хука, то ли старт внедренного трэда ... зависит от платформы и от изобретательности автора)

глобальный перехват вызова CreateProcess[Ex] даст возможность отслеживать старт любых процессов, будь то GUI, консоль или сервис


 
DVM ©   (2003-06-03 12:01) [8]


> Digitman ©

Да конечно, все это правильно, но я думаю автор вопроса хотел ловить именно окна.

> даст возможность отслеживать старт любых процессов, будь
> то GUI, консоль или сервис

код выше консольные приложения тоже отлавливает.



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

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

Наверх




Память: 0.49 MB
Время: 0.024 c
1-10194
Olga
2003-07-23 10:17
2003.08.04
Совместимость Delphi с Borland Pascal 7.0


14-10454
Denister
2003-07-18 07:05
2003.08.04
А как же VCL?


1-10217
Kair
2003-07-19 09:45
2003.08.04
Кнопка на панели задач


14-10446
___Nikolay
2003-07-18 06:14
2003.08.04
Как пользоваться CRON-ом?


7-10479
Ronin
2003-05-24 19:58
2003.08.04
CD-ROM Open?