Einzelnen Beitrag anzeigen

Benutzerbild von CrashMan
CrashMan

Registriert seit: 31. Jul 2003
Ort: //127.0.0.1/
65 Beiträge
 
Delphi 6 Personal
 
#7

Re: Nachricht, wenn irgendein Programm gestartet wird ?

  Alt 31. Aug 2003, 15:11
also:
Ich hab hier einen Source der per Buttonklick alle Prozesse auflistet.

Delphi-Quellcode:
function GetProcessName(PID: DWORD): String;
var
  hProcess: cardinal;
  buffer : array [0..MAX_PATH-1] of Char;
begin
  result := '';
  Zeromemory(@buffer, sizeof(buffer));
  hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE,
    PID);
  if hProcess <> 0 then
  begin
    GetModulebaseName(hProcess, 0, buffer, sizeof(buffer));
    result := String(buffer);
    CloseHandle(hProcess);
  end
end;


procedure TForm1.Button1Click(Sender: TObject);

var
  pdwResult : PDWORD; // für den Buffer
  pdwWork : PDWORD; // um dem Buffer verarbeiten zu können
  dwCountIn : DWORD; // Grösse des Buffers in Byte
  dwCountOut : DWORD; // Zurückgelieferte Anzahl Byte
  i : integer;
begin
  dwCountOut := 0; // Sicherheitshalber initialisieren, muss nicht sein
  dwCountIn := 1024; // Willkürlich gewählt, genügt für 256 Prozesse
  pdwResult := AllocMem(dwCountIn);
  try
    if not EnumProcesses(pdwResult,dwCountIn,dwCountOut) then begin
      ShowMessage(SysErrorMessage(GetLastError));
    end else begin
      pdwWork := pdwResult; // zur Verarbeitung übergeben, damit FreeMem funktioniert
      Edit1.Text := IntToStr(dwCountOut shr 2);
      for i := 1 to (dwCountOut shr 2) do begin // shr 2 = / 4, da 4 Byte je DWORD
        // Prozess Id ausgeben
        //ShowMessage('ProzessId# '+IntToStr(i)+': '+IntToStr(pdwWork^));
        Memo1.Lines.Add(GetProcessName(pdwWork^));
        // auf nächste addressieren (inc erhöht automatisch um 4, da es ein typisierter Pointer ist
        inc(pdwWork);
      end;
    end;
  finally
    FreeMem(pdwResult,dwCountIn);
  end;
end;
Das kannste mit 2 Listboxen machen.
in die erste einlesen warten in 2. einlesen
Vergleichen
2->1
2 neuschreiben (prozesse wieder abfrabgen)
vergleichen
2->1
usw.

CrashMan
  Mit Zitat antworten Zitat