Tastaturereignis an Website übermitteln
Auf der Website http:\\thisissand.com kann man "Sandbilder" zeichnen. Dazu wird normalerweise direkt mit der Maus auf eine Zeichenfläche geklickt oder mit der Tastatur werden weitere Optionen gewählt (z. B. "C" für Color).
Da man die Maus so viel präziser steuern kann, möchte ich gerne ein Delphiprogramm schreiben, um die Maus- und Tastaturereignisse auszulösen. Das Laden der Website im Internetexplorer sowie das Auslösen der Mausereignisse funktionieren auch schon. Bei den Tastaturereignissen habe ich bereits verschiedene Dinge ausprobiert (SendMessage, PostMessage, KeyBd_Event), aber nichts hat funktioniert. Hier ein "Codeschnippsel" der fehlgeschlagenen Versuche:
Delphi-Quellcode:
Hat jemand eine Idee, woran es liegen könnte, dass das Tastaturereignis nicht übermittelt wird. Merkwürdig ist allerdings, dass das Minimieren des Browserfensters mit SendMessage funktioniert hat.
hExplorer := FindWindow('IEFrame', nil);
if hExplorer <> 0 then //SendMessage(hExplorer, WM_SYSCOMMAND, SC_MINIMIZE, 0); PostMessage(hExplorer, WM_CHAR, ord('c'), 0); Sleep(400); KeyBd_Event(Ord('C'), MapvirtualKey(Ord('C'), 0), 0, 0); Vielen Dank für jede Hilfe! Und hier der Code, der soweit bereits funktioniert. Das Close-Ereignis ist aber noch nicht optimal, da es eine Fehlermeldung gibt, falls ein anderes Browserfenster beim Schließen geöffnet ist als die betreffende Website.
Delphi-Quellcode:
unit UMain;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComObj, StdCtrls, Buttons; type TForm1 = class(TForm) SpeedButton1: TSpeedButton; SpeedButton2: TSpeedButton; procedure Button1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; IEApp: OLEVariant; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Nr: Integer; begin IEApp := CreateOLEObject('InternetExplorer.Application'); IEApp.Visible := True; IEApp.Top := 0; IEApp.Left := 0; IEApp.Width := Screen.Width; IEApp.Height := Screen.Height; IEApp.Navigate('http://thisissand.com/'); Sleep(5000); mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); for Nr := 100 downto 0 do begin SetCursorPos(450 + Nr, 150); Sleep(500); end; mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var WinHandle: HWnd; begin WinHandle := FindWindow('IEFrame', nil); if (WinHandle <> 0) then begin IEApp.Quit; end; end; end. |
Re: Tastaturereignis an Website übermitteln
Hallo, simuliere einen Character so:
Delphi-Quellcode:
procedure Simulate_Key(Key: Char);
begin keybd_event(Ord(Key),MapVirtualKey(Ord(Key), 0), 0, 0); keybd_event(Ord(Key),MapVirtualKey(Ord(Key), 0), KEYEVENTF_KEYUP, 0); end; procedure Simulate_C; begin Simulate_Key('C'); end; |
Re: Tastaturereignis an Website übermitteln
Vielen Dank!
Es hat sofort funktioniert :-D . Jetzt kann ich damit "weiterbasteln". Falls daraus mal ein brauchbares Progrämmchen wird, werde ich es hier posten, falls jemand auch Interesse daran hat. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz