如何从任何Windows应用程序复制和粘贴文本(第二个剪贴板)

时间:2011-08-23 09:45:02

标签: c# wpf copy clipboard paste

我在c#(WPF)中有一个Windows桌面应用程序,这基本上是管理呼叫中心应用程序的问题。它管理(添加,编辑,删除,...)客户问题(数据库中的记录),其中每个问题都有许多字段(文本框,textareas,复选框,...) 在生成问题时,用户经常将数据从其他资源复制/粘贴到此应用程序和其他应用程序(excel,记事本,浏览器......),并且有一个装满有价值数据的Windows剪贴板。

我不知道如何解决的问题是: 用户在该程序中的任何文本字段(例如文本框)中选择随机文本,并复制数据。但是这些数据无法复制到clasic windows clipboard

Clipboard.SetText(Textbox1.Text);

因为剪贴板已经有了宝贵的数据,不能丢失。 所以我想创建一个监听所有键盘输入的第二个剪贴板。每当按下某个键组合时,它会从任何应用程序(记事本,excel,我的程序......)中读取所选文本(只需要文本)。 与另一个键组合类似,它将复制的文本粘贴到任何应用程序(记事本,excel,..)

Windows已经具有快捷键CTRL + C和CTRL + V的功能,它可以在任何不覆盖这些快捷方式的应用程序中运行。 我希望我的自定义剪贴板应用程序/服务具有不同的快捷方式。但我不知道如何将数据粘贴到任何Windows应用程序中的任何文本字段。 简而言之,我需要这样的东西:

string clipboardData;

public void OnSpecialCopyShortcutPressed() {
  clipboardData = SelectedTextAnywhereInWindowsOrAnyWindowsApp.Text;
}

public void OnSpecialPasteShortcutPressed() {
  focusedTextFieldAnywhereInWindowsOrAnyWindowsApp.Text = clipboardData;
}

Basicaly我想要两个Windows剪贴板。

任何指针都会很棒。 谢谢。

---编辑---

找到解决方案,以便连接到此处按下的键global keyboard hook 仍在寻找一种方法来“连接”活动应用程序和选定的文本以进行复制和聚焦控件以粘贴复制的文本。

3 个答案:

答案 0 :(得分:0)

有几个optiosn可以在应用程序之间共享数据: IPC
内存映射文件
文件系统上的文件
通过localhost使用网络。

您是否探索过这些选项?

或许读一下这个article

答案 1 :(得分:0)

在这种情况下我会做的是:

  1. 创建名为“MyClipBoard”或其他的服务。
  2. 创建全局键盘挂钩以查找您尝试查看的任何组合键。即,Ctrl + CCtrl + V
  3. 的替代品
  4. 每当遇到用于复制的组合键时,请查找活动窗口,然后从该窗口中进行选择。
  5. 将选择内容复制到“MyClipBoard”中的内存区域。
  6. 当您遇到键盘粘贴组合时,请将剪贴板中的数据粘贴到活动窗口的焦点窗口。
  7. 这一切都需要熟悉Keyboard hooks和Windows API。这也许不是完美的解决方案。

    最重要的问题是:你为什么要这样做?这似乎不是解决问题的正确方法。

答案 2 :(得分:0)

你不能有两个Windows剪贴板。你可以将某些东西放在一起,在某些情况下就像剪贴板一样,但它并不适用于每个应用程序(或大多数应用程序)。您可以期望的最好的方法是在您可以控制的应用程序中使用热键捕获文本,并使用sendkeys将数据键入其他合作的应用程序。忘记HTML,RTF,Bitmap等奇特的格式 我在1991年编写了原始的Windows剪贴板扩展器(ClipMate),所以我看到了各种关于如何改进剪贴板的想法。这是最糟糕的事情之一。我将这篇评论包括在内,不是为了给你或你的客户带来乐趣,而是希望你可以用它来说服你的客户浪费大量的时间和金钱。