![]() |
Buchstaben an Internetexplorer senden
Hallo !
Mit dem folgenden Code möchte ich Tasten an einen Internetexplorer senden:
Delphi-Quellcode:
Der Aufruf erfolgt mit:
procedure SendeTaste(Empfaenger: THandle; Zeichencode: Integer);
begin PostMessage(Empfaenger, WM_KEYDOWN, Zeichencode, 0); PostMessage(Empfaenger, WM_KEYUP, Zeichencode, 0); end; procedure SendeWortBuchstabenweise(Empfaenger: THandle; Text: string); Var i:integer; begin for i := 1 to length(Text) do begin SendeTaste(Empfaenger,Ord(Text[i])); end; end;
Delphi-Quellcode:
z.B.: SendeWortBuchstabenweise(HANDLE,Edit1.Text);
z.B.: SendeTaste(HANDLE,VK_TAB); Wenn man das Handle von einem Editorfenster übergibt, funktioniert alles tadellos. Buchstaben, Tabulatoren, Leertasten, Entertasten... Alles kommt im Editor an. Wenn man allerdings an einen TAB im aktuellen Internetexplorer in Windows 7 sendet, so kommt nur die Tabulatortaste an. Oder es kommt die Leertaste an, wenn der Focus auf einem Button liegt. Wenn der Focus auf einem Eingabefeld liegt, kommen keine Buchstaben im Eingabefeld an. Hat jemand eine Idee, wie man Buchstaben an ein Internet-explorer-fenster senden kann? (Chrome oder Edge wäre auch noch ok. Wobei ich dazusagen muss, dass im Chrome oder Opera z.B. nicht einmal die Tabulatortasten ankommen.) Gruß, Markus Effenberger |
AW: Buchstaben an Internetexplorer senden
Wenn du nicht auf Delphi angewiesen bist würde ich sowas eher mit einer Skriptsprache wie zB AutoHotkeys machen.
|
AW: Buchstaben an Internetexplorer senden
Zitat:
Man könnte natürlich Globale Tastendrücke machen.
Delphi-Quellcode:
Die funktionieren aber leider nur, wenn das Browserfenster den Focus hat.
procedure SendGlobalKeyPress(KChar: Char);
var Scan: SHORT; key: Byte; begin key := Byte(KChar); Scan := MapVirtualKey(key, 0); keybd_event(key, Scan, 0, 0); //Status: Gedrückt keybd_event(key, Scan, KEYEVENTF_KEYUP, 0); //Status: Normal end; Ich würde gerne Tastendrücke an Browserfenster senden, die sich im Hintergrund befinden. . |
AW: Buchstaben an Internetexplorer senden
Was willst du eigentlich erreichen?
Dein Lösungsansatz kommt mit doch reichlich "da könnte es das eine oder ander Problem geben und mit dem nächsten Windows/IE-Update wird das alles nicht mehr funktionieren" an. Wieso willst du Key an ein IE-Fenster senden? Was soll damit erreicht werden? |
AW: Buchstaben an Internetexplorer senden
Sein anderes Thema war
![]() Hier ging es darum ein Browser-Tab in den Vordergrund zu bringen und etwas vorzuführen. Ich persönlich würde das auch niemals so machen, da hast du nie Sicherheit dass das nach dem nächsten Update noch funktioniert. Im Browser am Benutzer vorbei etwas eingeben könnte auch etwas sein wo vielleicht manche Virenscanner drauf anspringen. Ich sehe in anderer Software so etwas (wenn man etwas "erklären" will) immer durch kurze Videoclips gelöst. |
AW: Buchstaben an Internetexplorer senden
Hi zusammen
@ Bernhard Geyer Schaut so aus, als wolle er da Formularfelder ausfüllen. Nun ja, da man Word und die andern Officeprogramme mit Delphi fernsteuern kann, liegt der Gedanke nahe, dies auch mit dem IE auszutesten. Ansonsten würde es sich anbieten, die betreffende Webseite nicht im IE zu laden, sondern in ![]() Gruss Delbor |
AW: Buchstaben an Internetexplorer senden
Zitat:
madas |
AW: Buchstaben an Internetexplorer senden
Könntest Du statt des IEs auch den TWebBrowser innerhalb Deiner Anwandung nutzen?
Wenn ja, ließe sich die Eingabe programmintern lösen. Weiß nicht mehr, wo ich das herhabe:
Delphi-Quellcode:
Ansonsten schau mal bitte hier:
// ...HTML Formulare mit TWebBrowser automatisch ausfüllen lassen?
function WBFillForm(wb: TWebBrowser; sFieldName: string; sValue: string): Boolean; var i, j: Integer; FormItem: Variant; begin Result := False; //no form on document if wb.OleObject.Document.all.tags('FORM').Length = 0 then begin Exit; end; //count forms on document for I := 0 to wb.OleObject.Document.forms.Length - 1 do begin FormItem := wb.OleObject.Document.forms.Item(I); for j := 0 to FormItem.Length - 1 do begin try // when the fieldname is found, try to fill out if AnsiUpperCase(FormItem.Item(j).Name) = AnsiUpperCase(sFieldName) then begin FormItem.Item(j).Value := sValue; Result := True; end; except Exit; end; end; end; end; ![]() Dort ist beschrieben, wie Du an eine Instanz vom IE kommen kannst. Die bekommst Du dann als IWebbrowser2 (definiert in SHDocVw). Mit der so erhaltenen Instanz kannst Du dann alles machen, was die Schnittstelle zulässt. Da der TWebBrowser in der gleichen Unit definiert ist, würde es mich wundern, wenn Du über einen so "gefundenen" IE nicht das Gleiche anstellen kannst, wie mit 'nem TWebBrowser. |
AW: Buchstaben an Internetexplorer senden
Zitat:
|
AW: Buchstaben an Internetexplorer senden
Nur als Hinweis: Der TWebBrowser kapselt standardmäßig einen uralten Internet Explorer 7. Du kannst ihn auch auf die jeweils neuste IE-Version einstellen, der kommt eigentlich mit allem klar.
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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