SendMessage oder Postmessage einen String an ein Fenster senden
-
Hallo! ich versuche immernoch verzweifelt einen String an ein Fenster zu senden. Ich bekomme es mit einzelnden Buchstaben hin aber nicht mit einem String weiß jemand rat?
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
ich hab mein Beispielprogramm zu dem Thema leider nicht zur Hand.
Ich vermute, du verwendest WM_CHAR im Zusammenhang mit SendMessage.Du könntest dich mal mit WM_SETTEXT auseinandersetzen. Aber ich gebe hierzu
kein Versprechen ab
-
hamburger schrieb:
Hallo! ich versuche immernoch verzweifelt einen String an ein Fenster zu senden. Ich bekomme es mit einzelnden Buchstaben hin aber nicht mit einem String weiß jemand rat?
Welche Nachricht, eine eigene? Und an ein Fenster des eigenen Prozesses oder an das eines fremden Prozesses? Bei letzterem musst du aufpassen, da die Adressräume unterschiedlich sind und der andere Prozess nicht einfach so auf deinen String zugreifen kann; die Lösung bringt dir WM_COPYDATA (für "Standard"-Nachrichten wie WM_SETTEXT übernimmt Windows das Marshalling).
-
SendMessage hat nun einmal eine eingeschränkte Syntax! Zur Mitteilung mit eigenen Nachrichten stehen allein WPARAM und LPARAM zur Verfügung. Damit kannst du nur jeweils ein Zeichen an ein anderes Fenster schicken. Zum Mitteilen eines strings könntest du die Zeichen in einer Folge von SendMessage einzeln senden und zusätzlich mitteilen, wann der string beginnt und wann er endet. Das Zusammensetzen des strings ist dann Angelegenheit des empfangenden Fensters und auch das Anfügen des für strings erforderlichen Nullzeichens. Dieser Weg geht ohne Komplikationen immer!
-
Ja das habe ich ja schon probiert aber ich weiss nicht wie ich aus einem zeichen ein Hex wert raus bekomme
-
Keine Hex-Werte, sondern Long-Integer-Werte für WPARAM und LPARAM. Geht ganz einfach, etwa so:
char string[]="hallo"; int ichar,len,i; len = strlen(string); for(i=0;i<len;i++) { ichar = string[i]; SendMessage(hwndZiel,MSG_STRING,(WPARAM)i,(LPARAM)ichar); // Zeichen } SendMessage(hwndZiel,MSG_STRING,(WPARAM)(i+1),(LPARAM)0); // Stringende
WPARAM teilt hier den Index des Strings mit und LPARAM das Zeichen. Dieser Weg ist sicher. Für MSG_STRING muss natürlich eine 'userdefined message' verwendet werden. Und dann wird das ganze wie gesendet in hwndZiel wieder zu einem String zusammengebastelt. Mag sein, dass es anders etwas eleganter geht?
-
WM_COPYDATA wurde schon genannt und ist weitaus effektiver und schneller!
Zudem jeder SendMessage einen kompletten Kontextswitch verlangt.
-
Martin Richter schrieb:
WM_COPYDATA wurde schon genannt und ist weitaus effektiver und schneller!
Zudem jeder SendMessage einen kompletten Kontextswitch verlangt.
Alles klar Martin Richter. Der Fragesteller hatte eine konkrete Frage, für die er keine Lösung wusste. Jetzt hat er zwei mögliche Lösungen. In der Effektivität und der Geschwindigkeit gibt es wohl nur geringe Unterschiede. Soll der Fragesteller doch selbst entscheiden, womit er selbst am besten und schnellsten klar kommt. Es ist nicht unsere Aufgabe hier im Forum, das letzte aus der WinApi herauszuholen, wenn es um einfache Dinge und dann auch nur um Millisekunden geht.