enumerating EXEs
Минимальным кодом составить список запущенных приложений. Именно список EXE файлов, запущенных сейчас. Другая инфа не нужна - только имя EXE файла. Чтобы работало это и на NT и на 9х. Кто-нибудь знает?
Вообщем такая задача:
Минимальным кодом составить список запущенных приложений. Именно список EXE файлов, запущенных сейчас. Другая инфа не нужна - только имя EXE файла. Чтобы работало это и на NT и на 9х. Кто-нибудь знает?
Ну раз никто не отвечает придётся найти самому.
Вот - что я нашёл (кстати именно то, что я искал)
#include <dstring.h>
Memo1->Clear();
HANDLE process;
PROCESSENTRY32 Entry;
char *processEXE;
process = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
while (Process32Next(process,&Entry))
{
Entry.dwSize = sizeof(Entry);
processEXE = Entry.szExeFile;
Memo1->Lines->Add((AnsiString)processEXE);
}
CloseHandle(process);
Выводит в Memo1 список всех запущенных EXE файлов
Вообщем такая задача:
Минимальным кодом составить список запущенных приложений. Именно список EXE файлов, запущенных сейчас. Другая инфа не нужна - только имя EXE файла. Чтобы работало это и на NT и на 9х. Кто-нибудь знает?
http://forum.codenet.ru/showthread.php?s=&threadid=25868
GIZMO, я ж сказал, что я нашёл нужный код. Его же и выложил выше. Тему можно закрывать.
GIZMO, я ж сказал, что я нашёл нужный код. Его же и выложил выше. Тему можно закрывать.
Ну, пацан - сказал, пацан - сделал:)
Вообщем код этот когда вызывается вручную - работает. Но вот иногда через некоторое время если запустить этот процесс таймером - список остаётся пустым. Что не так?
Возникла проблема.
Вообщем код этот когда вызывается вручную - работает. Но вот иногда через некоторое время если запустить этот процесс таймером - список остаётся пустым. Что не так?
Приведи пример как ты запускаешь - у меня все работает и список заполняется.
Приведи пример как ты запускаешь - у меня все работает и список заполняется.
Корчое чтобы глюков не было, нужно объявлять не как PROCESSENTRY32 Entry; а вот так: ROCESSENTRY32* Entry = new PROCESSENTRY32;
Тогда глюков не происходит.
Так что можно считать что снова проблема решена.
А вообще, отвечая на твой вопрос, запускалось так же как в примере выше. Таймер при достижении времени обнуляет список и запускает этот код...
Корчое чтобы глюков не было, нужно объявлять не как PROCESSENTRY32 Entry; а вот так: ROCESSENTRY32* Entry = new PROCESSENTRY32;
Тогда глюков не происходит.
Так что можно считать что снова проблема решена.
А вообще, отвечая на твой вопрос, запускалось так же как в примере выше. Таймер при достижении времени обнуляет список и запускает этот код...
Можно и так. Судя по всему глюк был в том, что в коде приведенным тобой отсутствовала строка -
Даже при использовании PROCESSENTRY32* не стоит пренебрегать явной инициализацией данной переменной.
Можно и так. Судя по всему глюк был в том, что в коде приведенным тобой отсутствовала строка -
Возможно.
В новом коде уже есть эта строка (только вместо точки там стрелка). Этот код вроде как уже не глючит.