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

时间:2012-03-12 19:21:47

标签: delphi winapi keyboard delphi-7

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

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

3 个答案:

答案 0 :(得分: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;

希望有所帮助

<强>更新

编辑允许其他字符(非字母),即移位数字!“£$ etc。

答案 1 :(得分:6)

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

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

答案 2 :(得分:0)

在Delphi 7安装光盘上使用单元SNDKEY32.PAS中的SendKeys()。如果您找不到CD,请查看here。适用于我(Windows 7上的Delphi7)。