Autor Beitrag
benny1452
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 23.09.08 10:29 
Guten Morgen,

Es geht um einen Text den ich automatisch abtippen lassen möchte.
Jedoch hab ich die sendkey methode in vba schon ausprobier, klappt auch super, nun wollte ich mal fragen ob mir jemand was zu der sendkeymethode hier in delpihi erklären kann...gegoogelt hab ich selber schon...bekomm auch zum beispiel diesen code hier:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure SendKeyString(KStr: String);
var
  Scan: SHORT;
  key: Byte;
  i: Integer;
begin
  for i := 0 to length(KStr) do begin
    key := Byte(Kstr[i]);
    Scan := MapVirtualKey(key, 0);
    keybd_event(key, Scan, 00);
    keybd_event(key, Scan, KEYEVENTF_KEYUP, 0);
  end;
end;

Das ist jetzt irgenein Beispiel...kann mir einer den code so umbauen das an ein aktives fenster z.B: www.delphi.de geschickt wird ?

danke schonmal

gruß benny

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 23.09.08 11:07 
Was passiert, wenn du die Prozedur einfach mal aufrufst?

_________________
PROGRAMMER: A device for converting coffee into software.
benny1452 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 23.09.08 11:48 
hi,

also wenn ich auf: Datei->Neu->Neue VCL Anwendung gehe, dann ein Button erstelle, auf den dann ein doppelklick mache und dort den code einfüge kommen 3 Fehler:

[Pascal Fehler] Unit1.pas(40): E2029 Deklaration erwartet, aber Dateiende gefunden
[Pascal Fehler] Unit1.pas(12): E2065 Ungenügende Forward- oder External-Deklaration: 'TForm1.Button1Click'[Pascal Fataler Fehler] Project2.dpr(5): F2063 Verwendete Unit 'Unit1.pas' kann nicht compiliert werden

ICh bin völliger anfänger, hab lediglich ein bisschen mit visual basic rumrogrammiert.

dies ist ja auch nur ein beispiel für eine Tastenkombi. Kann man daraus irgendwie das so hinbauen das ich nen ganzen satz schreiben lassen kann ?
Ob ich das prgramm am ende nur einfach ausführe oder auf nen button klicken muss ist egal...

danke schonmal
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 23.09.08 12:12 
In welchem Forum willst du jetzt die antworten? :eyecrazy:
benny1452 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 23.09.08 12:54 
hehe...ist mir eigentlich egal :)
:oops:
benny1452 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 23.09.08 13:11 
okay...für alle die den beitrag im anderen Forum nicht mitgelesen haben hier ein kleines Feedback.

der code sieht bis jetzt so aus:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
unit Unit1;

interface

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

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;
begin
  for i := 0 to length(KStr) do begin
    key := Byte(Kstr[i]);
    Scan := MapVirtualKey(key, 0);
    keybd_event(key, Scan, 00);
    keybd_event(key, Scan, KEYEVENTF_KEYUP, 0);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

  SendKeyString('test');

end;

end.


nun hab ich dussel nur noch ein paar kleine fragen:
ich muss doch nun z.B. wordpad öffnen und das dann als aktives fenster machen oder ?
Und wie lange hab ich dann vom ausführen unseres kleinen progs zeit das wordpad aktive zu setzten ?

danke schonmal
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 23.09.08 14:14 
1. Crossposts in andere Foren bitte verlinken
2. Sobald du auf den Button klickst, wird der Code ausgeführt. Du hast also "gar keine" Zeit, zu Wordpad zu wechseln (vielleicht einige wenige ns..) Ein Timer könnte helfen.
3. Hat das irgendeinen Grund, warum du mit sowas schwierigem anfängst, wenn du bisher von Delphi keine Ahnung hast?

_________________
PROGRAMMER: A device for converting coffee into software.
benny1452 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 23.09.08 14:23 
okay....hier der link: www.delphipraxis.net...st944785.html#944785

Joa und wie ihr dort seht komm ich schonwieder nicht weiter. Ich bin gerad dabei herauszufinden an welche stelle ich diese funktion einbauen soll und was man alles deklarieren muss.

ausblenden Delphi-Quelltext
1:
2:
3:
time:=GetTickCount;
while (GetTickCount-time < 5000 ) do
application.ProcessMessages; //sonst friert das Programm ein


ps: wie kann man den link eigentlich hinter ein anderes Wort verstecken, sodass man nur auf das wort klicken muss um den Link zu folgen ? Ich seh das schon so oft, weiß aber nich wie das geht ..

danke
gruß benny
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Di 23.09.08 14:55 
Time und GetTickCount sollten als LongWord oder Integer deklariert werden. Siehe dazu auch die DOH zum Thema GetTickCount (F1).
Application Processmessages sorgt dafür, dass die Fensternachrichten derweil abgearbeitet werden, damit dein Programm nicht einfriert. ;)

Zum korrekten Verlinken: [url="Text"]www.delphi-forum.de[/url]