AGB  ·  Datenschutz  ·  Impressum  







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

Message korrekt behandeln

Ein Thema von KodeZwerg · begonnen am 21. Mai 2018 · letzter Beitrag vom 19. Sep 2022
 
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Message korrekt behandeln

  Alt 21. Mai 2018, 12:12
An SendMessage kommt man nur via Hooks ala WH_GETMESSAGE dran.
Benutzt mein Code das bereits?
Ich hab mal ein wenig umgeschrieben das man sieht das mein Hook beides verdaut.
Delphi-Quellcode:
program Projekt1;

uses
  SysUtils, Windows, Messages, Classes;

type TMyApp = Class
       FWnd: HWND;
       Constructor Create;
       Destructor Destroy; override;
       Procedure WndProc(var Msg: TMessage);
     end;

{ TMyApp }
Constructor TMyApp.create;
begin
  FWnd := AllocateHWnd(WndProc); //unsichtbares Fenster erzeugen
end;

Destructor TMyApp.Destroy;
begin
  DeallocateHWnd(FWnd);
  inherited;
end;

procedure TMyApp.WndProc(var Msg: TMessage);
begin
  //hier kommen die Messages an (SendMessage direkt, PostMessage über Funktion DispatchMessage)
  case Msg.Msg of
    WM_USER: case Msg.WParam of
               1: Messagebox(FWnd, 'catched WM_USER Msg!', 'PostMessage Catched', MB_ICONINFORMATION or MB_OK);
               2: Messagebox(FWnd, 'catched WM_USER Msg!', 'SendMessage Catched', MB_ICONINFORMATION or MB_OK);
               else Messagebox(FWnd, 'catched WM_USER Msg!', 'Unknown Message Catched', MB_ICONINFORMATION or MB_OK);
             end;
    WM_QUIT: case Msg.WParam of
               1: Messagebox(FWnd, 'catched WM_QUIT Msg!', 'PostMessage Catched', MB_ICONWARNING or MB_OK);
               2: Messagebox(FWnd, 'catched WM_QUIT Msg!', 'SendMessage Catched', MB_ICONWARNING or MB_OK);
               else Messagebox(FWnd, 'catched WM_QUIT Msg!', 'Unknown Message Catched', MB_ICONWARNING or MB_OK);
             end;
  end; // case
  Dispatch(Msg); // Das besagt das Msg abgearbeitet wurde und aus der Queue entfernt wird.
end;

function ThreadProc(Wnd :HWND): Integer;
begin
  Sleep(50);
  PostMessage(Wnd, WM_USER, 1, 0);
  SendMessage(Wnd, WM_USER, 2, 0);
  Sleep(5000);
  PostMessage(Wnd, WM_QUIT, 1, 0); //Programm beenden
  SendMessage(Wnd, WM_QUIT, 2, 0); //Programm beenden
  Sleep(1000);
end;

procedure Start;
var
  Msg: TMsg;
  App: TMyApp;
  Id: Cardinal;
begin
  App := TMyapp.Create;
  CloseHandle(BeginThread(nil, 0, @ThreadProc, Pointer(App.FWnd), 0, Id));
  while GetMessage(Msg, 0, 0, 0) do //auf message in der Queue warten
  begin
    //Message an Fenster verteilen
    DispatchMessage(Msg);
  end;
  App.Free;
end;


begin
  Start;
end.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
 


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 09:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz