Текущий архив: 2003.07.21;
Скачать: CL | DM;
Вниз
Список процессов. Найти похожие ветки
← →
Uncle Archi (2003-05-06 23:51) [0]Хоть и искал в 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;
← →
Igit (2003-05-07 03:43) [1]Я тоже искал... ненашел, тогда взял как в 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;
← →
AKu (2003-05-07 12:21) [2]Попробуй поискать в FAQ про NtQuerySystemInformation.
← →
jack128 (2003-05-07 20:57) [3]Process32First - далее по ссылкам
← →
Uncle Archi (2003-05-10 15:32) [4]Удалено модератором
Примечание: Сождание пустых сообщений, вмесо UP может получиться DOWN
← →
Набережных С. (2003-05-10 19:37) [5]
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;
Страницы: 1 вся ветка
Текущий архив: 2003.07.21;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.006 c