2016-03-15 29 views
0

我已经编写了一个小型控制台应用程序,它可以从Web应用程序复制highlightes文本。 我试图通过SendInputSendkey或SendInput不会从输入字段中复制

通过简单的SendKeys

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

2)做两种方式

1)

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); 
         } 
        } 

余米凸显镀铬和运行上Web应用程序的文本我的控制台应用程序通过一个ShortKey。

它的工作原理(从两个方面),当我选中一个标签场。

它不工作(均未从方法1方法2或)当我突出显示任何输入字段

enter image description here

例如,我的网络应用程序有标签联系人2(上图)和下一个它的输入字段。当我突出显示Lable即Contact2(通过双击)并运行我的控制台应用程序(通过按shorkey),我会得到突出显示的文本,但是当我对输入字段做同样的操作时,我什么也得不到。

为什么让在接受复制commnad标签不是输入

任何帮助表示赞赏。

+0

你如何触发你的代码被执行?你可以调试你的应用程序并使用一个断点来检查你的代码是否真的被激活了吗? – NineBerry

+0

@Nineberry:我尝试在控制台(Console.writeLine)上打印。这很难调试,因为如果我调试,那么我当前的窗口是VisualStudio而不是Chrome。我在我的代码中的许多位置添加了打印。并且代码每次都执行。唯一的问题是,Chrome正在接受Copy commnad for label,但不能输入 – Rupesh

+0

您还没有回答这个问题:您如何触发您的代码被执行? – NineBerry

回答

0

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

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”的,因为控制+ Shift + C键将触发Developer工具在Chrome中。

这样可以成功在Chrome中的网站输入字段中打印选定的文本。

如果这不适合你,我看到了两个可能性:

  1. 你尝试从密码字段中的文本。这不起作用。
  2. 您将焦点放在不同的应用程序(您自己的应用程序)上以触发代码,以便输入字段不是执行代码时焦点所在的控件。

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

+0

@Niberry:我不采取文本密码字段。这只是一个正常的输入字段。事实上,该表格有大约50个标签和50个字段。对于所有标签,我都会显示突出显示的文本,但不会显示字段。我不认为重点正在改变,因为当我突出显示标签(通过双击)它的工作原理,但是当我对输入字段做同样的操作时,它不起作用 – Rupesh

+0

您是否测试了其他网站?例如,我的示例应用程序与youtube和其他网站上的搜索框一起使用。也许有关于你的目标网页 – NineBerry

+0

是什么特别的?我刚刚在你的tube和stackoverflow上测试过。我也在这些网站上面临同样的问题。 – Rupesh