![]() |
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 |
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. |
Re: sendkey methode umbauen
Zitat:
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... |
Re: sendkey methode umbauen
Ich hab mir mal die sleep funktion angeschaut und herausgekommen ist folgendes:
Diese Funktion hab ich versucht einzubauen:
Delphi-Quellcode:
und hier nochmal der ganze code nachher hab ich das noch an der falschen stelle eingefügt oder sowas ^^
time:=GetTickCount;
while (GetTickCount-time < 5000 ) do application.ProcessMessages; //sonst friert das Programm ein
Delphi-Quellcode:
Ich bekomme aber noch diese fehler hier:
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. [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 =) |
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] |
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 :( |
Re: sendkey methode umbauen
Ich habe ein bisschen suchen müssen, aber versuch es mal mit dieser Funktion:
![]() |
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:
VK_SHIFT bedeutet, dass die shifttaste gedrückt werden soll...das ist mir soweit klar aber wozu sind die drei Nullen dahinter ?
if lWithShift then
keybd_event(VK_SHIFT, 0, 0, 0); könntest du mal so eine beispielzeile posten ? danke |
Re: sendkey methode umbauen
|
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 10:16 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