hallo zusammen,
ich habe mir vor eineiger zeit die folgende funktion gebastelt über die ich mir ermitteln kann wie oft ein programm auf einem rechner läuft
(als grundlage für diese funktion habe ich damals eine
dp beitrag verwendet denn ich leider nicht mehr finde)
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);
Module32First(hModuleSnap, ModuleEntry);
sPathProgram := (ModuleEntry.szExePath);
For i := 0 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;
CloseHandle(hModuleSnap);
End;
End;
End;
CloseHandle(hProcessSnap);
End;
Result := k;
end;
prinzipiell funktioniert diese funktion auch...
allerdings hab ich jetzt feststellen müssen das ich in manchen fällen eine zugriffsverletzung erhalte... leider kann ich nicht feststellen wann so ein fall eintritt... im moment hab ich so das gefühl wie wenn diese fälle nur sporadisch auftreten...
hat jemand eine idee woran das liegen könnte? habe ich einen fehl in meinem code?