Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Список процессов. [D6, Win2k]


Uncle Archi ©   (2003-05-06 23:51:00) 

Хоть и искал в FAQ этого сайта, так и не нашёл.
Как получить список процессов в Win2k?
И почему при повторном запуске этой процедуры вместо имён процессов возвращаются "?":


var
a:array[0..200] of DWord;
b:array[0..200] of Record
Path:String;
Name:String;
id:DWord;
HI:HIcon;
End;

Procedure TForm1.GetPr;
Var
n,n1:DWord;
i:Integer;
h:THandle;
m:PChar;
MH:HModule;
s:String;
HI:HIcon;
Begin
ListBox1.Clear;
New(m);
FillChar(a,SizeOf(a),0);
FillCHar(b,SizeOf(b),0);
EnumProcesses(@a,SizeOf(a),n);
n:=n div SizeOf(DWord);
For i:=2 to n do
Begin
b[i].id:=a[i];
h:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,a[i]);
If h=0 then Continue;
EnumProcessModules(h,@MH,1,n1);
GetModuleFileNameEx(h,MH,m,n1);
s:=String(m);
If Length(S)>4 then If s[2]="?" then Delete(s,1,4);
b[i].Path:=ExtractFilePath(S);
b[i].Name:=ExtractFileName(S);
HI:=ExtractIcon(h,PChar(s),0);
If HI<>0 then Image.Picture.Icon.Handle:=HI;
ListBox1.Items.Add(b[i].Name);
b[i].HI:=HI;
End;
End;


Набережных С.   (2003-05-10 19:37:00) [1]


procedure TForm1.Button1Click(Sender: TObject);
var
PIDs: array of DWORD;
n, k: Cardinal;
i: integer;
H, MH: THandle;
s: string;
begin
n:=$10000;
SetLength(PIDs, n);
if not EnumProcesses(@PIDs[0], n * SizeOf(DWORD), n) then Exit;
SetLength(s, MAX_PATH);
for i:= 0 to Pred(n div SizeOf(DWORD)) do
begin
H:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PIDs[i]);
if H <> 0 then
try
if
EnumProcessModules(H, @MH, SizeOf(MH), k)
or (GetLastError = ERROR_PARTIAL_COPY)
then
begin
GetModuleFileNameEx(H, MH, @s[1], MAX_PATH);
Memo1.Lines.Add(PChar(s));
end;
finally
CloseHandle(H);
end;
end;
end;


Uncle Archi   (2003-05-10 15:32:00) [2]

Удалено модератором
Примечание: Сождание пустых сообщений, вмесо UP может получиться DOWN


jack128   (2003-05-07 20:57:00) [3]

Process32First - далее по ссылкам


AKu   (2003-05-07 12:21:00) [4]

Попробуй поискать в FAQ про NtQuerySystemInformation.


Igit   (2003-05-07 03:43:00) [5]

Я тоже искал... ненашел, тогда взял как в 9x, только он не работал и я поставил его в try except
procedure EnumWindowsProc(hW:HWND); stdcall;
var S:String;
begin
SetLength(S,SendMessage(hW,WM_GETTEXTLENGTH,0,0)+1);
SetLength(S,SendMessage(hW,WM_GETTEXT,Length(S),LPARAM(S)));
if s<>"" then
form1.ListBox4.Add(S);
end;
//============Обновить список окон========
procedure TForm1.Button20Click(Sender: PObj);
begin
listbox4.Clear;
try
EnumWindows(@EnumWindowsProc, 0);
except
end;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо