Sendkey 或 SendInput 不从输入字段复制

Sendkey or SendInput doesn't copy from input field

我编写了一个小型控制台应用程序,它可以从 Web 应用程序复制突出显示的文本。 我正在尝试以两种方式做到这一点

1) 通过简单的 Sendkeys

SendKeys.SendWait("^C");
 Application.DoEvents();

2) 通过 SendInput

Keyboard.SimulateKeyStroke('c', ctrl: true);

    public static void SimulateKeyStroke(char key, bool ctrl = false, bool alt = false, bool shift = false)
                    {
                        List<ushort> keys = new List<ushort>();

                        if (ctrl)
                            keys.Add(VK_CONTROL);

                        if (alt)
                            keys.Add(VK_MENU);

                        if (shift)
                            keys.Add(VK_SHIFT);

                        keys.Add(char.ToUpper(key));

                        INPUT input = new INPUT();
                        input.type = INPUT_KEYBOARD;
                        int inputSize = Marshal.SizeOf(input);

                        for (int i = 0; i < keys.Count; ++i)
                        {
                            input.mkhi.ki.wVk = keys[i];

                            bool isKeyDown = (GetAsyncKeyState(keys[i]) & 0x10000) != 0;

                            if (!isKeyDown)
                                SendInput(1, ref input, inputSize);
                        }

                        input.mkhi.ki.dwFlags = KEYEVENTF_KEYUP;
                        for (int i = keys.Count - 1; i >= 0; --i)
                        {
                            input.mkhi.ki.wVk = keys[i];
                            SendInput(1, ref input, inputSize);
                        }
                    }

我在 Chrome 中突出显示 网络应用程序上的文本,并通过快捷键 运行 连接我的控制台应用程序。

当我突出显示 label 字段时,它有效(从两种方式)。

但是当我突出显示任何输入字段.[=13=时,它不起作用(无论是方法1还是方法2) ]

例如。我的 Web 应用程序有标签 Contact 2(上图),接下来是输入字段。当我突出显示 Lable 即 Contact2(通过双击)和 运行 我的控制台应用程序(通过按 shorkey)时,我得到突出显示的文本但是当我对输入字段执行相同操作时,我什么也得不到。

为什么 Chrome 正在接受 Copy commnad for label 不适用于输入

感谢任何帮助。

我有一个启用了计时器的示例应用程序。在定时器事件中,有如下代码:

  private void timer1_Tick_1(object sender, EventArgs e)
  {
      SendKeys.SendWait("^c");
      Application.DoEvents();

      if (Clipboard.ContainsText())
      {
          var lText = Clipboard.GetText();
          textBox1.AppendText(lText);
      }
  }

请注意使用小 "c" 而不是大写 "C",因为 Control+Shift+C 将触发 Chrome 中的开发人员工具。

这确实成功地在 Chrome 的网站的输入字段中打印了选定的文本。

如果这对您不起作用,我认为有两种可能性:

  1. 您尝试从密码字段中获取文本。这行不通。
  2. 您将焦点放在不同的应用程序(您自己的应用程序)上以触发您的代码,因此在您的代码执行时输入字段不是具有焦点的控件。

如果这确实有效,但您的方法无效,那么您触发代码的机制(使用某种形式的全局键盘快捷键)不起作用。可能是因为您使用的键盘快捷键已经被输入字段解释了。