![]() |
WM_GETTEXT + Unicode
Hi,
Wie muss diese Funktion aussehen, wenn sie Unicode Strings zurückgeben sollte? ..SendMessage durch SendMessageW ersetzen und dann?
Delphi-Quellcode:
function GetWindowText(wnd: HWND): string;
var TextLength: Integer; Text: PChar; begin Result := ''; if wnd = 0 then Exit; TextLength := SendMessage(wnd, WM_GETTEXTLENGTH, 0, 0); if TextLength <> 0 then begin GetMem(Text, TextLength + 1); SendMessage(wnd, WM_GETTEXT, TextLength + 1, Integer(Text)); Result := Text; FreeMem(Text); end; end; |
Re: WM_GETTEXT + Unicode
Musst du nicht die doppelte Länge an Speicher reservieren? WM_GETTEXTLENGTH gibt dochnur die Anzahl der Zeichen zurück:
Zitat:
|
Re: WM_GETTEXT + Unicode
So, habe mal ein wenig herumprobiert.
Wenn ich TextLength * 4 funktioniert's. Stimmt's etwa so oder gibt's noch was anderes zu beachten?
Delphi-Quellcode:
function GetWindowText(wnd: HWND): WideString;
var TextLength: Integer; Text: PWideChar; begin Result := ''; if wnd = 0 then Exit; TextLength := SendMessageW(wnd, WM_GETTEXTLENGTH, 0, 0); if TextLength <> 0 then begin GetMem(Text, TextLength * 2 + 1); SendMessageW(wnd, WM_GETTEXT, TextLength + 1, Integer(Text)); Result := Text; FreeMem(Text); end; end; |
Re: WM_GETTEXT + Unicode
Warum denn mal vier? :gruebel: Mal zwei sollte reichen.
|
Re: WM_GETTEXT + Unicode
Zitat:
Funktioniert jetzt aber seltsamerweise mit Mal 2 (hatte wohl etwas anderes noch geändert) |
Re: WM_GETTEXT + Unicode
Zitat:
|
Re: WM_GETTEXT + Unicode
Zitat:
Aber alles > #$FFFD ist eh noch nicht relevant. |
Re: WM_GETTEXT + Unicode
Zitat:
Zitat:
Statt es mal 2 zu nehmen sollte man IMMER sizeof(WideChar) benutzen (denn die Definition von WideChar kann sich ändern). Außerdem sollte man zur Textlänge 1 addieren für die schließende #0. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 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