Einzelnen Beitrag anzeigen

Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: WM_QUERYENDSESSION ohne Fenster

  Alt 16. Nov 2012, 00:58
eine Minimalversion:

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils,classes,messages,dialogs,windows;

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


Function ProcessMessage(var Msg: TMsg): Boolean;

begin
  Result := False;
  if PeekMessage(Msg, 0, 0, 0, PM_NOREMOVE) then
  begin
      PeekMessageA(Msg, 0, 0, 0, PM_REMOVE);
      Result := True;
      if Msg.Message <> WM_QUIT then
        begin
          TranslateMessage(Msg);
          DispatchMessageA(Msg);
    end;
  end;
end;


procedure ProcessMessages;
var
  Msg: TMsg;
begin
  while ProcessMessage(Msg) do {loop};
end;



procedure TWndProcClass.WndProc(var msg: TMessage);
begin
   writeln('MSG:' + inttostr(msg.Msg));
   msg.Result := -1;
end;

var
   WndProcClass: TWndProcClass;
begin
   WndProcClass := TWndProcClass.Create;
   WndProcClass.WinHandle := AllocateHWnd(WndProcClass.WndProc);
   writeln('HWND:' + InttoStr(WndProcClass.WinHandle));
   while True do begin
      Sleep(10);
      processMessages;
   end;

   DeallocateHWnd(WndProcClass.WinHandle);
   WndProcClass.Free;
end.

Aufrufbeispiel aus einer anderen Anwendung über das Handle, welches hier bei Writeln ausgegeben wurde

Delphi-Quellcode:
procedure TForm5.Button1Click(Sender: TObject);
begin
sendmessage(2689556,wm_close,0,0)
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat