Аннотация:
В статье рассматривается несколько способов перечисления процессов в Windows различных версий, включая методы, пригодные для перечисления процессов на другом компьютере
Под XP есть еще один способ — через winsta.dll. Возможно, в будущем это будет предпочтительный метод. Информация извлекается с помощью SQL подобных запросов (лонгорн не за горами ). Эту библиотеку использует напрмер tasklist.
Что полезно — можно запросто узнать сервисы загруженные данным процессом.
(WMI) Весьма оригинальный способ, никогда не подозревал что так можно перечисльть процессы. Вот только вопрос, WMI входит в стандартную поставку каких ОС. Тоесть требуется ли спец, клиентская чать или нет?
Т.к. тема статьи явно не указывает, что способы используют компиляторы, вот еще два способа (ну, или "подспособа" к способу 5)
1. На VBScript:
------------------
for each Process in GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf ("Win32_process")
WScript.Echo Process.Caption
Next
------------------
2. На JScript
------------------
var
WMI;
Не совсем понятно, зачем динамически загружать Psapi.DLL, если имеется заголовок <psapi.h>.
В Builder 5.0 при подключении вышеназванного заголовка Code Insight автоматически определяет аргументы функций.
Здравствуйте, Александр Федотов, Вы писали:
АФ>Статья:
...
Ты описал способ перечисления процессов/ID процессов через cчетчики производительности. В этом способе ты берёшь ID и имя процесса.
Вопрос вот в чём: подскажи, как получить экземпляр процесса? Т.е. perfmon.msc при выборе Performance object — Process в правом окне показывает список процессов и если экземпляров процесса больше одного, он показывает так: explorer, explorer#1, и т.д.
Ты не подскажешь, как изменить путь к счетчику производительности в твоём коде или как изменить код, что — бы получить имя процесса вместе с экземпляром?
Задача-Вопрос: как получить имя процесса по его Id используя wmi.
можно конечно перечислять все процессы и наблюдать за их Id, при совпадении с искомым значением прочитать свойство Name, однако может быть есть способ проще (красивее)? Например сразу открыть запись о процессе с необходимым Id...
А можно узнать о том, как ProgID "winmgmts:{impersonationLevel=impersonate}" распарсивается системой на части? Это вель не какой-нибудь простой "Word.Document". И куда потом идут параметры в {}? Есть где-нибудь описание таких фишек или примеры?
Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Здравствуйте, Slicer [Mirkwood], Вы писали:
SM>Приветствую!
SM>А можно узнать о том, как ProgID "winmgmts:{impersonationLevel=impersonate}" распарсивается системой на части? Это вель не какой-нибудь простой "Word.Document". И куда потом идут параметры в {}? Есть где-нибудь описание таких фишек или примеры?
Кажется строка вида "<имя>:..." (в данном случае "winmgmts:...") — это что-то из области моникеров (хотя точно не уверен).
На эту тему видел статью:
Microsoft System Journal, июль 1997, колонка "Q&A: ActiveX/COM" Дона Бокса.
Здравствуйте, TarasCo, Вы писали:
TC>Под XP есть еще один способ — через winsta.dll. Возможно, в будущем это будет предпочтительный метод. Информация извлекается с помощью SQL подобных запросов (лонгорн не за горами ). Эту библиотеку использует напрмер tasklist. TC>Что полезно — можно запросто узнать сервисы загруженные данным процессом.
Детализируй реализацию.
В чем предпочтение?
Мы знаем: время растяжимо. Оно зависит от того,
Какого рода содержимым Вы заполняете его. (C. Маршак)