vielen dank für eure antworten...
hab das folgende angepasst:
- String bei 1 beginnen -->
For i := 1 To Length(sPathProgram) Do
- Rückgabe Wert von Modul32First prüfen -->
If Module32First(hModuleSnap, ModuleEntry) = True Then
hier nochmals die komplette funktion:
Delphi-Quellcode:
function fnGetNoOfSameProgramProcesses(sProgramName : String) : Integer;
var
i, j, k : Integer;
sPathProgram : String;
hModuleSnap, hProcessSnap : THandle;
ProcessEntry : TProcessEntry32;
ModuleEntry : TModuleEntry32;
begin
i := 0;
j := 0;
k := 0;
//Get Process IDs
hProcessSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
If hProcessSnap <> INVALID_HANDLE_VALUE Then
Begin
ProcessEntry.dwSize := SizeOf(ProcessEntry32);
If Process32First(hProcessSnap, ProcessEntry) Then
Begin
While Process32Next(hProcessSnap, ProcessEntry) Do
Begin
//Get .exe Names for Process IDs and Count the same Programs
hModuleSnap := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE, ProcessEntry.th32ProcessID);
If hModuleSnap <> INVALID_HANDLE_VALUE Then
Begin
ModuleEntry.dwSize := SizeOf(ModuleEntry32);
If Module32First(hModuleSnap, ModuleEntry) = True Then
Begin
sPathProgram := (ModuleEntry.szExePath);
For i := 1 To Length(sPathProgram) Do
Begin
If sPathProgram[i] = '\' Then j := i;
End;
If UpperCase(Copy(sPathProgram, j + 1, Length(sPathProgram))) = UpperCase(sProgramName) Then k := k + 1;
End;
CloseHandle(hModuleSnap);
End;
End;
End;
CloseHandle(hProcessSnap);
End;
Result := k;
end;
mein programm läuft gerade auf einem testrechner und bis jetzt kam die zugriffsverletzung nicht mehr =)
vielen dank nochmal für eure hilfe!!!