Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi WindowMessage COPYDATA ohne Window empfangen (https://www.delphipraxis.net/18995-windowmessage-copydata-ohne-window-empfangen.html)

cheatzs 27. Mär 2004 11:08


WindowMessage COPYDATA ohne Window empfangen
 
Hey Leute,
kennt jemmand eine Möglichkeit die Message WM_COPYDATA zu empfangen, ohne das man ein Fenster machen muss? (also nonVCL ohne Fenster)
Ich brauch das Fenster nämlich nicht und möchte nicht nur einseitig mit einem anderen Programm über SendMessage kommunizieren.

Vielen Dank schonmal für alle Vorschläge.

Bye

Chewie 27. Mär 2004 11:11

Re: WindowMessage COPYDATA ohne Window empfangen
 
Ohne Fenster geht das nicht. Erstens können nur Fenster Nachrichten empfangen, zweitens musst du bei der WM_COPYDATA ja ein Fensterhandle als Ziel angeben. Benutz doch einfach ein unsichtbares Fenster.

SirThornberry 27. Mär 2004 11:12

Re: WindowMessage COPYDATA ohne Window empfangen
 
Besorg dir einfach ein handle... gibts irgend einen befehl (weiß den jetzt leider ni mehr) womit du dir ein handle holen kannst

cheatzs 27. Mär 2004 11:56

Re: WindowMessage COPYDATA ohne Window empfangen
 
wenn er dir noch einfällt kannsten ja mal noch schreiben

SirThornberry 27. Mär 2004 12:03

Re: WindowMessage COPYDATA ohne Window empfangen
 
das war "AllocateHwnd" aber ich lese grad in der hilfe das es auch als "Fenster erstellen" bezeichnet wird. Aber das Fenster sieht man dann halt ni. Die Funktion befindet sich in der Unit "classes". Also einfach mal den source angucken wie das handle von windows geholt wird

cheatzs 27. Mär 2004 12:59

Re: WindowMessage COPYDATA ohne Window empfangen
 
Also so wie ich das aus der Funktion lese bekommt die ihr Handle auch nur durch das Erstellen eines unsichtbaren Fensters.
Deshalb hab ich es jetzt mal so probiert: (nach Luckie's Tutorial)

Delphi-Quellcode:
function WndProc(wnd: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM):LRESULT; stdcall;
begin
  Result := 0;
  case uMsg of
    WM_CREATE:
      startcalculating;
    WM_COPYDATA:
      ShowMessage(String(ShortString(PCopyDataStruct(lp)^.lpData^)));
    WM_DESTROY:
      PostQuitMessage(0);
  else
    Result := DefWindowProc(wnd,uMsg,wp,lp);
  end;
end;

begin
  wc.hInstance := hInstance;
  RegisterClassEx(wc);
  CreateWindowEx(0, ClassName, AppName, WS_POPUP, 0, 0, 0, 0, 0, 0, hInstance, nil);
  while(GetMessage(msg,0,0,0)) do
  begin
    TranslateMessage(msg);
    DispatchMessage(msg);
  end;
  ExitCode := msg.wParam;
end.
Das Problem ist er empfängt jetzt WM_COPYDATA nur 1 mal und zeigt die Nachricht in nem MessageDialog an. Dann kann ich es so oft senden wie ich will, es passiert nix mehr.

Hab ich irgendwas vergessen?

cheatzs 27. Mär 2004 13:36

Re: WindowMessage COPYDATA ohne Window empfangen
 
Habs selbst gefunden...mehr oder weniger zu mindest.
Es lag wahrscheinlich am Aufruf des MessageDialogs und daran das er ja erst nach einer bestimmten Zeit wieder geschlossen wird oder was weiß ich.

Auf jeden Fall wenn ich irgendwas anderes mache, z.B. etwas in ne Datei schreiben, sobald ich das WM_COPYDATA erhalten, dann geht es.

Trotzdem vielen Dank für eure Hilfe,
vielleicht brauch ich das Fenster ja doch noch irgendwann ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz