c#在最小化为托盘时,无法监听剪切板(clipboard)复制数据时候的变化
来源:互联网 发布:阿尔法软件官方下载 编辑:程序博客网 时间:2024/05/01 05:55
在做C#开发中,有一个需求是写一个托盘程序用于监听剪贴板的数据复制。
我遇到的问题是在正常情况下可以监听clipboard的数据变化,但是当我缩小为托盘程序的时候,托盘程序就无法监听剪贴板的数据变化了,再次双击托盘图标,还是照样的不能
实现监听板的监听功能。
原因分析:
在C#开发中,我使用的是
<code> [DllImport("user32")]
private extern static IntPtr SetClipboardViewer(
IntPtr hWnd);
[DllImport("user32")]
private extern static int ChangeClipboardChain(
IntPtr hWnd,
IntPtr hWndNext);
[DllImport("user32", CharSet = CharSet.Auto)]
private extern static int SendMessage(
IntPtr hWnd,
int wMsg,
IntPtr wParam,
IntPtr lParam);
</code>这三个方法来实现的剪贴板的复制功能。Form默认正常显示,点击关闭按钮后,缩小为托盘程序,以便于在后台监听
<code> protected override void WndProc(ref Message e)</code>用于获取监听到的剪贴板的数据数据,具体如何实现可以网上查找。
我在程序的实现中有对Form中的ShowInTaskbar这个属性的值进行修改,初始设置为false,因为我的Form默认是不显示出来,只是显示托盘程序,如果不设置为false的话,会在任务栏显示该应用程序正在运行,当重新设置了该属性之后。就无法进行CLIPBORAD的监听动作。
在Form中,我们如果改变它的一些属性,会导致该Form对应的句柄(Handle)值发生改变。这个时候,如果与之相关的方法没有进行及时更新Handle就会导致无法接受到复制事件。
解决方案:
当句柄值发生时,我们重新对其赋值,具体为
监听Form的 <code>HandleCreated</code>,<code> HandleDestroyed </code>事件,监听HandleDestroyed目的是为了在适当的时候注销掉剪贴板的监听功能,
即 调用<code> private extern static int ChangeClipboardChain(
IntPtr hWnd,
IntPtr hWndNext);</code>
当HandleCreated事件发生的时候。调用 <code>private extern static IntPtr SetClipboardViewer(
IntPtr hWnd);</code>方法。
这样我们就可以跟踪句柄(Handle)的生命周期,来实现监听功能
- c#在最小化为托盘时,无法监听剪切板(clipboard)复制数据时候的变化
- C#读取剪切板(Clipboard)中的数据的方法
- 简单的jquery一键复制值到剪切板--clipboard
- 窗口最小化为托盘图标
- 在无clipboard 的vim 中, 如何使用系统剪切板
- Clipboard 剪切板的应用&&Action
- 数据复制专用代码:监听剪切板并处理剪切板内容后放到剪切板
- 剪切板clipboard
- 向剪切板复制文本的js库——clipboard.js
- Vue-- 监听路由变化,数据无法更新?
- android中剪切板的应用(clipboard)
- SAP对ClipBoard(剪切板)的操作
- SAP对ClipBoard(剪切板)的操作
- 复制数据到剪切板
- 监听ContentProvider的数据变化
- 使用clipboard.js复制页面内容到剪切板
- Clipboard.js 复制内容到剪切板 ,不用Flash
- clipboard.js 实现动态获取内容并复制到剪切板
- SVN检出项目,Eclipse中无法找到项目解决方案
- 基于JavaMail的Java邮件发送:复杂邮件发送
- Android
- 二分贪心 E
- GITHUB使用教程
- c#在最小化为托盘时,无法监听剪切板(clipboard)复制数据时候的变化
- oracle简单DDL的使用
- 1602液晶移动显示
- PHP删除所有空格
- @Cacheable 缓存注解的用法
- Leetcode -- 29. Divide Two Integers
- 走进中关村软件园-光环敏捷PMI-ACP落地分享会
- Spring Boot Shiro 权限管理
- Ubuntu16.04 使用OpenSSL库实现RSA