| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Отслеживать запуск программы |
| Автор: Vano-K 19.4.2003, 06:22 |
| Доброе утро, добрый день, добрый вечер - кому как. Мне нужна помощь(это всем надо). Так вот продолжаю, мне нужна помощь. У меня есть откомпелированный ехе фаил. Он будет запускатся автоматически(я пропишу в автозапуск), и будетсидеть в трее, но скрыта. Но мне необходимо чтобы: вдруг какойто осёл захочит запустить ещё один раз этот же ехе фаил, и когда он запускает прога находила что: запушен один и тот - же фаил и например выскакивал эрор, или самоуничтожалась прога, или что-то ещё, но так чтобы это "что то ещё" я мог устанавливать сам. Навсякий случай: у меня ХР З.Ы. Огромное спасибо. |
| Автор: cardinal 19.4.2003, 20:05 | ||||
Ты можешь когда программа запускается писать в application's registry в определенное место допустим 1, а при выходе писать туда 0. Когда ты запускаешь второй раз туже программу, то в registry соответственно будет стоят 1 (потому, что другая первая запущенная еще не востановила значение) и ты на это делаешь что хочешь. Это один из способов, который можно попробовать, но с ним могут быть проблемы. Как писать в реестр написано снизу. Там есть пару функций. Как записывать я знаю, а как читать у меня не было примера - сам посмотри. Вот так записывается что-то в реестр:
Второй способ - это не придумывать тут ничего, что может работать, а может и нет во всех виндах, а просто записать тот же нолик или единичку, соответственно, в файл сообственный типа .ini. Успехов! Навсякий случай: у меня 98
|
| Автор: Vano-K 20.4.2003, 06:36 |
| Что-то уж больно сложно, говорили что это намного проще.............. |
| Автор: cardinal 20.4.2003, 17:24 | ||
Ничего сложного тут нет. Вот например тебе исходник программки которая запускается только один раз. По идее должна быть какая-то API которая говорит о том что копия программы уже была запущена, но мне она не известна. В этом исходнике зарыта только одна неприятность - что произойдет если прога повиснет и тебе придется перезагрузить компер? Можно на этот случай написать маленькую прогу, которая также будет сидеть в автозапуске и обнулять твое значение при запуске винды до запуска твоей проги. Таким образом программа будет запускаться даже при неправильном ее закрытии после перезагрузки винды.
|
| Автор: Vano-K 22.4.2003, 07:42 |
| Огромное спасидо(этот пример мне подойдёт), я нашол пример тоже (там можно сново и сново запускать ехе, а в техтбохе добовляется строка), но твой тоже неплох, Огромнейшое спасибо |
| Автор: Guest_Farkhod 25.4.2003, 18:15 |
| Можно и по проще if app.Previnstance=true then end else ..... end if |
| Автор: cardinal 26.4.2003, 15:18 |
| Вот этого человек в принципе и хотел спасибо за такой простенький вариант! А вот вопрос на всех виндах это проходит? Человек то под XP работает. Я знаю только следующее: Если посмотреть на то, что происходит в С++, но вот там прогой управляет функция WinMain(). Параметры у функции бывают разные, но вот что сказано в умной книге (Крис Паппас и Уильям Мюррей написали): "в ранних версиях Windows (в плоть до 3.x) параметр hPreInst позволял определить, были ли запущены другие копии приложения. В Windows 95/98/NT для каждого запущенного модуля выделяется отдельное адресное пространство, в связи с чем параметр hPreInst всегда устанавливается равным NULL". Слова Previnstance и hPreInst очень похожи... Но тот факт, что я думаю, что у Guest_Farkhod его вариант работал говорит о том, что можно и так решить поставленную задачу потому, что я что-то сомневаюсь, что у Guest_Farkhod "Windows в плоть до 3.x" |