Entwickler-Ecke
Windows API - sendkey methode umbauen
benny1452 - Di 23.09.08 10:29
Titel: sendkey methode umbauen
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:
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, 0, 0); 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:
http://www.delphi.de geschickt wird ?
danke schonmal
gruß benny
Moderiert von
Gausi: Delphi-Tags hinzugefügt
Xentar - Di 23.09.08 11:07
Was passiert, wenn du die Prozedur einfach mal aufrufst?
benny1452 - 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
Delete - Di 23.09.08 12:12
In welchem Forum willst du jetzt die antworten? :eyecrazy:
benny1452 - Di 23.09.08 12:54
hehe...ist mir eigentlich egal :)
:oops:
benny1452 - 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:
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 public 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, 0, 0); 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 - 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?
benny1452 - Di 23.09.08 14:23
okay....hier der link:
http://www.delphipraxis.net/post944785.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.
Delphi-Quelltext
1: 2: 3:
| time:=GetTickCount; while (GetTickCount-time < 5000 ) do application.ProcessMessages; |
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. - 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"]
http://www.delphi-forum.de[/url]
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!