| Autor |
Beitrag |
HenryHux
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: So 24.10.10 16:49
Hi,
ich wollte mal fragen, wie es möglich ist einen im Programm vorhandenen String in ein anderes Programm zu schreiben.
Hätte mir das so vorgestellt, dass es auf eine Stelle aufm Desktop klickt und somit auf ein Fenster zb ICQ.
Danach soll er dann den String dort eingeben, eintippen, wie auch immer.
Gibt es da eine "einfache" Methode über Tastatursimulationen und nicht per Handles oder so?
Lg
Henry Moderiert von Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mo 25.10.2010 um 09:58
|
|
jaenicke
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 24.10.10 17:20
Schau dir einmal keyb_event an. 
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: So 24.10.10 19:43
Ich glaube unter dem Name Sendkeys findest Du in Google fertige Routinen
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 24.10.10 22:07
Ohne Handle? Ich will mit dem Auto nach Hamburg fahren, aber ohne Motor. Wie mache ich das?
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: So 24.10.10 22:36
zum anpassen:
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: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66:
| procedure SendKeys(sText: String);
var i : Integer; shift : Boolean; vk, scancode : Word; ch : Char; c, s : Byte; const vk_keys : Array[0..9] of Byte=(VK_HOME, VK_END, VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_PRIOR, VK_NEXT, VK_INSERT, VK_DELETE); vk_shft : Array[0..2] of Byte=(VK_SHIFT, VK_CONTROL, VK_MENU); flags : Array[FALSE..TRUE] of Integer = (KEYEVENTF_KEYUP, 0); C_ALTGRS = ['\','@','~','²','³','€','{','}','[',']'];
begin shift:=FALSE; for i:=1 to Length(sText) do begin ch:=sText[i]; if (ch>=#250) then begin s:=Ord(ch)-250; shift:=NOT Odd(s); c:=vk_shft[s shr 1]; scancode:=MapVirtualKey(c, 0); Keybd_Event(c, scancode, flags[shift], 0); end else begin vk:=0; if (ch>=#240) then c:=vk_keys[Ord(ch)-240] else if (ch>=#228) then c:=Ord(ch)-116 else if (ch<#32) then c:=Ord(ch) else begin vk:=VkKeyScan(ch); c:=LoByte(vk); end;
scancode:=MapVirtualKey(c, 0);
if (sText[i] in C_AltGRS) then Keybd_Event(VK_RMENU, MapVirtualKey(VK_RMENU,0), 0, 0) else if (NOT shift AND (Hi(vk)>0)) then Keybd_Event(VK_SHIFT, $2A, 0, 0 ); Keybd_Event( c, scancode, 0, 0 ); Keybd_Event( c, scancode, KEYEVENTF_KEYUP, 0 ); if (sText[i] in C_AltGRS) then Keybd_Event(VK_RMENU,MapVirtualKey(VK_RMENU,0), KEYEVENTF_KEYUP, 0) else if (NOT shift AND (Hi(vk)>0)) then Keybd_Event(VK_SHIFT, $2A, KEYEVENTF_KEYUP, 0);
end; Application.ProcessMessages; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin Hide; Application.ProcessMessages; SendKeys('was auch immer') ; Show; end; |
Für diesen Beitrag haben gedankt: HenryHux
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: So 24.10.10 22:51
Hi,
du kannst mal hier gucken (Kapitel 3 vor allem)
www.delphi-library.d...+Messages_97738.html
Das beschreibt ziemlich genau das, was du zum Auslesen eines ICQ Fensters brauchst.
Das ganze funktioniert natürlich mit Handles, ist aber ziemlich einfach und nicht so umständlich (und ungenau) wie mit "Maus durch die Gegend schieben".
Wenn du unbedingt keine Handles willst, könntest du mal verraten warum, vielleicht kommt man dann auf eine andere Lösung 
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: So 24.10.10 23:40
@XION
Ich kann nur raten wofür er es braucht...
Ich selbst habe es gebraucht um eigene Drucker im Hintergrund zu installieren, um batchmäßg Formulare auszufüllen etc...
geht mit Sendkeys fast alles und ohne Handles
|
|
jaenicke
      
Beiträge: 19340
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 25.10.10 01:07
|
|
HenryHux 
      
Beiträge: 542
Erhaltene Danke: 33
Windows 7 Premium
Delphi XE, Eclipse
|
Verfasst: Mo 25.10.10 18:41
Hi,
danke erstmal für die Antworten, klappt soweit.
Hab einiges über Handles gelesen, ist mir aber nie so recht gelungen, deswegen erstmal so ne Methode =) Wie wären denn die entsprechenden API? Habt ihr vlt nen paar Links oder so, dann würd ich mir das mal durchlesen.
Danke,
Henry
|
|
|