【问题标题】:Programming multiple custom Clipboard, using windows Clipboard - few complications使用 windows 剪贴板对多个自定义剪贴板进行编程 - 一些复杂性
【发布时间】:2014-09-18 18:41:58
【问题描述】:

我正在尝试构建一个 C# 后台应用程序,该应用程序将挂钩键盘击键(例如 CAPS + (A/B/C/....))作为复制到许多不同的剪贴板。

首先,我寻找了一种类似于 CTRL+V 的 Windows 方法:直接粘贴完整的字符串。我还尝试了 SendInputs 来“粘贴”,错误的想法是执行时间太长。由于没有找到任何商品,我决定使用 Windows 剪贴板。

场景是(当我做 CAPS+A 时)

  • 缓存剪贴板的内容以便以后检索
  • 模拟 CTRL+C
  • 获取剪贴板内容并将其设置为与“A”键对应的变量
  • 将剪贴板设置为默认缓存值。

当我在记事本上时,这很有效。但是当在另一个应用程序上执行 CTRL+C 时,我在第 3 步得到异常 CLIPBRD_E_CANT_OPEN(正好 5 秒,我的应用程序无法访问剪贴板)

我的问题: - 有没有办法在不使用 Windows 剪贴板的情况下向 Windows 发送信号以“粘贴”一些给定的文本,就像 CTRL+V 一样? - 有没有办法强制剪贴板在 5 秒内返回我的应用程序? - 我错过了一个更聪明的场景吗?

谢谢!

【问题讨论】:

  • 模拟击键完全是错误的做法。不过,这是一项非常艰巨的任务,在我看来,您还没有胜任这项任务。您可能希望查看执行此操作的现有开源(甚至商业)包,而不是用 C# 编写自己的包。我自己从未尝试过,但Ditto 看起来像一个剪贴板管理器,您可以查看。

标签: c# windows keyboard clipboard user32


【解决方案1】:

首先看一下这个拦截键:

[DllImport("user32.dll")]
public static extern int GetAsyncKeyState(long vKey);

VK_CONTROL = 0x11
VK_SHIFT = 0x10
C 键 = 0x43

如果按键被按下,该函数返回一个整数值>0。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多