Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Tastaturereignis an Website übermitteln (https://www.delphipraxis.net/117703-tastaturereignis-website-uebermitteln.html)

Kalakmul 23. Jul 2008 20:42


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:
  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);
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.

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.

toms 26. Jul 2008 06:05

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;

Kalakmul 26. Jul 2008 20:43

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