![]() |
Re: Verhindern das die gleich Exe gestartet wird
Du könntest bei Programmstart Das WindowCaption auf den Programmpfad ändern und ('Test.exe:C:\test\test.exe') und prüfen ob ein Programm mit selbigen Fenstercaption existiert.(Weis nich ob sowas möglich ist, aber wenn dann müsste es gehen.)Wenn eins existiert dann schliesst du dein Prog.
|
Re: Verhindern das die gleich Exe gestartet wird
das wäre auch ne idee
jemand beispielcode wie ich nach einem fenster mit dem namen 'C:\test\test.exe' suche ? wie verhält sich das ganze, wenn die form mit form.visible = false auf unsichtbar steht ? |
Re: Verhindern das die gleich Exe gestartet wird
hmm.. die Form existiert trotzdem, denke ich also auch die FormCaption. Aber wie das geht, musst vielelicht mal die Forensuche bemühen
![]() |
Re: Verhindern das die gleich Exe gestartet wird
Zitat:
Auf diese oder ähnliche Weise könntest Du eine Liste erzeugen und kontollieren. Mal eine andere Frage: Ich möchte im Fall eines doppelt gestarteten Programms das schon vorhandene in den Vordergrund rücken (mit GetWindow oder FindWindow). Dabei habe ich noch nicht verstanden, wie ich alle gestarteten Programme mit dem Programmnamen finde (ich bekomme immer das Handle, was ich eigentlich gerade abschießen wollte). Grüße, Messie. |
Re: Verhindern das die gleich Exe gestartet wird
Das mit der Datei ist sogar nochbesser, eine Textdatei die am anfang in ne stringlist geladen wierd, dann wird geprüft ob ParamStr(0) schon drinsteht, wenn ja prog beenden, wenn nein ParamStr(0) reinschreiben.
|
Re: Verhindern das die gleich Exe gestartet wird
Wenn ich aber einen Eintrag in der Reg mache oder eine Datei erzeuge habe ich das Problem das dies auch noch vorhanden ist wenn sich zum Beispiel der Rechner aufhängt und ich neu starten muss. -> Man könnte das Programm nie mehr starten.
Bei einem Mutex passiert dies nicht. |
Re: Verhindern das die gleich Exe gestartet wird
man kann doch prüfen wann die Datei erstellt wurde/der Rechner neu gestartet wurde und falls die Datei älter ist diese löschen und neu erstellen.
|
Re: Verhindern das die gleich Exe gestartet wird
Zitat:
In einem Listeneintrag könnte man auch das Handle mit abspeichern und die Prüfung machen, ob dieses Handle gerade aktiv ist. Damit müßte ich doch alle ungültigen Einträge löschen können.. Grüße, Messie |
Re: Verhindern das die gleich Exe gestartet wird
das ist eine richtige scheiss idee :P was ist wenn das prog abstürzt? dann bleibt der string drin und man kann es nicht mehr starten. dann muss man es per hand aus der datei austragen
das mit dem mutex ist schon in ordnung. ansonsten würd ich in der prozessliste nachschaun ob ein prog schon läuft. Process32First / Process32Next in der unit tlhelp32 schau dir das mal an
Delphi-Quellcode:
function FindProcess(ExeNames: string): integer; stdcall;
function DeleteExe(s: string): string; var i, j: integer; begin setlength(result,length(s)); result := ''; j := 0; for i := 1 to length(s) do begin if (copy(s,i,6) = ('.EXE'#13#10)) then j := 4; if (j > 0) then dec(j) else result := result+s[i]; end; end; var FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; ContinueLoop: BOOL; exesearch,exeprocess: string; i: integer; begin result := 0; exesearch := deleteexe(uppercase(#13#10+exenames+#13#10)); FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); FProcessEntry32.dwSize := Sizeof(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32); while ContinueLoop do begin exeprocess := uppercase(uallUtil.extractfilename(FProcessEntry32.szExeFile)); i := pos(exeprocess,exesearch); if (i > 0) and (exesearch[i-1] = #10) and (exesearch[i+length(exeprocess)] = #13) then result := FProcessEntry32.th32ProcessID; ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32); end; CloseHandle(FSnapshotHandle); end; |
Re: Verhindern das die gleich Exe gestartet wird
Ich habe zu der wohlfeil formulierten Stellungnahme eine Antwort in meinem letzten Post nachgeschoben.
Ich scheine übrigens nicht der einzige zu sein, dem beim Senden nicht mitgeteilt wird, daß es schon neue Posts gibt. Ist die Funktion nicht mehr aktiv? Grüße, Messie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:09 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