Windows Messages



  • Hallo,

    ich habe eine Frage zu der Messageloop in der Nachrichten an die WndProc gesendet werden (TranslateMessage dann DispatchMessage). Dort werden die sogenannten "Queued Messages" über z.B.: PostMessage verabeitet. Dan exisitiert noch die WndProc! Hier die "nicht queued Messages" über SendMessage.
    Meine Fragen:

    1. Muß ich immer ein Fensterklasse registrieren um dann (Windows, andere Applicaktion...) die WndProc direkt oder über DispatchMessage anzuspringen?
    2. Wie sähe denn eine Nachrichtenverarbeitung aus ohne registrierte Fensterklasse aus?

    z.B. EXE Dateien ohne Fenster (davon gibts im Taskmanager genug) können die auch ihre Nachrichten verabeiten? (oder bekommen die keine, weil kein Fenster?)

    Gruß
    Franky



  • Meines Wissens werden ALLE Messages zuerst in der Queue abgelegt und dann je nach Ziel-hWnd an das entsprechende Fenster weitergeleitet.

    Nachrichtenverarbeitung ohne registrierte Fensterklasse geht, wenn Du eine rein dialogbasierte Anwendung schreibst. Dann wird als erstes CreateDialog oder DialogBox von der WinMain aus aufgerufen, und der Dialog ist dann das Hauptfenster.

    Unregistrierte Fensterklassen gibt es nicht. Es gibt vorregistrierte Fenster (z. B. Buttons, Editfelder u. a.) die alle ihre eigene WndProc haben. Fenster ohne WndProc funktionieren nicht. Du kannst aber mehrere Fenster mit der selben WndProc ausstatten.

    Programme ohne Fenster bekommen keine Messages, weil Messages immer an Fenster gerichtet sind (enthalten das hWnd als Parameter). Macht allerdings auch wenig Sinn, da die Messages i. d. Regel dazu dienen, Kommunikation des Programms mit dem User zu ermöglichen, und wie willst Du als User auf ein Programm ohne Fenster zugreifen?



  • Ja, aber wenn ich z.B. nur einen Service schreiben will, der Daten bkommt und diese in eine Datei schreibt, muß ich doch auch auf ein "WM_QUIT" oder "WM_DESTROY" reagieren. Diese Nachrichten gehen doch auch ohne User wenn z.B. der Prozess beendet werden soll, aber eben noch eine Datei offen ist.

    Weil dann könnten der "sqlserver.exe" oder der "msimn.exe" oder ... keine Nachrichten empfangen weil kein Fenster.

    Gruß
    Franky



  • Elektronix schrieb:

    Meines Wissens werden ALLE Messages zuerst in der Queue abgelegt

    Nachrichten, die per PostMessage gesendet werden gehen direkt an die Fensterprozedur, deswegen kehrt PostMessage auch sofort zurück. Nachrichten, die mit SndMessage gesendet werden, landen in der Nachrichtenschleife, deswegn kehrt SendMessage auch erst zurück, wenn die Nachricht verarbeitet wurde.


Anmelden zum Antworten