Выдает весьма странные результаты следующий код:
Код:
rocedure TForm1.Button3Click(Sender: TObject);
var
pID:array[0..1024] of DWORD;//ID поцессов от функции EnumProcess
hp:THandle;//open handle to the specified process(от функции OpenProcess)
cbNeeds:dword;//Сколько требовалось для списка IDшек и именни процесса
i:integer;
procname:array[0..255] of WideChar; //буфер для имени
str:string; //буфер для преобразования
begin
if EnumProcesses(@pID,sizeof(pID),cbNeeds)=true then //перечисляем процессы
begin
if cbNeeds<=sizeof(pID) then//проверяем хватило ли места?
begin
for i := 0 to 1024 do
begin
hP := OpenProcess(PROCESS_QUERY_INFORMATION or
PROCESS_VM_READ,
false, pID[i]);//открываем процесс для получения инфы
GetModuleFileNameEx(hp,0,procname,cbneeds);//получаем имя
str:=WideCharToString(procname);//преобразуем
Memo1.Lines.Add(str);
if pos(str,'winlogon.exe')<>0 then//проверяем это winlogon? (Ищем подстроку)
begin
Memo1.Lines.Add(str);
end;
end;
end
end
else
begin
showMessage(intTosTr(cbNeeds)); //выодим необходимое количество памяти в случае нехватки
end;
end;
В чем проблемы:
1) В именах отобржает кразябру
2) Какие то процессы отображает верно, но одни и те же многократно
3) Не видит winlogon