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

Вниз

Запуск программы   Найти похожие ветки 

 
OxOTHuK   (2003-02-24 22:10) [0]

как отследить вновь запускаемую программу? узнать путь к ней и хэндл окна?


 
Cobalt ©   (2003-02-24 22:31) [1]

поиск в инете(Yandex, Google - не важно) - ToolHelp, CreateSnapshot


 
OxOTHuK   (2003-02-25 07:53) [2]

а что это такое? попробовал поискать - нету....
вероятно это можно организовать глобальными хуками, но КАК???


 
UNIVERSAL   (2003-02-25 16:48) [3]

CreateSnapshot - делает снимок всех запущенных процессов. Можешь поставить на таймер, можешь ставить CBT хук.


 
DVM ©   (2003-02-25 18:38) [4]

program ShellHookDemo;

uses
windows,
messages;

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
wc : TWndClassEx; //


 
DVM ©   (2003-02-25 18:39) [5]

program ShellHookDemo;

uses
windows,
messages;

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
wc : TWndClassEx;
MainWnd : HWND;
Mesg : TMsg;
WndListBox:hWnd;
WM_ShellHook:Integer;
xPos,yPos,nWidth,nHeight : Integer;
osInfo:OSVERSIONINFO;

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

function ListBox_AddString(lb : THandle; txt : String) : integer;
begin
Result := SendMessage(lb, lb_addString, 0, integer(pchar(@txt[1])));
end;

function WindowProc(wnd:HWND; Msg : Integer; Wparam:Wparam; Lparam:Lparam):Lresult; stdcall;
begin
if msg=wm_shellhook then
begin
case wparam of
HSHELL_WINDOWCREATED: ListBox_AddString(WndListBox,"Window Created");//
HSHELL_WINDOWDESTROYED: ListBox_AddString(WndListBox,"Window Destroyed");
HSHELL_WINDOWACTIVATED: ListBox_AddString(WndListBox,"Window Activated");
end;
end;
case msg of
wm_destroy :
Begin
postquitmessage(0); exit;
Result:=0;
End;
else Result:=DefWindowProc(wnd,msg,wparam,lparam);
end;
End;


продолжение следует...


 
DVM ©   (2003-02-25 18:41) [6]

Продолжение

begin
wc.cbSize:=sizeof(wc);
wc.style:=cs_hredraw or cs_vredraw;
wc.lpfnWndProc:=@WindowProc;
wc.cbClsExtra:=0;
wc.cbWndExtra:=0;
wc.hInstance:=HInstance;
wc.hIcon:=LoadIcon(0,idi_application);
wc.hCursor:=LoadCursor(0,idc_arrow);
wc.hbrBackground:=COLOR_BTNFACE+1;
wc.lpszMenuName:=nil;
wc.lpszClassName:="ShellHookDemo";
RegisterClassEx(wc);//


 
OxOTHuK   (2003-02-25 22:23) [7]

Спасибо.... посмотрим....
за комментарии отдельное спасибо... =)


 
universal   (2003-02-26 08:42) [8]

Млин, DVM , коментарии в какой кодировке написаны, а то разобрать не могу, а очень хочется.


 
universal   (2003-02-26 09:11) [9]

А, вообще, пример классный. Только ничего про функцию RegisterShellHook я не нашёл, даже на сайте MSDN. DVM, если не трудно вышли на почту мне энто с комментариями в нормальной (Win Cyrilic) кодировке, плз.


 
universal   (2003-02-26 09:56) [10]

А как получить Handle созданого окна?


 
DVM ©   (2003-02-26 12:46) [11]

Что с кодировкой случилось не знаю я просто из Aditora текст копировал.
Пример этот вышлю, если надо.

> А как получить Handle созданого окна?

if msg=wm_shellhook then
begin
case wparam of
...
end;
{***** Вот здесь lparam сообщения и есть Handle*****}
Wnd:=lparam;
end;




 
UNIVERSAL   (2003-02-26 15:28) [12]

Спасибо буду ждать письма, а с хендлом окна я уже методом тыка разобрался. А вот чё то вызывая ф-ю GetWindowText, только заголовок не могу получить, почему-то, наверное его ещё нет что ли?


 
DVM ©   (2003-02-26 16:17) [13]

А хэндл не пустой? Насчет lparam я не проверял, но там по идее должен быть хэндл окна, которое создается/уничтожается.

GetWindowText немного глючная, есть др. способ получить заголовок.

Если хэндл есть, то окно уже создано, т.е. заголовок получить можно.

Я в свое время окна ловил хуком, но не таким, а стандартным, расположенным в dll, но в WinXp так не удавалось отловить создание консольных окон.

Есть еще одна тонкость: этот способ,недокументированный и предназначенный мелкософтом исключительно для своего эксплорера, поэтому желательно выгружать его из памяти.



 
UNIVERSAL   (2003-02-26 16:31) [14]

Нет, не пустой. При присвоении ему (окну) заголовка SetWindowText, прокатывает правда через раз. Мелькает иногда мой заголовок/его заголовок и остается ессно его заголовок.


 
DVM ©   (2003-02-26 16:42) [15]

Можно попробовать взять текст из окна посылом ему сообщения:

function GetText(Wnd: HWND): string;
var
textlength: Integer;
Text: PChar;
begin
textlength := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0);
if textlength = 0 then Result := ""
else
begin
GetMem(Text, textlength + 1);
SendMessage(Wnd, WM_GETTEXT, textlength + 1, Integer(Text));
Result := Text;
FreeMem(Text);
end;
end;


 
UNIVERSAL   (2003-02-26 17:30) [16]

Спасибо попробую, но думаю ситуация не изменится.



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

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

Наверх




Память: 0.5 MB
Время: 0.014 c
8-77042
SN
2003-01-19 20:19
2003.04.24
DIVX кодек.


7-77200
Demon
2003-03-07 15:58
2003.04.24
Как выгрузить процесс?


1-77008
esprit_bel
2003-04-14 07:08
2003.04.24
сортировка


1-76940
Новик
2003-04-12 12:44
2003.04.24
Добавление информации в типизированый файл


14-77075
Pegas
2003-04-06 16:10
2003.04.24
MD5!!!