繁体   English   中英

如何将文本从任何应用程序复制到剪贴板

[英]How to copy text from any app into clipboard

这就是我正在尝试做的

当用户通过鼠标左键和CRTL键选择任何正在运行的应用程序的任何文本时,应将所选文本复制到剪贴板。

到目前为止,我已经实现了使用 Global Keystroke 触发 CRT+ C 并将所选文本复制到剪贴板的逻辑。 此代码适用于 Google Chrome,但不适用于记事本。

    private static void OnMouseLeftButtonUp(object sender, MouseEventArgs e)
    {
        if ((ModifierKeys & Keys.Control) == Keys.Control)
        {
            IntPtr hWnd = GetWindowUnderCursor();
            SetForegroundWindow(hWnd);
            Thread.Sleep(500);

            //Ctrl + C
            new InputSimulator().Keyboard. 
                .ModifiedKeyStroke(VirtualKeyCode.CONTROL, VirtualKeyCode.VK_C);

            Thread.Sleep(500);
            MessageBox.Show(Clipboard.GetText());
        }
    }

这里发生了什么?

我想知道为什么这样一个浪费了我三天时间的好问题应该在没有任何评论的情况下被否决! 无论如何,我发现了问题所在。

在发送新的击键之前我不得不使用一些延迟(在我的情况下: Ctrl - C ),因为操作系统还没有处理以前的释放键(我的意思是:在OnMouseLeftButtonUp事件中控制键修饰符)。

所以,答案是一行:

private static void OnMouseLeftButtonUp(object sender, MouseEventArgs e)
{
    if ((ModifierKeys & Keys.Control) == Keys.Control)
    {
        IntPtr hWnd = GetWindowUnderCursor();
        SetForegroundWindow(hWnd);
        Thread.Sleep(500);

        Thread.Sleep(1000); // It's necessary to wait some time before sending new keysrokes

        new InputSimulator().Keyboard. 
            .ModifiedKeyStroke(VirtualKeyCode.CONTROL, VirtualKeyCode.VK_C);

        Thread.Sleep(500);
        MessageBox.Show(Clipboard.GetText());
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM