AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hänger bei Sendmessage

Ein Thema von Shark99 · begonnen am 6. Jul 2015 · letzter Beitrag vom 11. Jul 2015
Antwort Antwort
Seite 1 von 2  1 2      
Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#1

Hänger bei Sendmessage

  Alt 6. Jul 2015, 16:27
Ich will dass nur eine Instanz meiner App läuft. Dazu erzeuge ich einen Mutex.

MutexHandle := CreateMutex(nil, True, PROGNAME); Dann überprüfe ich on eine Instanz schon da
Delphi-Quellcode:
if GetLastError = ERROR_ALREADY_EXISTS then
...
und schicke ihr eine Nachricht dass der User das Programm nochmal gestartet hat
Delphi-Quellcode:
            SendMessage( HWND_BROADCAST,
                        MyMsg,
                        MSG_STARTAGAIN,
                        0 );
Die alte Instanz emfängt die Nachricht problemlos und kann darauf reagieren (ohne die MessageQueue zu blockieren, es wird nur ein Timer gestartet).

Das ganze mit Delphi 2009 unter Win 7 x64.

Nun passiert aber merkwürdiges. Die neue Instanz hängt dauerhaft bei SendMessage und ich muss den Task mit den Taskmanager beenden.

Hab auch ohne IDE Log in eine Datei geschrieben und der Code nach SendMessage wird definitiv nicht ausgeführt.

Help!
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Hänger bei Sendmessage

  Alt 6. Jul 2015, 16:38
Schon lange nicht mehr mit SendMessage gearbeitet. Ist es nicht so, dass SendMessage so lange nicht zurückkehrt, bis es verarbeitet wurde?
Zitat von Delphi Hilfe:
Die Funktion SendMessage sendet eine Meldung an ein oder mehrere angegebene Fenster.
SendMessage kehrt solange nicht zurück, bis die Meldung verarbeitet wurde. Die Funktion ruft die Fensterprozedur für das Fenster auf und kehrt solange nicht zurück, bis die Meldung verarbeitet wurde. Die Meldung wird, im Gegensatz zu der Funktion PostMessage, nicht in der Warteschlange plaziert.
Wie wäre es evtl. mit PostMessage?
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#3

AW: Hänger bei Sendmessage

  Alt 6. Jul 2015, 16:41
Ich mache das so ähnlich, nur mit einigen kleinen Unterschieden:
Delphi-Quellcode:
LimitInstancesMsg:= RegisterWindowMessage(PChar('LimitInstanceMessage.' + PRODUCTNAME));

hMutex:= CreateMutex(nil, True, PRODUCTNAME + PRODUCTNAME + PRODUCTCOPYRIGHT);
if GetLastError = ERROR_ALREADY_EXISTS then
begin
    SendMessage(HWND_BROADCAST, LimitInstancesMsg, 0, 0);
    Exit;
end;
Prinzipiell hat aber SendMessage, gerade bei einem Broadcast, das Problem, dass es erst zurückkehrt, wenn alle Fenster die Nachricht empfangen und verarbeitet haben (wie auch in meinem Code). Mögliche Lösungen: PostMessage statt SendMessage benutzen oder Fenster aller eigenen Instanzen suchen und die Message nur an diese senden.

MfG Dalai
  Mit Zitat antworten Zitat
Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#4

AW: Hänger bei Sendmessage

  Alt 6. Jul 2015, 18:53
PostMessage() kommt leider nicht in Frage, weil es kein Broadcast unterstützt.

Habe aber eine gute Lösung gefunden und zwar SendMessageTimeOut().
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.620 Beiträge
 
Delphi 12 Athens
 
#5

AW: Hänger bei Sendmessage

  Alt 6. Jul 2015, 18:58
PostMessage() kommt leider nicht in Frage, weil es kein Broadcast unterstützt.
Da sagt das MSDN aber etwas anderes:
Zitat:
HWND_BROADCAST
((HWND)0xffff)


The message is posted to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows. The message is not posted to child windows.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Hänger bei Sendmessage

  Alt 6. Jul 2015, 19:01
Warum ballerst du alle Fenster mit der Nachricht zu? Such dir das Handle deines Fenster und schicke es nur an dein Fenster.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#7

AW: Hänger bei Sendmessage

  Alt 6. Jul 2015, 19:11
PostMessage() kommt leider nicht in Frage, weil es kein Broadcast unterstützt.
Da sagt das MSDN aber etwas anderes:
Zitat:
HWND_BROADCAST
((HWND)0xffff)


The message is posted to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows. The message is not posted to child windows.
Funktioniert definitiv nicht. Habs schon vor Jahren ausführlich getestet. Man kann es absetzen, aber nichts kommt an.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.620 Beiträge
 
Delphi 12 Athens
 
#8

AW: Hänger bei Sendmessage

  Alt 6. Jul 2015, 19:39
Komisch, hier z.B. hat es funktioniert.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Shark99

Registriert seit: 16. Mai 2007
403 Beiträge
 
#9

AW: Hänger bei Sendmessage

  Alt 6. Jul 2015, 19:44
Genauer gesagt funktioniert es nur mit System Messages, nicht mit User Messages.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Hänger bei Sendmessage

  Alt 6. Jul 2015, 19:46
Warum ballerst du alle Fenster mit der Nachricht zu? Such dir das Handle deines Fenster und schicke es nur an dein Fenster.
Mit einer entsprechenden Umstellung heben wor vor Jahren auch den Hänger weg bekommen
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz