2012-03-27 6 views
0

У меня есть следующий сценарий: мне нужно определить определенную программу, запущенную в Windows, прежде чем я смогу выполнить свою программу, например, моя программа должна знать, действительно ли LogMeIn установлен и запущен, I использовали некоторые подходы, такие как перечисление процессов с использованием psapi.dll, но я думаю, что имя процесса может измениться на этапе установки и конфигурации, поэтому я не знаю, как убедиться, что я всегда могу найти этот процесс независимо от этого. Я использую некоторые тесты на основе следующих фрагментов кода: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682623(v=vs.85).aspxИдентификация запущенной программы в Windows

Другой подход заключается в использовании кода реестра, но я обнаружил, что он также может быть изменен, и он не является стандартным.

+0

«EnumProcesses» - это тот подход, который я бы тоже принял. Я не понимаю, в чем проблема. Если имя программы изменилось, это уже не та самая программа. Ты мало что можешь с этим поделать. Альтернативой является проверка файловой системы/реестра. Опять же, это тоже может измениться. –

+0

По * имени процесса * Вы имеете в виду имя * .exe *, а не имя приложения? – hmjd

+0

Я использую имя приложения itsef. и идея всегда обнаруживает, что logMein и другие работают неважно, работает ли программа с измененным именем или ключом реестра изменений и т. д. Я пытаюсь определить наиболее стандартный подход, чтобы связать правильный PID и действовать соответственно. – willyMon

ответ

0

Если программа, которую вы хотите отслеживать, окончена (поэтому окна показаны), а заголовок окна - это то, что вы прогнозируете. Вы можете использовать функцию EnumWindows. Если заголовок изменяется, но все же есть несколько слов, которые совпадают по сравнению с другим прогоном, вы можете использовать регулярное выражение, чтобы увидеть, совпадает ли имя с тем, что вы хотите. Пример:

LogMeIn работает ...

2012-03-27: LogMeIn

Те две строки имеют общее и явное имя, так что вы можете сказать, что будет что ваше находясь в поиске. Вы можете применить эту аргументацию к методу EnumProcess

+0

Да, это может быть полезно, когда оконно, поэтому следующий шаг - это получить подход к определению ненастраиваемых программ. – willyMon

+0

Какая информация вы знаете, что может помочь вам идентифицировать программу? Имя исполняемого файла? Путь установки? Запись реестра, которая дает вам путь? – grifos

+0

В случае, если вы перечислили процессы и имя исполняемого файла, который вы ищете, но вы всегда знаете, где он должен быть установлен, вы можете использовать функцию GetModuleFileNameEx, чтобы получить путь (whith name) исполняемого файла, который запустил этот процесс. – grifos

Смежные вопросы