我编写了一个小型控制台应用程序,用于复制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中的 Web应用程序上的文字,并通过ShortKey运行我的控制台应用程序。
当我突出显示标签字段时,可行(从两个方面)。
当我突出显示任何输入字段时,但是它不起作用(方法1或方法2都没有)。
对于前。我的网络应用程序有标签联系人2(上图),接下来是输入字段。当我突出Lable即Contact2(通过双击)并运行我的控制台应用程序(通过按shorkey)时,我会得到突出显示的文本,但是当我为输入字段执行相同操作时,我什么也得不到。
为什么 Chrome 正在接受标签的复制通讯,而不接受输入。
感谢任何帮助。
答案 0 :(得分: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”,因为Control + Shift + C将触发Chrome中的Developer工具。
这确实可以在Chrome网站的输入字段中成功打印所选文字。
如果这对您不起作用,我会看到两种可能性:
如果这确实有效,但您的方法没有,那么触发代码的机制(使用某种形式的全局键盘快捷键)不起作用。也许是因为你使用的键盘快捷键已经被输入字段解释了。