AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Windows API / MS.NET Framework API Delphi Läuft ein bestimmtes Programm bereits?
Thema durchsuchen
Ansicht
Themen-Optionen

Läuft ein bestimmtes Programm bereits?

Ein Thema von CalganX · begonnen am 12. Mai 2004
Antwort Antwort
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

Läuft ein bestimmtes Programm bereits?

  Alt 12. Mai 2004, 19:51
Folgende Funktion stammt von unserem ehemaligem User Daniel B..

Mit dieser Funktion lässt sich herausfinden, ob ein bestimmtes Programm bereits läuft.
Delphi-Quellcode:
uses {...}, TlHelp, PsAPI;

// ...

procedure CreateWin9xProcessList(List: TStringList);
var
  hSnapShot: THandle;
  ProcInfo: TProcessEntry32;
begin
  if List = nil then
    Exit;
  hSnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if (hSnapShot <> THandle(-1)) then
  begin
    ProcInfo.dwSize := SizeOf(ProcInfo);
    if (Process32First(hSnapshot, ProcInfo)) then
    begin
      List.Add(ProcInfo.szExeFile);
     while (Process32Next(hSnapShot, ProcInfo)) do
       List.Add(ProcInfo.szExeFile);
    end;
    CloseHandle(hSnapShot);
  end;
end;

procedure CreateWinNTProcessList(List: TStringList);
var
  PIDArray: Array[0..1023] of DWORD;
  cb: DWORD;
  i: integer;
  ProcCount: integer;
  hMod : HMODULE;
  hProcess: THandle;
  ModuleName: Array[0..300] of Char;
begin
  if List = nil then
    Exit;
  EnumProcesses(@PIDArray, sizeof(PIDArray), cb);
  ProcCount := cb div SizeOf(DWORD);
  for i := 0 to ProcCount -1 do
  begin
    hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or
      PROCESS_VM_READ, False, PIDArray[I]);
    if (hProcess <> 0) then
    begin
      EnumProcessModules(hProcess, @hMod, SizeOf(hMod), cb);
      GetModuleFilenameEx(hProcess, hMod, ModuleName, SizeOf(ModuleName));
      List.Add(ModuleName);
      CloseHandle(hProcess);
    end;
  end;
end;

procedure GetProcessList(var List: TStringList);
var
  ovi: TOSVersionInfo;
begin
  if List = nil then
    Exit;
  ovi.dwOSVersionInfoSize := sizeof(TOSVersionInfo);
  GetVersionEx(ovi);
  case ovi.dwPlatformId of
    VER_PLATFORM_WIN32_WINDOWS : CreateWin9xProcessList(List) ;
    VER_PLATFORM_WIN32_NT : CreateWinNTProcessList(List) ;
  end
end;

function IsEXERunning(sFileName: String; bFullpath: Boolean): Boolean;
var
  i: Integer;
  MyProcList: TStringList;
begin
  MyProcList := TStringList.Create;
  try
    GetProcessList(MyProcList) ;
    Result := False;
    if MyProcList = nil then
      Exit;
    for i := 0 to MyProcList.Count -1 do
    begin
      if not bFullpath then
      begin
        if CompareText(ExtractFileName(MyProcList.Strings[i]), sFileName) = 0 then
          Result := True
        end else
        if CompareText(MyProcList.Strings[i], sFileName) = 0 then
          Result := True;
        if Result then
          Break;
    end;
  finally
    FreeAndNil(MyProcList);
  end;
end;

// Anwendungsbeispiel

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsEXERunning('delphi32.exe', False) then
    ShowMessage('Läuft schon... *bääh*')
  else
    ShowMessage('Läuft nicht... :-)');
end;
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz