Автор
|
Тема: Когда запущено приложение?
|
Susik |
опубликован 27-08-2001 00:54 MSK
Какими методами можно определить, что было запущено новое приложение? (независимо, с окном оно или без)
|
purpe
|
опубликован 27-08-2001 07:15 MSK
не уверен на 100%, но может стоит поставить глобальную ловушку ?
|
stan
|
опубликован 27-08-2001 11:09 MSK
Вс смысле новое? Если необходимо определить есть ли еще одна запущенная копия твоего приложения то воспользуйся стандартными методами (например, мьютексом). |
Susik
|
опубликован 27-08-2001 13:21 MSK
То Стан: если я прогу запустил какую-то, то ее запуск надо зафиксировать сразу же при ее инициализации (без разницы, была ли ранее запущена копия этого приложения или нет).Ту Пурпе: я тоже так думал. Только вот если приложение не создает окон - как быть? Просто какого типа мессаги надо перехватывать я не знаю, если окно не создается. |
stan
|
опубликован 27-08-2001 17:23 MSK
Я не понял - какая разница, когда проверять наличие копии? Хочешь при запуске, хочешь при выходе, хочешь при втором пришествии Христа. Мьютексу пофиг когда ты его создашь. Выйти из приложения можно и при его содании. Какие еще проблемы? |
purpe
|
опубликован 27-08-2001 17:30 MSK
stan: он не про ещё одну копию своего приложения говорит, а вообще про запускаемые процессы в системе (Word, Excel и т.д.)
|
Susik
|
опубликован 27-08-2001 19:16 MSK
В натуре, я говорил про процессы, типа проги. Тока не имел в виду Ворд и Ёксель. :)) |
talex
|
опубликован 28-08-2001 11:41 MSK
[b]Susik[/b] я могу предложить 2 варианта: 1) используя ф-ции EnumWindows(Proc)() считать кол-во окон, но ты говоришь что может быь окн и нет, тогда способ 2. (окно может и не видно, посмотри как у Spy, полно окон которых ты даже не видишь). 2) использую ф-ции EnumProcessModules/EnumProcesses. Но я не уверен. |
talex
|
опубликован 28-08-2001 11:42 MSK
[b]Susik[/b] я могу предложить 2 варианта: 1) используя ф-ции EnumWindows(Proc)() считать кол-во окон, но ты говоришь что может быь окн и нет, тогда способ 2. (окно может и не видно, посмотри как у Spy, полно окон которых ты даже не видишь). 2) использую ф-ции EnumProcessModules/EnumProcesses. Но я не уверен. |
Susik
|
опубликован 28-08-2001 00:39 MSK
To Talex: весь смысл не в том, чтобы получить список запущенных на данный момент процессов. Цель - поймать момент, когда приложение только-только было запущено. |
m_fox
|
опубликован 28-08-2001 16:45 MSK
Видел замечательный пример на sources Используй AddAtom и родственные функции. |
m_fox
|
опубликован 29-08-2001 04:48 MSK
Вот ссылка, может быть это то, что нужно. http://www.sources.ru/delphi/delphi_shareware_lock.shtml |
talex
|
опубликован 29-08-2001 00:06 MSK
у меня тут идейка появилась, но она работате в случае если у проги есть окно. :) Если устраивает говори. Я еще подумаю, может что-то еще придумаю. |
Susik
|
опубликован 29-08-2001 13:05 MSK
Для оконных приложений мне уже подкинули отличну идею - поставить хук и при аттачменте дллки с хуком получать ИД текущего процесса типа GetCurrentProcessId(). Я так и сделал. Все работает отлично. :))) А вот к безоконным приложениям длл не присоединяется - туда мессаги не отсылаются (проверял). Пока с ними вопрос.То m_fox: а что вообще такое Атом? Я просто в хелпе почитал - не очень ясно. Хотя бы в 2 словах объясни, если не трудно. |
m_fox
|
опубликован 29-08-2001 16:48 MSK
Platform SDK Atoms An atom table is a system-defined table that stores strings and corresponding identifiers. An application places a string in an atom table and receives a 16-bit integer, called an atom, that can be used to access the string. A string that has been placed in an atom table is called an atom name. В общем так, атом - это совокупность некоторой строки, например "Program_by_Vasya_Pupkin", и некоторого числа, которое система возвращает при добовлении нового атома. Если запускается первая копия твоего приложения, то она проверяет таблицу атомов на наличии этой строки. Если ее там нет, то программа добавляет эту строку и считает, что других копий приложений в этот сеанс Windows запущено небыло. После запуска второй программы, опять проверяется таблица атомов на наличие этой строки. Если строка найдена, то это уже второй запуск одной программы. |
Susik
|
опубликован 29-08-2001 20:52 MSK
Ага, спасибо. Т.е. атом - это типа само приложение пихает эту строку в эту таблицу? Только нафиг оно нужно системе? В смысле, употреблять их куда? (кроме определения, что приложение запущено) :))) |
m_fox
|
опубликован 30-08-2001 03:44 MSK
Кажется для ddx И для взаимодействия между процессами... ddx :) |