如何使用delphi 7将密钥发送到另一个应用程序?

con*_*rbp 5 delphi keyboard winapi delphi-7

好吧,所以我试图将一个字符串的键击和编辑框发送到活动窗口和之后的回车键.有没有人知道在delphi 7中这样做的工作方法?

我一直在搜索大约一个半小时,我似乎找不到任何东西,我发现的东西是以太新版本的delphi,或者它只是不起作用.我尝试过TTouchKeyboard,但这只适用于delphi 10和更新版本.

Dam*_*uid 9

我用它来发送文本到一个没有界面的恼人的弹出式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;
Run Code Online (Sandbox Code Playgroud)

希望有所帮助

UPDATE

编辑允许其他字符(非alpha),即移位数字!"££等.

  • ok connor editied允许那些类型的字符,在我的应用程序中不需要它们但它现在就完成它们. (2认同)

Eug*_*its 6

请参阅keybd_event函数.您需要在字符和键盘扫描代码之间执行转换,但互联网上充满了关于此的信息.

除非您需要模拟输入,否则将WM_SETTEXT发送到编辑框窗口然后将Enter作为键盘发送是有意义的.这样可以避免处理扫描码.