Hallo ihr!
Ich habe schon lange gesucht, jedoch nichts gescheites gefunden.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| function TFmMain.OnlyOneInstance(ProgrammPfad: String): Boolean; begin Result := False; if not FileExists(ProgrammPfad) then begin Exit; end; hFile := CreateFile(pchar(ProgrammPfad), GENERIC_READ or GENERIC_WRITE or GENERIC_EXECUTE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if hFile = INVALID_HANDLE_VALUE then begin Result := True; end; if not Result then begin CloseHandle(hFile); end; end; |
So sieht meine Funktion aus... wenn das Programm jedoch bereits offen ist, gibt er mir die INVALID_HANDLE_VALUE Nummer (4294967295) zurück. Nun besteht mein Problem darin, dass ich dann das Programm nicht wieder aufrufen kann. Ich schaffe es zwar abzufangen, dass er hFile nicht überschreibt, wenn es diese INVALID_HANDLE_VALUE ist, jedoch suche ich nun noch eine Möglichkeit das Handle des Programms herauszufinden und es in HFile hineinzuschreiben.
Ich hoffe ich konnte euch genug Infos geben, ansonsten fragt nach. Ich kann soetwas immer sehr schlecht erklären
Gibt es eine Möglichkeit, den Handle von schon laufenden Programmen herauszufinden?
bzw. ist es möglich eine Liste zu erstellen mit Hilfe von einer Variablen, in der handle und zugehöriges Programm abgespeichert werden können, sodass man es, falls INVALID_HANDLE_VALUE = True ist abrufen kann?
Mit freundlichen Grüßen