当前位置:首页 > 开发 > C# > 正文内容

C# 监控剪贴板

C#3年前 (2022-09-27)
命名空间    
using System.Runtime.InteropServices;


API    
/// <summary>
/// 注册剪贴板观察链
/// </summary>
/// <param name="hwnd">当前窗口句柄</param>
/// <returns></returns>
[DllImport("user32")]
private static extern IntPtr SetClipboardViewer(IntPtr hwnd);
 
/// <summary>
/// 注销剪贴板观察链
/// </summary>
/// <param name="hwnd">当前句柄</param>
/// <param name="hWndNext">下一个句柄</param>
/// <returns></returns>
[DllImport("user32")]
private static extern IntPtr ChangeClipboardChain(IntPtr hwnd, IntPtr hWndNext);
 
/// <summary>
/// 发送消息
/// </summary>
/// <param name="hwnd"></param>
/// <param name="wMsg"></param>
/// <param name="wParam"></param>
/// <param name="lParam"></param>
/// <returns></returns>
[DllImport("user32")]
private static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);


常量    
/// <summary>
/// 776
/// 当剪贴板的内容变化时发送此消息给剪贴板观察链的窗口
/// </summary>
const int WM_DRAWCLIPBOARD = 0x308;
/// <summary>
/// 781
/// 当一个窗口从剪贴板观察链中移去时发送此消息给剪贴板观察链的窗口;
/// </summary>
const int WM_CHANGECBCHAIN = 0x30D;


使用    
IntPtr NextClipHwnd;
private void Form1_Load(object sender, EventArgs e)
{
    NextClipHwnd = SetClipboardViewer(this.Handle);
}
protected override void WndProc(ref System.Windows.Forms.Message m)
{
    switch (m.Msg)
    {
case WM_DRAWCLIPBOARD:
 
    IDataObject iData = Clipboard.GetDataObject();
    
    if (iData.GetDataPresent(DataFormats.Text) | iData.GetDataPresent(DataFormats.OemText)) //文本
    {
this.textBox1 .Text = (String)iData.GetData(DataFormats.Text);
    }
 
    SendMessage(NextClipHwnd, m.Msg, m.WParam, m.LParam);
    break;
default:
    base.WndProc(ref m);
    break;
    }
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    ChangeClipboardChain(this.Handle, NextClipHwnd);
    SendMessage(NextClipHwnd, WM_CHANGECBCHAIN, this.Handle, NextClipHwnd);
}



转载请注明出处。

本文链接:http://pythonopen.com/?id=213

相关文章

C# System.IO.Path

System.IO.Path.GetExtension返回指定的路径字符串的扩展名。string&n...

C# Winform 拖放文件

private void Form1_Load(object send...

C# decimal

概述在 C# 中,decimal是一种数据类型,用于表示高精度的十进制数值。它主要用于需要精确计算的...

C# 类接口

定义接口是一种抽象类型,它定义了一组方法签名(方法名称、参数列表和返回类型),但没有方法体。接口用于...

c# Invalidate、Refresh、Refreshitem、Refreshitems的功能

Invalidate方法功能概述Invalidate方法主要用于使控件的特定区域(整个控件或部分区域...

C# Byte[]转为Bitmap

在 C# 中,可以使用System.Drawing命名空间下的相关类将byte[]类型的数据转换为B...