Einzelnen Beitrag anzeigen

blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: WM_QUERYENDSESSION ohne Fenster

  Alt 15. Nov 2012, 21:49
Ich hab folgendes Testprogramm, aber bekomme keine Messages:
Delphi-Quellcode:
program WinMsg;

uses
   Forms, Classes, Messages, SysUtils, Windows;

{$R *.res}

type
   TWndProcClass = class
   protected
      procedure WndProc(var msg: TMessage);
   public
      WinHandle: HWND;
   end;

procedure TWndProcClass.WndProc(var msg: TMessage);
begin
   MessageBox(0, pansichar(inttostr(msg.Msg)), 'msg', 0);
end;

var
   WndProcClass: TWndProcClass;
begin
   WndProcClass := TWndProcClass.Create;
   WndProcClass.WinHandle := AllocateHWnd(WndProcClass.WndProc);

   while True do begin
      Sleep(10);
   end;

   DeallocateHWnd(WndProcClass.WinHandle);
   WndProcClass.Free;
end.
Was mach ich falsch?

Edit:
Und zusätzlich die MessageLoop nicht vergessen, denn ohne einen Code, welche die MessageQueue verarbeitet, bekommt das Fenster zwar die Message, aber keiner verarbeitet sie und sie leibt in der Queue stecken.
Ich hab jetzt versucht eine MessageLoop zu improvisieren (hab sowas noch nie gemacht) und ich bekomme jetzt Messages. Aber wozu brauche ich denn jetzt das AllocateHWnd?

Edit2:
Ok, ich habs jetzt glaub ich so weit verstanden: Es gibt Messages für den Thread und andere für ein Window. Wenn ich also nur eine MessageLoop habe bekomme ich "Thread-Messages" aber keine "Window-Messages". Und scheinbar ist WM_QUERYENDSESSION eine solche "Window-Message".
Aber woher weiß ich denn welche Messages der Thread und welche nur ein Window bekommt? Gibt es da vielleicht eine Übersicht oder kennt jemand ein kleines Tutorial?

Geändert von blablab (15. Nov 2012 um 22:46 Uhr)
  Mit Zitat antworten Zitat