![]() |
Eigene Anwendung bei Mehrfachstart beenden
ich versuche gerade meine eigene anwendung zum test bei einem 2. start zu beenden. dazu suche ich das handle meiner anwendung BEVOR es gestartet wird.
wurde das fenster gefunden bedeutet das, dass meine anwendung bereits offen ist. also sende ich eine message mit SC_CLOSE.
Delphi-Quellcode:
auf meiner form ist ein TApplicationEvent und dort steht im OnMessage-Event:
begin
hExisting := FindWindow('TMeinTestForm', nil); if hExisting <> 0 then begin SetForegroundWindow(hExisting); SendMessage(hExisting, WM_SYSCOMMAND, SC_CLOSE, 0); Halt(1); end; Application.Initialize; // ...
Delphi-Quellcode:
sollte ich bei einem zweiten start meines programms nicht ein "X" zu sehen bekommen?
if Msg.message = WM_SYSCOMMAND then
if Msg.wParam = SC_CLOSE then showmessage('X'); |
AW: Eigene Anwendung bei Mehrfachstart beenden
Um zu erkennen, ob eine Anwendung mehrfach gestartet wurde bietet sich eigentlich ein
![]() Und es ist eigentlich einfacher, die neu gestartete Programm-Instanz einfach nicht starten zu lassen, als die schon laufende zu Beenden ;) |
AW: Eigene Anwendung bei Mehrfachstart beenden
das ist leider aber meine aufgabe die bereits laufende zu beenden, daraufhin wieder neuzustarten und mit gewissen parametern aufzuführen ;)
eine andere idee wäre über sendmessage einen integer zu senden, und den bei applicationevents on-message auszuwerten. dann bräuchte ich den neustart nicht. aber wie komme ich bei OnMessage an genau diese "nachricht"? |
AW: Eigene Anwendung bei Mehrfachstart beenden
Ein Mutex ist übrigens eine doofe Idee auf einen Terminalserver.
Dann bekommt keiner mehr eine weitere Instanz auf. |
AW: Eigene Anwendung bei Mehrfachstart beenden
Du kannst Dir doch eine WM_COPYDATA-Message schicken, wenn Du Daten übermitteln willst.
|
AW: Eigene Anwendung bei Mehrfachstart beenden
das kannte ich noch nicht, klingt aber einleuchtend.
nur leider kann man nur zahlwerte und keine zeichenketten senden =/ |
AW: Eigene Anwendung bei Mehrfachstart beenden
Zitat:
Doku lesen ;) Zitat:
|
AW: Eigene Anwendung bei Mehrfachstart beenden
Zitat:
![]() |
AW: Eigene Anwendung bei Mehrfachstart beenden
In den Parametern von WM_COPYDATA kannst du Zeiger auf Zeichenketten übergeben. Windows sorgt bei WM_COPYDATA dafür, dass das funktioniert.
|
AW: Eigene Anwendung bei Mehrfachstart beenden
das mit dem "letzten feld", verstehe ich übrhaupt nicht.
ich sende meinen "string" nun im ascii-format:
Delphi-Quellcode:
und egal was ich mache, folgendes trifft, warum auch immer, nie ein:
iNew := 0;
for i := 0 to Length(ParamStr(2)) - 1 do iNew := iNew + Ord(ParamStr(2)[i]); SendMessage(hExisting, WM_COPYDATA, iNew, 0);
Delphi-Quellcode:
if Msg.message = WM_COPYDATA then
showmessage(inttostr(Msg.wParam)); |
AW: Eigene Anwendung bei Mehrfachstart beenden
Lesen bildet:
Zitat:
|
AW: Eigene Anwendung bei Mehrfachstart beenden
das habe ich bereits gelesen aber ich verstehe es einfach nicht, deswegen wandle ich meinen string doch in ein integer-konstrukt um.
ich bekomme es ja scheinbar gesendet, aber ich kann es nicht empfangen. |
AW: Eigene Anwendung bei Mehrfachstart beenden
Klick doch einfach mal auf die Links die dir gegeben werden. Dann siehst du, dass du einen Record füllen musst und als Parameter an WM_COPYDATA übergeben musst.
Zitat:
|
AW: Eigene Anwendung bei Mehrfachstart beenden
![]() |
AW: Eigene Anwendung bei Mehrfachstart beenden
auf seite zwei steht doch was ich abgeändert habe:
Zitat:
|
AW: Eigene Anwendung bei Mehrfachstart beenden
:wall: WM_COPYDATA erwartet als 2. Parameter zwingend einen Zeiger auf die nun schon mehrfach angesprochene Struktur (ein Record). Wenn Du etwas anderes reinpackst, darfst Du Dich nicht wundern, dass es nicht funktioniert.
|
AW: Eigene Anwendung bei Mehrfachstart beenden
Zitat:
Vereinfachen wir das mal mit dem Wort
Code:
Du sendest also den Wert 42 an das Programm ;)
SUB (keine ASCII-Werte, sondern A=1, Z=26)
S = 19 U = 21 B = 2 19 + 21 + 2 = 42 |
AW: Eigene Anwendung bei Mehrfachstart beenden
Noch mal. WM_COPYDATA erwartet dort einen Zeiger auf eine Struktur und nichts anderes. Und wenn du nicht das übergibst, was Windows erwartet, dann funktioniert es eben nicht.
|
AW: Eigene Anwendung bei Mehrfachstart beenden
eigentlich war das alles nur als übung gedacht und somit um "weiterzukommen".
stattdessen muss man sich in diesem forum von den, so nennen sie sich wahrscheinlich selbst, "großen" anhören Zitat:
Zitat:
|
AW: Eigene Anwendung bei Mehrfachstart beenden
Nun hatte ich gerade eine Demo erstellt, aber wenn jemand lieber brüllt anstatt ein Minimum an Eigeninitiative zu zeigen, spare ich mir das Posten. Gute Nacht.
|
AW: Eigene Anwendung bei Mehrfachstart beenden
Zitat:
demzufolge, um aufzuräumen: das problem ist aus der welt und gelöst! |
AW: Eigene Anwendung bei Mehrfachstart beenden
Du hast völlig recht ... die Helfer hier im Forum solltem jedem, der nicht bereit ist 100.000 * erklärte Sachen nachzulesen, zum 100001 mal hinschreiben.
|
AW: Eigene Anwendung bei Mehrfachstart beenden
ironie scheint man wohl zu abonnieren, wenn man sich hier im forum registriert.
|
AW: Eigene Anwendung bei Mehrfachstart beenden
Zitat:
Zitat:
|
AW: Eigene Anwendung bei Mehrfachstart beenden
eine hausaufgabe war es nicht.
ich versuche mich einfach mit der delphi-sprache vertraut zu machen, da ich ursprünglich eine komplett andere gelernt hatte. ich nannte es "aufgabe", da ich es mir zum ziel gesetzt hatte, diese umsetzen zu können. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19: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