![]() |
Re: Was sind Structures
Moin Willnix,
diese Konstanten sind, zumindest in D7, nicht deklariert. Wie CCRDude schon so richtig vermutete sind sie in der richedit.h deklariert:
Delphi-Quellcode:
Nicht alles, was im PSDK deklariert ist, wurde auch in Delphi umgesetzt.
const
EM_GETTEXTRANGE = WM_USER+75; EM_GETTEXTEX = WM_USER+94; Das PSDK (mit den Header-Dateien) kannst Du hier herunterladen (bis incl. 2003 R2 Server) ![]() oder noch aktueller, dafür deutlich grösser (bis incl. Vista) ![]() |
Re: Was sind Structures
Zitat:
Für neuer Sachen aus "richedit.h", die in "RichEdit.pas" noch nicht deklariert sind (z.B. EM_SETTEXTEX), kannst du mein ![]() |
Re: Was sind Structures
Zitat:
|
Re: Was sind Structures
Ah, ein Alter Ego von ezekiel?
Siehe Kontext: Das (Wort) "Klasse" von fwsp/Robert Marquardt, das ich wiederholte, schien dort nur für Pascal gemeint gewesen sein, deswegen (wie ich ja schon per PM erläuterte) verwendete ich es ungeschickterweise auch ohne weiterer Spezifikation im gleichen Sinne von Pascal-Klasse (die C++-class war ja zudem wie von Dir erläutert schon im struct abgedeckt im Satz ;) ). War vielleicht etwas unklar ausgedrückt, sorry :zwinker: |
Re: Was sind Structures
Ahh, vielen Dank Christian, ich werde mir das ganze dann gleich mal herunterladen.
Das ergibt so eindeutig Sinn. Ich hatte es natürlich auch mit der RichEdit.pas versucht aber dort war zwar vieles deklariert unter anderem auch GT_USECRLF, aber eben nicht EM_GETTEXTEX. Die richedit.h hatte ich eben gar nicht also werde ich mir die jetzt mal runterladen (bzw. gleich das ganze SDK). Vielen Dank nochmal an alle die mir geholfen haben Willnix P.S Ich hoffe jetzt gehts sonst muss ich hier doch noch weiter fragen. EDIT (grad erst Flockes Post gelesen): Zitat:
In MEINER RichEdit.pas ist zumindest EM_GETEXTEX NICHT deklariert, aber wie gesagt vieleicht liegts an meiner seltsamen Delphi Version. Nichts für ungut Willnix |
Re: Was sind Structures
Ich verzweifel noch daran.
Jetzt sind die Dinger Declariert, aber dafür bekomme ich immer einen leeren String zurück. Ich habe schon versucht das Wordpad Rich Edit auszulesen, ICQ Fenster auszulesen, ein Rich Edit im eigenen Programm auszulesen, alles ohne Erfolg. Immer ist die VAriable mit dem empfangen Text leer. Willnix Achja hier ist der Code den ich für Wordpad beutzt habe:
Delphi-Quellcode:
unit icq;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellAPI, ComCtrls, RichEdit; type LPGETTEXTEX = ^GETTEXTEX; GETTEXTEX = record cb: DWORD; flags: DWORD; codepage: UINT; lpDefaultChar: LPCSTR; lpUsedDefaultChar: PBOOL; end; TForm1 = class(TForm) Button1: TButton; RichEdit1: TRichEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; tex: GETTEXTEX; pc: PChar; wnd: HWND; implementation {$R *.dfm} function FindWindowEx2(hParent: HWND; ChildClassName: string; ChildNr: Word): HWND; var i: Word; hChild: HWND; begin hChild := 0; Result := 0; ChildNr := ChildNr - 1; for i := 0 to ChildNr do begin hChild := FindWindowEx(hParent, hChild, PChar(ChildClassName), nil); if hChild = 0 then Exit; Result := hChild; end; end; procedure TForm1.Button1Click(Sender: TObject); var wnd: HWND; begin tex.cb := SizeOf(pc); tex.flags := GT_USECRLF; tex.codepage := CP_ACP; tex.lpDefaultChar := nil; tex.lpUsedDefaultChar := nil; wnd := FindWindow('WordPadClass','Dokument - WordPad'); wnd := FindWindowEx(wnd, 0, 'RICHEDIT50W', nil); SendMessage(wnd, EM_GETTEXTEX, WPARAM(@tex), LPARAM(@pc[0])); if pc = '' then begin ShowMessage('NIX AUSGELESEN!'); end else begin RichEdit1.Text := pc; end; end; end. |
Re: Was sind Structures
Zitat:
Zeile 154/155:
Delphi-Quellcode:
Zeile 1151 ff.
{$EXTERNALSYM EM_GETTEXTEX}
EM_GETTEXTEX = WM_USER + 94;
Delphi-Quellcode:
{ flags for the GETEXTEX data structure }
const {$EXTERNALSYM GT_DEFAULT} GT_DEFAULT = 0; {$EXTERNALSYM GT_USECRLF} GT_USECRLF = 1; { EM_GETTEXTEX info; this struct is passed in the wparam of the message } type GETTEXTEX = record cb: DWORD; { count of bytes in the string } flags: DWORD; { flags (see the GT_XXX defines } codepage: UINT; { code page for translation (CP_ACP for default, 1200 for Unicode } lpDefaultChar: LPCSTR; { replacement for unmappable chars } lpUsedDefChar: PBOOL; { pointer to flag set when def char used } end; {$EXTERNALSYM GETTEXTEX} TGetTextEx = GETTEXTEX; Zitat:
|
Re: Was sind Structures
Moin Willnix,
was die Initialisierung von cb angeht solltest Du Dir noch einmal diesen ![]() Bei Dir wird dort 4 eingetragen, was nun wirklich nicht aussreicht ;-) pc ist ein PChar, also ein Pointer, und die Grösse eines Pointer ist 4. Ausserdem kannst Du das
Delphi-Quellcode:
auch so darstellen
LPARAM(@pc[0])
Delphi-Quellcode:
Was mir dann noch aufgefallen ist:
LPARAM(pc)
Bevor Du die Rückgabewerte von Funktionen benutzt, solltest Du erst einmal prüfen, ob der Aufruf erfolgreich war. Dies betrifft die FindWindow(Ex) Aufrufe. Zudem solltest Du zuerst EM_GETTEXTLENTHEX benutzen, um zu wissen, wie gross Du den Buffer machen musst, damit Du auch alles auslesen kannst. Wenn das alles nichts hilft, könnte es sein, dass das Control diesen Weg des Auslesens nicht mehr zulässt (siehe meinen Beitrag zum ListView weiter oben). |
Re: Was sind Structures
Um das "in D7 drin oder nicht" noch kurz evtl. aufklären: willnix hatte den Fehler " Undeclared Identifier:'EM_GETTEXTTEX'" ... Tippfehler, ein T zuviel :)
Fürs Auslesen ist mir gerade noch ein Tool eingefallen, das bei älteren Delphi-Versionen dabei war (bei neueren imho nicht mehr), irgendwas mit Dingsdabums-Spy oder so... das zeigte einen Baum sämtlicher GUI-Elemente auf dem Desktop an und konnte imho auch Texte abfragen (war ne gute Demo dafür, wie unsicher TEdit mit Passwordchar war... jedes andere Programm konnte den Text einfachst auslesen). Vielleicht findest Du damit mehr Infos bzw. kannst die Unterschiede zwischen verschiedenen RichEdits vergleichen. |
Re: Was sind Structures
Zitat:
Zitat:
Zitat:
Zitat:
Allerdings habe ich das ganze mit ICQ, meinem eigenen Programm und Wordpad getestet (@CCRDude natürlich habe ich vorher den FindWindowEx Aufruf usw. angepasst). Also denke ich, dass dieser Fall unwahrscheinlich ist. Vorausgesetzt sowas ist nicht Systemweit eingeschränkt. Aber danke schon mal Willnix |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 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