Entwickler-Ecke
Dateizugriff - Handle von schon laufenden Programmen
s-hus - Do 13.12.07 14:09
Titel: Handle von schon laufenden Programmen
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
Delete - Do 13.12.07 15:13
Was um Gottes Willen, willst du erreichen? Du versuchst eine Datei zu öffnen und wenn das fehlschlägt weißt du wass? Der Name der Methode oist auch eher verwirrend? Willst du gucken, ob schon eine Instanz deines Programmes existiert oder was?
s-hus - Do 13.12.07 15:27
1. jedes Programm soll nur einmal geöffnet werden können (ich habe ein programm, aus dem ich .exe files aufrufen kann und auch andere files)
2. falls das Programm schon existiert, soll es in den vordergrund gebracht werden, um dem benutzer zu zeigen "hey, ich laufe schon".
OnlyOneInstance prüft, ob schon eine Instanz vorhanden ist, deswegen "onlyone" ...
Delete - Do 13.12.07 15:46
Das macht man aber mit einem
MUTEX.
s-hus - Do 13.12.07 15:51
der mutex hat mir aber z.b. nicht gesagt, wenn das Programm schon geöffnet war, bevor ich mein Delphi Programm gestartet hatte. Das wurde dann trotzdem doppelt geöffnet und das möchte ich ja nicht.
Delete - Do 13.12.07 16:13
s-hus hat folgendes geschrieben: |
der mutex hat mir aber z.b. nicht gesagt, wenn das Programm schon geöffnet war, bevor ich mein Delphi Programm gestartet hatte. Das wurde dann trotzdem doppelt geöffnet und das möchte ich ja nicht. |
Ja und wer oder was führt deinen Code aus, um zu überprüfen, ob schon eine Instanz existiert? Um den Code auszuführen muss nun mal erst der Prozess gestartet werden. Aber was hindert dich daran das Programm zu beenden, wenn schon eine Instanz existiert?
s-hus - Do 13.12.07 16:23
Das Programm soll helfen, wenn das Programm schon geöffnet ist, dass es nur aufgerufen wird und nicht geschlossen wird um es dann neuzustarten. Wenn man dort schon drin gearbeitet hat und die Änderungen nur noch nicht gespeichert hat und meinetwegen ein paar Stunden später an den Rechner geht und über das Delphi Programm die Instanz nochmal öffnen will, sind die Sachen futsch...
Delete - Do 13.12.07 17:07
Den verdrehten Satz habe ich jetzt nicht verstanden.
s-hus - Di 18.12.07 09:00
Mein programmiertes Programm soll helfen, wenn ein anderes Programm, welches über dieses aufgerufen wird, bereits geöffnet ist, dass das bereits geöffnete Programm in den Vordergrund gerufen wird und nicht geschlossen wird, um es aufzurufen.
So deutlicher, oder war das der falsche Satz? Ich kann mich bei programmiertechnischen Sachen unheimlich schlecht artikulieren, sorry.
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!