Как я могу отправить ключи в другое приложение, используя Delphi 7? - PullRequest
5 голосов
/ 12 марта 2012

Хорошо, так что в основном я пытаюсь отправить нажатия клавиш строки и отредактировать окно в активное окно и клавишу ввода после.Кто-нибудь здесь знает рабочий метод сделать это в Delphi 7?

Я искал это около полутора часов сейчас, и я, кажется, не могу найти что-нибудь, и вещи, которые я нашел, это эфир дляболее новые версии Delphi, или он просто не работает.Я пробовал TTouchKeyboard, но это только для Delphi 10 и новее.

Ответы [ 3 ]

9 голосов
/ 12 марта 2012

Я использовал это, чтобы отправить текст в надоедливое всплывающее 3G-приложение без интерфейса, это хак, если бы у нас не было выбора.

procedure TForm1.TypeMessage(Msg: string);
var
  CapsOn: boolean;
  i: integer;
  ch: char;
  shift: boolean;
  key: short;
begin
  CapsOn := (GetKeyState( VK_CAPITAL ) and $1) <> 0;

  for i:=1 to length(Msg) do
  begin
    ch := Msg[i];
    ch := UpCase(ch);

    if ch <> Msg[i] then
    begin
      if CapsOn then
      begin
        keybd_event( VK_SHIFT, 0, 0, 0 );
      end;
      keybd_event( ord(ch), 0, 0, 0 );
      keybd_event( ord(ch), 0, KEYEVENTF_KEYUP, 0 );
      if CapsOn then
      begin
        keybd_event( VK_SHIFT, 0, KEYEVENTF_KEYUP, 0 );
      end;
    end
    else
    begin
      key := VKKeyScan( ch );
      // UpperCase
      if ((not CapsOn) and (ch>='A') and (ch <= 'Z')) or
         ((key and $100) > 0) then
      begin
        keybd_event( VK_SHIFT, 0, 0, 0 );
      end;
      keybd_event( key, 0, 0, 0 );
      keybd_event( key, 0, KEYEVENTF_KEYUP, 0 );
      if ((not CapsOn) and (ch>='A') and (ch <= 'Z')) or
         ((key and $100) > 0) then
      begin
        keybd_event( VK_SHIFT, 0, KEYEVENTF_KEYUP, 0 );
      end;
    end;
  end;
end;

надеюсь, что поможет

UPDATE

Отредактировано для разрешения других символов (не буквенных), то есть смещенных цифр! "£ $ и т. Д.

6 голосов
/ 12 марта 2012

См. Функцию keybd_event . Вам нужно будет выполнить перевод между символами и кодами сканирования клавиатуры, но в Интернете полно информации об этом.

Если вам не нужно эмулировать , набрав , имеет смысл отправить WM_SETTEXT в окно редактирования и затем отправить Enter как клавиатуру. Это позволит вам избежать работы со сканкодами.

0 голосов
/ 05 октября 2014

Используйте SendKeys () из устройства SNDKEY32.PAS на установочном компакт-диске Delphi 7.Если вы не можете найти свой компакт-диск, посмотрите здесь .У меня отлично работает (Delphi7 на Windows 7).

...