Форум: "WinAPI";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
ВнизМожно ли отловить запуски приложений? Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c