![]() |
Text (Pfadangabe) per Windows Message verschicken
Hallo,
ist es möglich Text per eigene Message zu verschicken und dabei nicht WM_COPYDATA zu nutzen?? Habe schon das hier gefunden: ![]() aber das ist nicht das wahre, da er ab und zu nur Kaudawelsch bekommt! Oder liegts an mir?? |
Re: Text (Pfadangabe) per Windows Message verschicken
Reservier den notwendigen Speicher und übergib den Zeiger in LParam oder WParam. Dein Beispiel ist aber auch nichts anderes. Das gilt natürlich auch für Zeiger auf Records oder Instancen von Klassen (also Objekte).
Gruß oki |
Re: Text (Pfadangabe) per Windows Message verschicken
Wie soll ich den speicher reservieren? In der anderen Anwendung weiß ich ja nicht wie groß der Text ist, der dort ankommt? Oder hab ich gerade nur ne Denkblockade?
|
Re: Text (Pfadangabe) per Windows Message verschicken
nja, direkt Speicher reservieren mußt du nicht ... du mußt nur einen Zeiger auf die geünschten Daten verschicken und beim Empfänger ab dieser Adresse die Daten auslesen (wenn es ein anderer Prozeß ist, dann z.B. per
![]() |
Re: Text (Pfadangabe) per Windows Message verschicken
Joop, so wie himitsu es beschreibt. Eigentlich ist jede Variable auch ein Zeiger auf eine Speicherstelle. Der Witz ist nur, ob dieser Zeigen auch noch gültig ist wenn die Message ankommt. Bei einer lokalen Variable sehe ich das sehr kritisch.
Die Verwendung von SendMessage kommt nicht von Ohne. SendMessage wartet eigentlich auf die Ausführung und kehrt nach der Ausführung wieder zurück. Damit sollte eigentlich nichts schief gehen. Vertrauen würd ich darauf jetzt aber nicht. Gruß oki |
Re: Text (Pfadangabe) per Windows Message verschicken
Ich hab jetzt noch eine Möglichkeit gefunden das mit der GlobalAtom Function von Windows zu machen! Ist das eine gute lösung oder sollte ich davon lieber die Finger lassen? Hab nicht wirklich nen Schimmer wozu genau diese GlobalAtom Function ist oO
|
Re: Text (Pfadangabe) per Windows Message verschicken
Damit kannst du sozusagen einen systemweiten Wert registrieren (oder so). Das ist aber eher nicht dein Weg. Mehr mit Kanonen auf Spatzen geschossen.
Mußt du denn unbedingt SendMessage verwenden? Trotzdem sollte das mit dem PChar im Param klappen. Wenn dabei Mist raus kommt, dann ist dein Zeiger ungültig geworden oder an einer anderen Stelle schmiert was über den Speicher. Gruß oki |
Re: Text (Pfadangabe) per Windows Message verschicken
Zitat:
Messages währen eigentlich genau das richtige denke ich :gruebel: |
Re: Text (Pfadangabe) per Windows Message verschicken
Nutze dazu u.a. die GlobalLock() Funktion. Du versendest das Handle und jede Anwendung holt sich den Zeiger für den Zugriff mit GlobalLock.
|
Re: Text (Pfadangabe) per Windows Message verschicken
Habs jetzt so gelöst, aber irgendwie bekomme ich immer nur die ersten 3 Zeichen von der Pfandangabe! Was ist da noch falsch?
Delphi-Quellcode:
Den Code hab ich mehr oder weniger hier aus dem Forum!
procedure GlobalAllocFileName(aWnd: HWND; aText: String);
var Data: THandle; DataPtr: Pointer; Size: Integer; oldWND: HWND; begin Size := Length(aText) + 1; Data := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, Size); try DataPtr := GlobalLock(Data); try Move(PChar(aText)^, DataPtr^, Size); PostMessage(aWnd, WM_TSOPLAYFILE, INTEGER(dataptr^), 0) finally GlobalUnlock(Data); end; except GlobalFree(Data); raise; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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