![]() |
RichEdit eines anderen Programms kontrollieren
Ich habe ein Programm das soll ein anderes 'bedienen'!
Das zu 'bedienende' Programm hat ein RichEdit und ich habe den Handle davon. Es wurde in Visual Basic geschrieben aber ich habe den Source Code nicht! Ich will jetzt mit meinem Programm die RichEdit des anderen durchscrollen und in einer bestimmten Zeile stehenbleiben. Bis jetzt mache ich es so das ich den Handle des anderen Programms nehme und an dieses Programm KeyEvents sende. Immer einen KeyDown damit der Cursor immer eine Zeile weiter runter springt. Es geht auch irgendwie das ich der RichEdit sage das der Cursor in die Zeile 25 springen soll nur weiß ich nicht ganz wie! Kann mir bitte jemand helfen!? FLOW |
EM_LINESCROLL. wParam: 0, lParam: Die Anzahl der zu scrollenden Zeilen.
|
Könntest du das bitte etwas genauer beschreiben :roll: !?
Das Problem ist ich habe den Class Name und nicht den Handle! Wie kann ich jetzt den Handle aus dem Class Name ermitteln!? FLOW |
Also um 12 Uhr hattest du noch das Handle. :roll: Was hast du damit gemacht?
Delphi-Quellcode:
Sollte um 10 Zeilen scrollen.
SendMessage(REHandle, EM_LINESCROLL, 0, 10);
Oder Moment? Hast du nur das Handle des fensters oder wie?
Delphi-Quellcode:
var
hWnd, REHandle : cardinal; begin hWnd := FindWindow(nil, 'Fenstertext'); // Handle des Hauptfensters REHandle := FindWindowEx(hWnd, 0, 'REClass', nil); SendMessage(REHandle, EM_LINESCROLL, 0, 10); |
Ich habe mich verschrieben, tut mir leid!
Ich habe nur den Classname des Fensters und der RichEdit! Den Handle des Fenster bekomme ich durch
Delphi-Quellcode:
jedoch sucht FindWindowEx nach einem ChildWindow und gibt mir 0 zurück!
H := findWindow('ThunderRT6FormDC',nil);
Funktioniert nicht ganz, gibts sonst noch etwas!? FLOW |
Genau FindWindowEx sucht nach dem Kindfenster, denn das ist ja dein RichEdit. Und wenn du da den richtigen Klassennamen angibst, solltest du auch ein gültiges Handle bekommen.
|
Bist du sicher das das geht?
Das Programm hat nämlich keine 'Kinder'. Es ist ein Fenster mit einer RichEdit! Der ClassName ist RichTextWndClass und das der Code:
Delphi-Quellcode:
FLOW
H := findWindow('ThunderRT6FormDC',nil);
H1 := FindWindowEx(H, 0, 'RichTextWndClass', nil); SendMessage(H1,EM_LINESCROLL,0,iBKmarks[i]); |
Zitat:
Zitat:
Delphi-Quellcode:
Mit dem Code widersprichst du dir doch selber. Das Elternfenster hat den Klassennamen ThunderRT6FormDC und das Kindfenster (das RichEdit) den Klassennamen RichTextWndClass. Aber liegt das RichEdit eventuell noch auf einem Panel oder so? Dann kommst du mit FindWindowEx nicht so einfach dran.
H := findWindow('ThunderRT6FormDC',nil);
H1 := FindWindowEx(H, 0, 'RichTextWndClass', nil); SendMessage(H1,EM_LINESCROLL,0,iBKmarks[i]); Ist das Programm nicht mit Delphi programmiert und hat das RichEdit einen eindeutige ID, kannst du an das Handle mit GetDlgItem() rankommen. FLOW[/quote] |
Jedes Element auf so einer Form ist ein Fenster und somit abhängig des Elternfensters. Deswegen sollte es damit funktionieren.
Kuck dir mal Luckies Tutorials an, sind wirklich gut (Lob an dich Luckie ;-)) |
Erklär mir das bitte genauer. Es ist schon möglich das die RichEdit noch auf einem Panel liegt, jedoch wurde das Programm in Visual Basic geschrieben.
Wie funktioniert das mit GetDlgItem()? FLOW |
![]()
Delphi-Quellcode:
Die ID kannst du mit meinem Tool WindowInfo von meiner Seite bekommen.
hRichEdit := GetDlgItem(hMainWindow, ID_RICHEDIT);
|
Danke Lukie, werd mich gleich mal darum kömmern!
Dein Tool ist klasse, hab mir auch so etwas in der Art geschrieben, nur zeigt es nicht so viel an. Allerdings wird bei der RichEdit 0x00000000 angezeigt! Ist das ein gültiger Wert!? Ach ja, hab mit deinem Tool gerade bemerkt das die RichEdit in einem Panel/Frame liegt das den Classname ThunderRT6Frame und die ID 0x00000004 hat. Muß ich das vielleicht auch noch einbinden!? FLOW |
Ich habs schon, klappt sehr gut!
Aber, die Richedit scrollt nur die gewisse Zeilenanzahl nach unten, der Cursor jedoch bleibt in der ersten Zeile stehen! Wie kann ich das lösen!? FLOW |
Lukie, bitte gib mir doch noch einen Tipp :roll: !
FLOW |
sakura hat gerade irgendwo Code gepostet, wie man den Cursor an die Stelle bekommt.
|
OK, kannst mir noch sagen wo!?
FLOW |
Finde es auch nicht mehr, sorry.
|
Moin Flow,
schau Dir mal die Messages EM_SCROLL bzw. EM_SCROLLCARET an. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 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