![]() |
Zugriffsverletzung beim Ermitteln von Prozessen
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:
prinzipiell funktioniert diese funktion auch...
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; 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? |
AW: Zugriffsverletzung beim Ermitteln von Prozessen
Zitat:
|
AW: Zugriffsverletzung beim Ermitteln von Prozessen
Zitat:
|
AW: Zugriffsverletzung beim Ermitteln von Prozessen
Der Rückgabewert von "Module32First" wird nicht geprüft.
Deshalb ist der Zugriff auf "ModuleEntry.szExePath" danach eventuell unzulässig. |
AW: Zugriffsverletzung beim Ermitteln von Prozessen
vielen dank für eure antworten...
hab das folgende angepasst: - String bei 1 beginnen -->
Delphi-Quellcode:
- Rückgabe Wert von Modul32First prüfen -->
For i := 1 To Length(sPathProgram) Do
Delphi-Quellcode:
hier nochmals die komplette funktion:
If Module32First(hModuleSnap, ModuleEntry) = True Then
Delphi-Quellcode:
mein programm läuft gerade auf einem testrechner und bis jetzt kam die zugriffsverletzung nicht mehr =)
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; vielen dank nochmal für eure hilfe!!! |
AW: Zugriffsverletzung beim Ermitteln von Prozessen
Prüfe bitte niemals auf true.
Delphi-Quellcode:
Das ist nicht nur kürzer, sondern auch sicherer.
If Module32First(hModuleSnap, ModuleEntry) Then
|
AW: Zugriffsverletzung beim Ermitteln von Prozessen
ok... hab das auch noch angepasst ;-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz