Конференция "WinAPI" » Как напечатать чего-нибудь в текущем приложении?
 
  • DayGaykin © (11.07.18 19:58) [0]
    Хочу сделать эмулятор клавиатуры на основе своих данных.
    Мне желательно печатать именно текст и не париться по поводу раскладки и нажат ли CapsLock.
    Я попробовал имитировать Alt последовательности (с помощью SendInput), но не получилось:

     procedure SendKeyInput(Flags: Word; Key: Word);
     var
       Input: TInput;
     begin
       FillChar(Input, SizeOf(Input), 0);
       Input.type_ := INPUT_KEYBOARD;
       Input.ki.dwFlags := Flags;
       Input.ki.wVk := Key;
       SendInput(1, @Input, SizeOf(Input));
     end;

    begin
     SendKeyInput(0, VK_LMENU);

     SendKeyInput(0, VK_NUMPAD0);
     SendKeyInput(KEYEVENTF_KEYUP, VK_NUMPAD0);

     SendKeyInput(0, VK_NUMPAD6);
     SendKeyInput(KEYEVENTF_KEYUP, VK_NUMPAD6);

     SendKeyInput(0, VK_NUMPAD5);
     SendKeyInput(KEYEVENTF_KEYUP, VK_NUMPAD5);

     SendKeyInput(KEYEVENTF_KEYUP, VK_LMENU);
    end;



    Как быть?
  • DayGaykin © (11.07.18 20:16) [1]
    Разобрался


     procedure SendKeyInput(Flags: Word; Key: Word);
     var
       Input: TInput;
     begin
       FillChar(Input, SizeOf(Input), 0);
       Input.type_ := INPUT_KEYBOARD;
       Input.ki.dwFlags := KEYEVENTF_UNICODE or Flags;
       Input.ki.wScan := Key;
       SendInput(1, @Input, SizeOf(Input));
     end;

    var
     U: RawByteString;
     S: UnicodeString;
     I: Integer;
     C: UnicodeChar;
    begin
     U := 'Привет, как дела?';
     S := UTF8ToUTF16(U);
     for I := 1 to Length(S) do
     begin
       C := S[I];
       SendKeyInput(0, Word(C));
       SendKeyInput(KEYEVENTF_KEYUP, Word(C));
     end;
    end;



    код на фрипаскале
 
Конференция "WinAPI" » Как напечатать чего-нибудь в текущем приложении?
Есть новые Нет новых   [118243   +31][b:0][p:0.001]