Автор
|
Тема: API и запуск программ уточнение!
|
FtoR |
опубликован 21-03-2001 12:50 MSK
В предыдущем сообщении ОlegO написал о том, как можно предотвратить запуск одной и той же проги, используя код ВНУТРИ этой проги созданием Mutex (действительно это старая тема). У меня другая ситуация, необходима прога, которая (как бы извне) отслеживает, с помощью API функций, ЗАПУСК совершенно другой программы. Здесь также можно обойтись созданием Mutex для внешней программы при ее запуске , но как отследить ее запуск?? (что-то в духе прерывания). Может я все-таки чего-то не догнал? С уважением FtoR.
|
Lunya
|
опубликован 22-03-2001 14:02 MSK
Мне кажется, ты можешь сделать DLL, которая будет "резедентно" ловить сообщения shell Windows, например, при помощи WH_SHELL hook. А далее при каждом обнаруженном запуске новой программы передавать управление твоей программе, которая будет проверять - не появилось ли в системе процессов с одинаковым именем (с помощью TPROCESSENTRY32). Если появились - можно например выдать сообщение пользователю или выполнять иное программное действие. |
FtoR
|
опубликован 22-03-2001 16:02 MSK
Lunya, ты прав, спасибо. Если я правильно понял, то у меня появилась идея, напрямую связанная с HOOK в API функциях. Таким образом можно вообще предотвратить запуск ненужной проги. HOOK на процессы по-моему нет, а вот на CreateWindow можно сделать, вообщем надо HOOKи повнимательней посмотреть. Единственный минус HOOK - насколько они замедляют функционирование процессов в реальном времени? |
webmaster
|
опубликован 22-03-2001 16:10 MSK
2 FtoR:Lunya - девушка :)
|
Flex Ferrum
|
опубликован 22-03-2001 18:23 MSK
ИМХО, в таком случае, лучше через тот-же TPROCESSENTRY32 мониторить с некоторой периодичностью весь список процессов на предмет вновь появившихся, т. к. оба хука будут охватывать не все варианты запуска. Плюс к этому можно изменить содержание переменной окружения ComSpec (на какой-нибуть батник), с целью отлова запуска досовских и им подобдых прог. |
FtoR
|
опубликован 23-03-2001 10:04 MSK
Lunya, sorry :). Хотя в основном вообщем-то ради ИМЕННО досовской программы все это и пишется, и там (в досовском режиме) есс-но есть свои грабли. А вот про переменную CompSpec, не слышал, поскольку еще новичок :) |
Flex Ferrum
|
опубликован 23-03-2001 10:31 MSK
Переменная ComSpec указывает на командный процессор системы. В Win95/98 это command.com, в WinNT - cmd.exe. Все грамотно написанные программы запускают любые консольные (и не только) приложения через него (иначе много глюков может возникнуть). По сему, можно написать программу-заместитель которая сохраняет оригинальное значение этой переменной, и прописывает туда себя, после чего занимается запуском приложений, передаваемых в качестве параметра. Правда, задача это не тривиальная. PS. А досовские проги через TPROCESSENTRY32 не видны под своими оригинальными именами. |
FtoR
|
опубликован 23-03-2001 13:38 MSK
Thanx, видимо сначала придется поэкспериментировать под 32, а потом уже разбираться досовским сеансом и его премудростями. |