AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) HWND_BROADCAST, ist relativ langsam, blockiert das System usw.
Thema durchsuchen
Ansicht
Themen-Optionen

HWND_BROADCAST, ist relativ langsam, blockiert das System usw.

Ein Thema von Kostas · begonnen am 11. Mai 2020 · letzter Beitrag vom 16. Mai 2020
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.742 Beiträge
 
Delphi 12 Athens
 
#1

AW: HWND_BROADCAST, ist relativ langsam, blockiert das System usw.

  Alt 12. Mai 2020, 08:28
muss es immer eine Form sein?
Es kann jede beliebige Klasse sein. Man muss sie nur passend aufbereiten. Hier ein Basisgerüst:

Delphi-Quellcode:
type
  TMessageListener = class
  private
    FWindowHandle: HWND;
    procedure WndProc(var Msg: TMessage);
  public
    constructor Create;
    destructor Destroy; override;
  end;

constructor TMessageListener.Create;
begin
  inherited;
  FWindowHandle := AllocateHWnd(WndProc);
end;

destructor TMessageListener.Destroy;
begin
  if FWindowHandle <> 0 then
  begin
    DeallocateHWnd(FWindowHandle);
    FWindowHandle := 0;
  end;
  inherited;
end;

procedure TMessageListener.WndProc(var Msg: TMessage);
begin
  Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.wParam, Msg.lParam);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.115 Beiträge
 
Delphi 12 Athens
 
#2

AW: HWND_BROADCAST, ist relativ langsam, blockiert das System usw.

  Alt 12. Mai 2020, 18:44
Hallo Uwe,

deinen Vorschlag mit der eigenen Klasse würde ich gerne umsetzen.

Ich habe folgenden Zustand: die gleichen source werden über zwei unterschiedliche .dpr Dateien kompiliert. Somit habe ich eine Eingang.exe und eine Ausgang.exe Die Anwendung selbst ist eine MDI-Anwendung. Ich könnte also eine zwei Klassen haben z.B.: TMessageListernerE und eine TMessageListernerA anlegen und über die .dpr entsprechend einbinden. Mit findWindow kann ich vermutlich nur sichtbare Formklassen finden. Gibt es eine Möglichkeit wie findWindow um die zwei Klassen TMessageListernerE und TMessageListernerA die auch keine Forms sind zu finden? Dann könnte ich gleich direkt adressieren und brauchte auch kein Broadcast um das handle an Eingang zu Ausgang und umgekehrt zu übertragen.

Alternativ könnten ich wenn findWindow auch unsichtbare Forms finden könnte, auch zwei Forms Eingang und Ausgang verwenden und in der jeweiligen Projektdatei entsprechend einbinden.

Zum nächsten, möchte die Nachricht versenden und NICHT warten bis die Anwendung antwortet. Sollte ich dafür besser PostMessage anstelle von SendMessage verwenden?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.742 Beiträge
 
Delphi 12 Athens
 
#3

AW: HWND_BROADCAST, ist relativ langsam, blockiert das System usw.

  Alt 12. Mai 2020, 21:34
Ich habe folgenden Zustand: die gleichen source werden über zwei unterschiedliche .dpr Dateien kompiliert. Somit habe ich eine Eingang.exe und eine Ausgang.exe
Einen ähnlichen Fall habe ich gerade vor ein paar Wochen realisiert. Ich stelle die (anonymisierten) Units später hier bereit.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming

Geändert von Uwe Raabe (12. Mai 2020 um 22:10 Uhr)
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.115 Beiträge
 
Delphi 12 Athens
 
#4

AW: HWND_BROADCAST, ist relativ langsam, blockiert das System usw.

  Alt 12. Mai 2020, 21:51
Vielen herzlichen Dank an alle und besonders dir lieber Uwe!!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.742 Beiträge
 
Delphi 12 Athens
 
#5

AW: HWND_BROADCAST, ist relativ langsam, blockiert das System usw.

  Alt 13. Mai 2020, 08:21
So, hier der versprochene Code.
Angehängte Dateien
Dateityp: zip IPCMessaging.zip (107,5 KB, 14x aufgerufen)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.115 Beiträge
 
Delphi 12 Athens
 
#6

AW: HWND_BROADCAST, ist relativ langsam, blockiert das System usw.

  Alt 13. Mai 2020, 19:05
Hallo Uwe,

wieder einmal tausend dank. Ich habe es zwar nicht 1:1 einsetzen können da das Projekt ein Delphi5 Projekt ist, aber ich konnte es für mein Projekt anpassen.

Dir noch eine schöne Zeit.

Gruß Kostas
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.742 Beiträge
 
Delphi 12 Athens
 
#7

AW: HWND_BROADCAST, ist relativ langsam, blockiert das System usw.

  Alt 16. Mai 2020, 08:26
Ich hatte das nicht erwähnt, aber die GUIDs zum Registrieren der Message-ID müssen natürlich für ein anderes Client/Server-Paar auch geändert werden. In dem Punkt gibt es sicher noch Raum für Verbesserungen. Aber es ging ja erstmal ums Prinzip.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:12 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