Один из вариантов, нужный текст "набирается клавиатурой" в активном поле ввода, делалось 3 года назад в качестве разминки, в D7. Под юникодные версии Delphi не адаптировалось, не было необходимости.
| Код | function TForm1.GetVKCode(Ch: Char): Word; begin Result := VkKeyScanEx(Ch, GetKeyboardLayout(0)); if Result = High(Word) then begin Beep; Memo1.Text := 'Error'; Caption:=Ch; end; end; //============================================= var ch: Char; Input: TInput; IsUpperCase: boolean; begin for i:=1 to Length(FBuf) do // FBuf - строка, которую нужно набрать. begin ch := FBuf[i];
IsUpperCase := HiByte(GetVKCode(Ch)) <> 0;
Input.Itype := INPUT_KEYBOARD; Input.ki.dwFlags := 0; Input.ki.time := 0; Input.ki.dwExtraInfo := 0;
if isUpperCase then begin Input.ki.wVk := VK_SHIFT; SendInput(1, Input, SizeOf(TInput)); //Sleep(20); end;
Input.ki.wVk := LoByte(GetVKCode(ch)); SendInput(1, Input, SizeOf(TInput)); Sleep(10);
Input.ki.dwFlags := KEYEVENTF_KEYUP; SendInput(1, Input, SizeOf(TInput)); Sleep(10);
if isUpperCase then begin Input.ki.wVk := VK_SHIFT; SendInput(1, Input, SizeOf(TInput)); //Sleep(20); end; inc(FBufPos); end; end;
|
|