![]() |
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 |
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.
|
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
|
Re: WindowMessage COPYDATA ohne Window empfangen
wenn er dir noch einfällt kannsten ja mal noch schreiben
|
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
|
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:
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.
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. Hab ich irgendwas vergessen? |
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 14:41 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