Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi sendkey methode umbauen (https://www.delphipraxis.net/121161-sendkey-methode-umbauen.html)

alleinherrscher 23. Sep 2008 12:21

Re: sendkey methode umbauen
 
Die Frage müsstest du dir teilweise selbst beantworten können: Wann wird der Code ausgeführt? -> Wenn du auf den Button klickst. Allerdings siehst du den 'test' - Text nirgendwo, weil du praktisch auf dein eigenes Formular tippst. Du musst also irgendwie das Fenster, wie z.B. Wordpad in den vordergrund holen, bevor du tippst.

Such also mal nach SetForegroundWindow

benny1452 23. Sep 2008 12:28

Re: sendkey methode umbauen
 
okay werd ich mal machen....aber könnte man nicht eine Pause von ungefähr 5 sekunden einbauen bevor er: TEST schreibt ?
Dann hätte ich also 5 Sekunden Zeit WordPad zu öffnen.

alleinherrscher 23. Sep 2008 12:44

Re: sendkey methode umbauen
 
Zitat:

Zitat von benny1452
okay werd ich mal machen....aber könnte man nicht eine Pause von ungefähr 5 sekunden einbauen bevor er: TEST schreibt ?
Dann hätte ich also 5 Sekunden Zeit WordPad zu öffnen.

Du kannst auch Wordpad direkt durch dein Programm öffnen lassen(Stichwort hierfür ist ShellExecute)

Natürlich kannst du auch ne 5 Sekunden Pause einbauen (mit sleep(5000) ) aber das halte ich nicht für sehr sinnvoll. Mir ist eh noch nicht so ganz klar, was du mit dem Programm machen willst...

benny1452 23. Sep 2008 13:07

Re: sendkey methode umbauen
 
Ich hab mir mal die sleep funktion angeschaut und herausgekommen ist folgendes:

Diese Funktion hab ich versucht einzubauen:

Delphi-Quellcode:
time:=GetTickCount;
while (GetTickCount-time < 5000 ) do
 application.ProcessMessages; //sonst friert das Programm ein
und hier nochmal der ganze code nachher hab ich das noch an der falschen stelle eingefügt oder sowas ^^

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure SendKeyString(KStr: String);
var
  Scan: SHORT;
  key: Byte;
  i: Integer;
  time: Longint;
begin
  for i := 0 to length(KStr) do begin
    key := Byte(Kstr[i]);
    Scan := MapVirtualKey(key, 0);
    keybd_event(key, Scan, 0, 0);
    keybd_event(key, Scan, KEYEVENTF_KEYUP, 0);
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
time:= GetTickCount;
while (GetTickCount-time < 5000) do
 application.ProcessMessages; //sonst friert das Programm ein



SendKeyString('test');


end;
end.
Ich bekomme aber noch diese fehler hier:
[Pascal Hinweis] Unit1.pas(32): H2164 Variable 'time' wurde deklariert, aber in 'SendKeyString' nicht verwendet
[Pascal Fehler] Unit1.pas(43): E2064 Der linken Seite kann nichts zugewiesen werden
[Pascal Fataler Fehler] Project1.dpr(5): F2063 Verwendete Unit '..\..\Desktop\Unit1.pas' kann nicht compiliert werden

danke nochmal für deine geduld =)

DeddyH 23. Sep 2008 13:28

Re: sendkey methode umbauen
 
time ist eine lokale Variable von SendKeyString, Du willst aber im ButtonClick darauf zugreifen.

[edit] Außerdem ist "time" ein unglücklich gewählter Name, da es auch eine Funktion dieses Namens gibt. [/edit]

benny1452 23. Sep 2008 13:40

Re: sendkey methode umbauen
 
ups..ja stimmt natürich...das problem hab ich jetzt gelöst....da smit den 5 sekunden pause klappt auch wunderbar.

Aber warum bekomm ich jetzt diese ausgabe: 14:33 23.09.2008514:33 23.09.2008 ?

Das ist doch zum mäuse melken, würde meine omi jetzt sagen :roll:

Nach deinem EDIT:

hhm ich hab jz alles was: "time" hieß unbenannt in "pause"
ich bekomm aber immernoch die zeit+datum ausgegeben anstatt mein bespieltext: TEST

:(

DeddyH 23. Sep 2008 13:55

Re: sendkey methode umbauen
 
Ich habe ein bisschen suchen müssen, aber versuch es mal mit dieser Funktion: Klick

benny1452 23. Sep 2008 14:05

Re: sendkey methode umbauen
 
okay...das klingt ja nach ungefähr dem gleichen...

Wo kann man denn da seinen Text bzw. die einzelnen Buchstaben eingeben ?
ich denke mal in so einer zeile hier:

Delphi-Quellcode:
if lWithShift then
      keybd_event(VK_SHIFT, 0, 0, 0);
VK_SHIFT bedeutet, dass die shifttaste gedrückt werden soll...das ist mir soweit klar aber wozu sind die drei Nullen dahinter ?

könntest du mal so eine beispielzeile posten ?

danke

DeddyH 23. Sep 2008 14:08

Re: sendkey methode umbauen
 
http://msdn.microsoft.com/de-de/ms64...us,VS.85).aspx

alleinherrscher 23. Sep 2008 14:37

Re: sendkey methode umbauen
 
So könnte es gehen, aber wie gesagt, sehr sinnvoll ist das nicht:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure SendKeyString(KStr: String);
var
  Scan: SHORT;
  key: Byte;
  i: Integer;
  time: Longint;
begin
  for i := 0 to length(KStr) do begin
    key := Byte(Kstr[i]);
    Scan := MapVirtualKey(key, 0);
    keybd_event(key, Scan, 0, 0);
    keybd_event(key, Scan, KEYEVENTF_KEYUP, 0);
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var tick,tack:integer; //lokale Variablendeklaration, gilt nur in dieser Procedure
begin

tick:= GetTickCount;
tack:= GetTickCount;

while (tack-tick < 5000) do
 begin
   application.ProcessMessages; //sonst friert das Programm ein
   sleep(20);                  //sonst ist die CPU Auslastung sehr hoch
   tack:=GetTickCount;
 end;


SendKeyString('test');


end;
end.

und nochwas wichtiges: Benutz doch bitte mal die Suchfunktion. Wir haben hier sehr viele Themen schonmal besprochen und du findest in der Regel immer eine passende Antwort mit der Suchfunktion. Wenn man richtig programmieren will, muss man sich manchmal auch selbst durchbeißen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 Uhr.
Seite 2 von 3     12 3      

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