AGB  ·  Datenschutz  ·  Impressum  







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

SendMessage wartet nicht

Ein Thema von Sunlight7 · begonnen am 14. Nov 2016 · letzter Beitrag vom 14. Nov 2016
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#1

SendMessage wartet nicht

  Alt 14. Nov 2016, 16:25
Hallo zusammen!

Im MSDN steht:

Zitat:
The SendMessage function calls the window procedure for the specified window and does not return until the window procedure has processed the message.
Nun habe ich ein Problem damit, von einem Prozess aus wird SendMessage benutzt um zu einem anderen Prozess eine Nachricht zu schicken, dort wird ein Fenster per ShowModal angezeigt und das ModalResult als Result der Message zurück geschickt, dabei sollte der Thread mit SendMessage warten bis die Nachricht abgearbeitet wurde. Tut es aber nicht, SendMessage kehrt nach kurzer Zeit mit 0 als Result zurück. GetLastError meint dazu kein Fehler, also auch 0.

Pseudo Code:
Code:
Prozess 1:
Result:=SendMessage(RemoteWnd, WM_IPC_SHOWFORM, 0, 0);
// Hier gehts mit Result=0 kurz drauf weiter, obwohl Form2 noch nicht geschlossen wurde.


Prozess 2:
procedure TForm1.WndProc(var Message:TMessage);
begin
   Case Message.Msg of
      ...
      WM_IPC_SHOWFORM: begin
         Message.Result:=Form2.ShowModal;
         Exit; <- Hier gehts erst weiter sobald Form2 geschlossen wurde
      end;
   end;
   ...
end;
Warum wartet SendMessage nicht? Habs auch mit SendMessageTimeout versucht bei gleichem Ergebnis
Windows: Ja - Microsoft: Nein -> www.ReactOS.org

Geändert von Sunlight7 (14. Nov 2016 um 16:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: SendMessage wartet nicht

  Alt 14. Nov 2016, 16:27
Nimm mal INFINITE statt 0 für das Timeout, dann gehts auch Oder halt direkt MSDN-Library durchsuchenSendMessage, wenn du das Timeout nicht benötigst.
Hatte den letzten Satz überlesen.

Verwendest du noch Win2000? MSDN sagt, dass MSDN-Library durchsuchenGetLastError eigentlich ERROR_TIMEOUT enthalten sollte:
Zitat:
If the function fails or times out, the return value is 0. To get extended error information, call GetLastError. If GetLastError returns ERROR_TIMEOUT, then the function timed out.

Windows 2000: If GetLastError returns 0, then the function timed out.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (14. Nov 2016 um 16:37 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: SendMessage wartet nicht

  Alt 14. Nov 2016, 16:31
Dumme Idee: ShowModal() verursacht selber wieder das Senden und Abarbeiten von Messages. Ob der deine Message irgendwie runternimmt, damit nichts anfangen kann und wegwirft? Ich würde es mal nicht an TForm1 binden, sondern generell mit Application.RegisterWndProc(..) oder wie das hieß...

Mit dem "SendMessageTimeout" komme ich nicht klar: Die beiden Nullen sind eigentlich WPARAM und LPARAM. Kommt das "Timeout" nur von einem Test? Denn für "SendMessageTimeout" hat der Aufruf zu wenig Parameter...
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: SendMessage wartet nicht

  Alt 14. Nov 2016, 16:35
Dumme Idee: ShowModal() verursacht selber wieder das Senden und Abarbeiten von Messages. Ob der deine Message irgendwie runternimmt, damit nichts anfangen kann und wegwirft?
Au ja, das könnte auch sehr gut sein und würde auch erklären, warum MSDN-Library durchsuchenGetLastError keinen Fehlercode zurückgibt. Dann allerdings wundert mich, dass MSDN-Library durchsuchenSendMessageTimeout 0 liefert ..
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: SendMessage wartet nicht

  Alt 14. Nov 2016, 16:38
Ist ja auch ganz logisch. ShowModal blockiert solange bis dasn Fenster geschlossen wird. Das hat nichts mit SendMessage zu tun.
Dementsprechend kommt er zu dem exit logischerweise auch erst wenn das Fenster geschlossen wurde. Das andere Programm kriegt wohl
vorzeitig eine 0 zurück (Timeout) weil es ansonsten solange hängen würde bis das Fenster wieder geschlossen wird.

Unterm Strich heißt das: ShowModal im WndProc ist keine gute Idee.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#6

AW: SendMessage wartet nicht

  Alt 14. Nov 2016, 16:50
Dann wäre aber die Beschreibung im MSDN falsch.
Auch ein SendMessageTimeOut mit ner Zeit gegeben von einer Stunde wartet nicht solange.
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: SendMessage wartet nicht

  Alt 14. Nov 2016, 16:52
Kontrollierst du bitte nochmal deinen Quellcode? SendMessageTimeout(..) hat nicht vier Parameter, sondern mehr.
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#8

AW: SendMessage wartet nicht

  Alt 14. Nov 2016, 16:54
Verwendest du noch Win2000?
Windows 7
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#9

AW: SendMessage wartet nicht

  Alt 14. Nov 2016, 16:55
Kontrollierst du bitte nochmal deinen Quellcode? SendMessageTimeout(..) hat nicht vier Parameter, sondern mehr.
Das war nur ein Copy & Paste Fehler, sollte nur SendMessage sein
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#10

AW: SendMessage wartet nicht

  Alt 14. Nov 2016, 17:12
Ok nochmal von vorne Ein Result von 0 bei MSDN-Library durchsuchenSendMessage deutet NICHT auf einen Fehler hin. Ein Result von 0 bei MSDN-Library durchsuchenSendMessageTimeout aber definitiv schon. Ich gehe jetzt einfach mal von MSDN-Library durchsuchenSendMessage aus.

Das Problem hat Günther schon korrekt erkannt:
ShowModal startet eine eigene Message-Verarbeitung und sorgt deshalb dafür, dass deine eigene Message vom Default Message-Handler abgearbeitet und aus der Queue entfernt wird. Das ist dann der Moment, in dem MSDN-Library durchsuchenSendMessage aufhört zu blocken.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  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 10:42 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