繁体   English   中英

C#-覆盖Ctrl + C控件

[英]C# - Overwrite Ctrl+C control

我正在考虑创建一个简单的应用程序来存储我使用Ctrl + C复制的内容。 现在,我已经在Google上搜索了一些有趣的代码:(我宁愿发布指向它的巨大链接)

http://www.prilepi.com/221 (通过http://www.liensberger.it/web/blog/?p=207

http://www.prilepi.com/222

现在一切正常,唯一的问题是它完全覆盖了所有内容。 这意味着当我选择文本并按Ctrl + CI时无法获取我选择的文本。

我知道Clipboard类的,但没有被存储在...

如您所说,热键将消息完全隐藏在其他窗口中。 您需要做的是找到具有焦点的窗口,然后阅读其选定的文本(然后我猜想可能将其手动添加到剪贴板了吗?)

该代码段应找到聚焦的窗口。 它使用C ++,但是您可以轻松地将其转换为C#。

HWND GetGlobalFocus()
{
   GUITHREADINGO info;
   info.cbSize = sizeof(info);

   if (!GetGUIThreadInfo(0, &info))
      return NULL;

   return info.hwndFocus;
}

一旦有了它..这就是棘手的地方。 您可以执行PostMessage(hWnd, WM_COPY, 0, 0); 但如果该控件不支持此功能,它将无法正常工作(突出显示任何语法的控件很可能是非标准的,因此可能无法对此作出答复)。

您可以手动发送WM_GETTEXT消息以获取文本,然后将其手动添加到剪贴板,但是如果控件高度不符合标准,这又很可能使它失败,更不用说它不会保留应用程序可能的多种剪贴板格式(想一想)。

另一个选择是,当您收到热键,禁用挂接,再次使用keybd_event发送按键组合,然后再次启用挂接时,数据将保存在剪贴板中。 这似乎很笨拙,但它可能会起作用,具体取决于keybd_event是否被阻止,我不记得了。

希望这可以帮助!

要将东西添加到剪贴板,可以使用:

Clipboard.SetText(Text, TextDataFormat.Text);

除了文本以外,还有其他几种格式选项

还有另一种方法,尽管它有点弱,但假设您有一个文本框正在等待输入,则可以通过创建一个没有任何内容的新上下文菜单来分配空白的上下文菜单,然后将其分配给文本框。 这样,用户无法右键单击以调出用于复制/粘贴的默认上下文菜单。

编辑: 由于OP发布了一个不清楚的问题,“ C#覆盖Ctrl + C代码 ”,我想他的意思是,防止使用Ctrl + C复制到剪贴板。 对不起,如果我的回答是错误的。 您能否再说清楚一点,因为这听起来容易引起误解。

编辑#2:在OP的评论之后,我可以提供一个关于他试图完成的工作的线索,对于初学者来说,请转到CodeProject并阅读本文,并在全球范围内将其钩在剪贴板中,然后工作就完成了! 无需放入全局键盘挂钩! 连接事件ClipboardChangedClipboardStateChanged

希望这对您有所帮助,汤姆,谢谢。

暂无
暂无

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

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