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

Вниз

Отслежка запуска программы другой программой   Найти похожие ветки 

 
Raven ©   (2002-01-04 09:44) [0]

Уважаемые Мастера, помогите пожалуйста отследить запуск какой-либо программы. Есть вариант опрашивать систему на все запущенные процессы, через какой-то промежуток времени, но этот вариант слишком модет тормозить систему. Нужно видимо поставить hook на запуск приложений, чтобы он срабатывал как раз на запуск приложения, но help плз, я не знаю как это делать и hookи ни разу не ставил. Буду признателен.


 
Aleksey Pavlov   (2002-01-04 12:15) [1]

Да, вариант с hook-ом будет выглядеть на первый взгряд более красиво, но вот ставить его прийдётся не на запуск какого-то конкретного процесса, а на запуск процесса вообще.
Таким образом, при каждом создании нового процесса в системе будет срабатывать ваш hook, который будет проверять тот ли это процесс или не тот.
Притом, при программировании такого рода hook-а, вам придётся использовать механизм файлов отображённых в память, который, вообще говоря, достаточно нетривиален в использовании (не достаточно хорошо освещён в Net-е).
Юрий Зотов приводил примерна данную тему, но лично у меня этот пример вызвал некоторые сомнения на предмет работоспособности при определённых обстоятельствах.
К тому же, при таком варианте использования hook-a, система будет "тормозиться" не меньше, чем при снятия слепка процессов в системе, к примеру, раз в секунду. (CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0))
Так что вам решать, чем пользоваться.


 
otari   (2002-01-04 21:15) [2]

uses tlhelp32;

procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
hSnapshoot : THandle;
pe32 : TProcessEntry32;
List : TStrings;
begin
memo1.lines.clear;
hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshoot = -1) then Exit;
pe32.dwSize := SizeOf(TProcessEntry32);
if (Process32First(hSnapshoot, pe32)) then repeat
I := memo1.Lines.Add(Format("%x, %x: %s", [pe32.th32ProcessID,
pe32.th32ParentProcessID,pe32.szExeFile]));
memo1.Lines.Objects[I] := Pointer(pe32.th32ProcessID);
until not Process32Next(hSnapshoot, pe32);
CloseHandle (hSnapshoot);

end;

esli ctonibut nado pishi: otarip@yahoo.com


 
Raven ©   (2002-01-08 16:33) [3]

Спасибо Мастера, что откликнулись, но слепок процессов мне известный вариант. Мне нужно что-то вроде того как Диспетчер Задач Windows перехватывает процессы. Да и, г-н Павлов, подскажите пожалуйста как связаться с Юрием Зотовым. Заранее благодарен.


 
pin ©   (2002-01-26 16:26) [4]

Присоеденяюсь к поиску ответа на данный вопрос, только в моем случае при запуске нужной программы надо получить параметры переданные ей через командную строчку, потом заморозить процесс, что-то там сделать и отморозить... Вот.


 
Dimaond Cat ©   (2002-01-26 22:01) [5]

А Юрий Зотов своих мылов не дает :о)
если нужен пример хуков пиши вышлю, или еще лучше пошатырь по этой конфе, тут они были рассмотрены в различных вариантах
2 Aleksey Pavlov считаю что снятие слепков менее результативный подход, вопервых вы регулярно выполняеете этот процесс, т.е. регулярно подгружаете процессор, во вторых вероятен вариант что искомый процесс может отработать и завершиться за время простоя вашей программы


 
VuDZ ©   (2002-01-26 22:26) [6]

поищи в в МСДН пример
Taking a Snapshot and Viewing Processes
работает быстро и то, что надо...


 
Юрий Зотов ©   (2002-01-28 13:42) [7]

Надо смотреть 4-е издание книги Рихтера, там есть такая задача. Решается она перехватом обращения к CreateProcess. Если "на пальцах", то примерно так: пишется, например, DLL с глобальным хуком (чтобы внедрить свой код в адресное пространство каждого процесса) и в ней по DLL_PROCESS_ATTACH адрес CreateProcess подменяется адресом своей функции (которая делает все, что нам нужно, а потом вызывает "родную" CreateProcess).



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

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

Наверх




Память: 0.48 MB
Время: 0.018 c
1-90907
IronHawk
2002-03-15 22:46
2002.03.28
Как в StringGrid забросить данные из *.txt файла ?


3-90726
Vasyl Bykov
2002-02-28 12:18
2002.03.28
MS Access


3-90762
af
2002-03-01 18:04
2002.03.28
Что за ошибка такая и как устанить =Blob already open =?


1-90829
Aidan
2002-03-13 17:20
2002.03.28
Как получить информацию о пакете или DLL?


4-91099
Ted
2002-01-27 07:38
2002.03.28
Как закрыть все приложения кроме моего?????????