VB International

23/03/2008 - 22:11 von Karl Schmidt | Report spam
Hallo,

suche nach einer Möglichkeit, mit GetWindowText Fenstertitel und mit
SendMessage(hWnd, WM_GETTEXT... Controls der Klassen Edit und RichEdit20A in
jeder beliebigen Sprach- und NT Betriebssystemumgebung (z.B. Chinesisch)
auslesen zu können, die ausgelesenen Zeichenfolgen zu speichern und diese
mittels Sendmessage(hWnd, WM_SETTEXT ... dann bei Bedarf wieder in die
Controls schreiben zu können, bzw. das Fenster anhand des Titels
identifizieren zu können.
Manuelles Editieren in den Edit Controls nicht erforderlich - nur Anzeige.
Habe mich mit UniCode noch nicht weiter befasst, aber ich denke, UniCode
wàre das Stichwort.

Kann mir da jemand auf die Sprünge helfen ?

Danke

Karl
 

Lesen sie die antworten

#1 Thorsten Albers
23/03/2008 - 23:16 | Warnen spam
Karl Schmidt schrieb im Beitrag
...
suche nach einer Möglichkeit, mit GetWindowText Fenstertitel und mit
SendMessage(hWnd, WM_GETTEXT... Controls der Klassen Edit und RichEdit20A


in
jeder beliebigen Sprach- und NT Betriebssystemumgebung (z.B. Chinesisch)
auslesen zu können, die ausgelesenen Zeichenfolgen zu speichern und diese

mittels Sendmessage(hWnd, WM_SETTEXT ... dann bei Bedarf wieder in die
Controls schreiben zu können, bzw. das Fenster anhand des Titels
identifizieren zu können.
Manuelles Editieren in den Edit Controls nicht erforderlich - nur


Anzeige.
Habe mich mit UniCode noch nicht weiter befasst, aber ich denke, UniCode
wàre das Stichwort.
Kann mir da jemand auf die Sprünge helfen ?



Prüfe mit IsWindowUnicode() zunàchst, ob das fragliche Fenster ein Fenster
ist, das die entsprechenden Daten bereits in Unicode-Kodierung speichert.
Ist das der Fall, rufst Du einfach die entsprechende 'W-Version' der
gewünschten API-Funktion auf, also z.B. GetWindowTextW(), SendMessageW().
Beachte, daß Du String-Argumente in diesem Fall nicht 'ByVal/ByRef As
String' deklarierst, sondern 'ByVal As Long' und mit 'StrPtr(MyString)'
übergibst.
Ist das dagegen nicht der Fall, verwendest Du die 'A-Versionen', holst die
entsprechenden Daten und wandelst sie mit MultiByteToWideChar() in Unicode
um. Hier besteht allerdings ein Problem: Du weißt nicht, mit welcher
Lokalen der jeweilige Prozeß bzw. sein entsprechender Thread làuft. Die
Lokale benötigst Du aber, um die geholten Daten in Unicode umzuwandeln.
Solange sich der Prozeß/Thread an die 'Windows-Vorgabe'
(GetSystemDefaultLCID(), GetThreadLocale() etc.) hàlt, sollte das kein
Problem sein (obwohl ich Dir im Augenblick nicht sagen kann, wie Du an die
aktuelle Lokale eines fremden Thread rankommst). Es gibt aber auch so
manche Anwendung, das die Änderung der Anwendungssprache programmintern
zulàßt und verwaltet. Hier hast Du m.E. keine Chance, an die Lokale
heranzukommen.

-
THORSTEN ALBERS Universitàt Freiburg
albers@
uni-freiburg.de
-

Ähnliche fragen