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



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

我不知道如何解决的问题是:用户在本程序中的任意文本字段(例如文本框)中选择一个随机文本,并复制该数据。但是这些数据不能复制到经典的Windows剪贴板

Clipboard.SetText(Textbox1.Text);

因为剪贴板已经有了有价值的数据,不能丢失。所以我想创建第二个剪贴板侦听所有键盘输入。每当按下某个键组合时,它就会从任何应用程序(记事本、excel、我的程序等)读取选定的文本(只需要文本)。类似地,对于另一个键组合,它将复制的文本粘贴到任何应用程序(notepad, excel,…)

Windows已经有了快捷键CTRL+C和CTRL+V的功能,在任何不覆盖这些快捷键的应用程序中都可以使用。我想为我的自定义剪贴板应用程序/服务相同,具有不同的快捷方式。但我不知道如何获取和粘贴数据到任何windows应用程序中的任何文本字段。简而言之,我需要这样的内容:

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

基本上我想有两个windows剪贴板。

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

—edit—

找到了连接到这里按下的键的解决方案全局键盘钩子还在寻找一种方法来"连接"活动的应用程序和选定的文本进行复制和聚焦控件用于粘贴复制的文本。

你不能有两个windows剪贴板。你可以把一些东西放在一起,在某些情况下像剪贴板一样工作,但它并不适用于每个应用(或大多数应用)。最好的情况是,你可以在你控制的应用程序中用热键捕获文本,然后使用sendkeys将数据输入到其他合作的应用程序中。忘掉HTML、RTF、Bitmap这些花哨的格式吧。
我在1991年编写了最初的windows剪贴板扩展器(ClipMate),因此我看到了各种关于如何改进剪贴板的想法。这是最糟糕的一次。我写这篇评论并不是为了取笑你或你的客户,而是希望你能用它来说服你的客户不要在这个无用的项目上浪费大量的时间和金钱。

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

你探索过这些选项吗?

或许可以读一读这篇文章?

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

  1. 创建一个名为"MyClipBoard"的服务。
  2. 创建全局键盘钩子来查找您想要查找的任何键组合。即Ctrl + CCtrl + V的替代品
  3. 当你遇到一个用于复制的组合键时,寻找活动窗口,然后从该窗口获得选择。
  4. 将选择复制到"我的剪贴板"的内存区域。
  5. 当您遇到键盘粘贴组合时,将剪贴板中的数据粘贴到活动窗口的聚焦窗口。

这都需要对键盘钩子和Windows api有很好的了解。这可能也不是完美的解决方案。

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

相关内容

最新更新