Keyboard input emulation

How can I emulate the typing of a real person in TWebBrowser or TChromium. It can be either of these two.

+4
source share
2 answers

You will need some adaptations that may be useful for furthor development.

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 TForm4.FormCreate(Sender: TObject); begin WebBrowser1.Navigate('http://www.google.de'); end; procedure TForm4.SpeedButton1Click(Sender: TObject); begin SendKeys('test'); SendKeys(#13); end; 
+4
source

That should be enough to get you started.

 procedure EmulateKeyPress(); var _Input: TInput; begin _Input.Itype := INPUT_KEYBOARD; _Input.ki.wVk := VK_SHIFT; // $31 is the VK_1 _Input.ki.wScan := 0; _Input.ki.dwFlags := 0; _Input.ki.time := 0; _Input.ki.dwExtraInfo := 0; if SendInput(1, _Input, SizeOf(_Input)) = 0 then begin ShowMessage('Input event was Blocked'); Exit end; _Input.ki.dwFlags := KEYEVENTF_KEYUP; SendInput(1, _Input, SizeOf(_Input)); end; 
+4
source

All Articles