Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.03.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.03.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
6-91033
Дима566
2002-01-14 19:54
2002.03.28
Сотовая связь


14-91037
.: Joiro :.
2002-02-12 21:31
2002.03.28
Кто хочет стать вампиром?


14-91056
panov
2002-02-12 09:05
2002.03.28
Хорошо жить!


1-90834
kaif
2002-03-15 23:25
2002.03.28
Выпадающий список подсказок в произв.месте?


1-90840
-Stealtch-
2002-03-13 17:16
2002.03.28
Проблема импортированного ActiveX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский