Entwickler-Ecke
Sonstiges (Delphi) - IsProcess funktioniert unter Delphi 2010 nicht mehr!
TheMexx - Mi 21.07.10 12:13
Titel: IsProcess funktioniert unter Delphi 2010 nicht mehr!
Bekomme bei rProcess.aExeFile, ein blödsinn Raus!
Unter Delphi 2007 funktioniert es noch! Betriebsystem WinXP!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| function IsProcess(ExeName: string): Boolean;
var liI, lSnapShot: Longint; rProcess : TProcessEntry32; begin Result := False; ExeName := UpperCase(ExeName); lSnapShot := CreateToolHelpSnapShot(TH32CS_SNAPPROCESS, 0); if lSnapShot <> 0 then begin rProcess.iSize := SizeOf(rProcess); liI := ProcessFirst(lSnapShot, rProcess); while liI <> 0 do begin if Pos(ExeName, UpperCase(rProcess.aExeFile)) <> 0 then begin Result := True; Break; end; liI := ProcessNext(lSnapShot, rProcess); end; CloseHandle(lSnapShot); end; |
end;
Hat wer eine Idee?
Moderiert von
Gausi: Delphi-Tags hinzugefügt
Gausi - Mi 21.07.10 12:52
Wenn es unter 2007 noch klappt, und unter 2010 Blödsinn rauskommt, würde ich spontan auf ein Unicode-Problem wetten. Zeigt der Compiler irgendwelche Hinweise an, dass irgendwo String/AnsiString/UnicodeString/UTF8String durcheinanderkommen?
Edit: Wenn ich richtig gegoogelt habe, sollte dir das weiterhelfen. ;-)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| TProcessEntry32 = packed record iSize, iUsage, iProcessID, iDefaultHeapId, iModuleId, iThreads, iParentProcessId, iPriClassBase, iFlags: Integer; aExeFile: array[0..MAX_PATH] of AnsiChar; end; |
TheMexx - Mi 21.07.10 13:54
Richtige annahme, Problem damit gelöst!
jaenicke - Mo 26.07.10 05:46
Das ist gar nicht notwendig. Mit der
mitgelieferten TlHelp32 Unit funktioniert es wunderbar. Da gibt es aExeFile auch gar nicht, sondern szExeFile. Das ist ein WideChar-Array, mit dem es mit Unicode wunderbar funktioniert.
Ich vermute daher, dass hier aus irgendeinem Grund TProcessEntry32 selbst deklariert wurde und das geht dann eben schief...
Und da die aufgerufenen Funktionen auf die WideChar-Versionen gemappt sind, wird es mit AnsiChar erst recht nicht gehen, sondern mit:
Delphi-Quelltext
1:
| szExeFile: array[0..MAX_PATH - 1] of WChar; |
Natürlich geht theoretisch auch AnsiChar, dafür gibts Process32FirstA, TProcessEntry32A, ..., aber das ist ja Blödsinn. ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!