易语言调用SetClipboardViewer的api实现剪贴版的内容监控
DLL命令表
.版本 2 .DLL命令 加入剪贴板监视链_d, 整数型, "user32.dll", "SetClipboardViewer", 公开, 成功,返回值将标识剪贴板查看器链中的下一个窗口。如果出现错误或剪贴板查看器链中没有其他窗口,则返回值为空。( hwndNextViewer 将为 NULL。) .参数 窗口句柄, 整数型, , hwnd 加入剪切板监视链中窗口句柄 .DLL命令 设置窗口信息_d, 整数型, "user32", "SetWindowLongA", 公开, 在窗口结构中为指定的窗口设置信息 指定数据的前一个值 .参数 窗口句柄, 整数型, , hwnd,欲为其取得信息的窗口的句柄 .参数 窗口信息值, 整数型, , nIndex,请参考GetWindowLong函数的nIndex参数的说明 .参数 窗口信息新值, 整数型, , dwNewLong,由nIndex指定的窗口信息的新值 .DLL命令 发送消息_d, 整数型, "user32", "SendMessageA", 公开, 调用一个窗口的窗口函数,将一条消息发给那个窗口。 .参数 窗口句柄, 整数型, , hwnd,要接收消息的那个窗口的句柄 .参数 信息值, 整数型, , wMsg,消息的标识符 .参数 参数一, 整数型, , wParam,具体取决于消息 .参数 参数二, 整数型, , lParam,具体取决于消息; .DLL命令 消息信息传送_d, 整数型, "user32", "CallWindowProcA", 公开, 返回值指定了消息处理结果,它与发送的消息有关。 .参数 lpPrevWndFunc, 整数型, , 前一窗口函数地址 .参数 hwnd, 整数型, , 指向接收消息的窗口过程的句柄 .参数 msg, 整数型, , 消息类型 .参数 wParam, 整数型, , 指定其余的、消息特定的信息。该参数的内容与Msg参数值有关 .参数 lParam, 整数型, , 指定其余的、消息特定的信息。该参数的内容与Msg参数值有关。 .DLL命令 移除剪贴板监视链_d, 整数型, "user32.dll", "ChangeClipboardChain", 公开, 从剪贴板查看窗口上删除一个窗口 将剪贴的连接从一个句柄转到下一个句柄。 .参数 窗口句柄, 整数型, , hWndRemove表示从剪贴板监视链中移除的窗口句柄。 .参数 下一个窗口句柄, 整数型, , hWndNewNext表示观察链中下一个窗口的句柄。 SetClipboardViewer 的返回值
监视剪贴板的代码
.版本 2 .程序集 窗口程序集_启动窗口 .程序集变量 下一个窗口1, 整数型 .程序集变量 前一窗口1, 整数型 .程序集变量 窗口句柄1, 整数型 .程序集变量 下一个窗口2, 整数型 .程序集变量 前一窗口2, 整数型 .程序集变量 窗口句柄2, 整数型 .程序集变量 下一个窗口3, 整数型 .程序集变量 前一窗口3, 整数型 .程序集变量 窗口句柄3, 整数型 .子程序 __启动窗口_创建完毕 窗口句柄1 = 标签1.取窗口句柄 () 窗口句柄2 = 标签2.取窗口句柄 () 窗口句柄3 = 标签3.取窗口句柄 () 前一窗口1 = 设置窗口信息_d (窗口句柄1, -4, 到整数 (&消息处理子程序1)) 前一窗口2 = 设置窗口信息_d (窗口句柄2, -4, 到整数 (&消息处理子程序2)) 前一窗口3 = 设置窗口信息_d (窗口句柄3, -4, 到整数 (&消息处理子程序3)) 标签1.标题 = “窗口句柄; ” + 到文本 (窗口句柄1) + #换行符 标签2.标题 = “窗口句柄; ” + 到文本 (窗口句柄2) + #换行符 标签3.标题 = “窗口句柄; ” + 到文本 (窗口句柄3) + #换行符 .子程序 监视剪贴板1 下一个窗口1 = 加入剪贴板监视链_d (窗口句柄1) 标签1.标题 = 标签1.标题 + #换行符 + “下一个窗口; ” + 到文本 (下一个窗口1) 标签1.文本颜色 = #红褐 .子程序 取消剪贴板监视1 移除剪贴板监视链_d (窗口句柄1, 下一个窗口1) ' 从观察链中删除本观察窗口 标签1.文本颜色 = #黑色 .子程序 监视剪贴板2 下一个窗口2 = 加入剪贴板监视链_d (窗口句柄2) 标签2.标题 = 标签2.标题 + #换行符 + “下一个窗口; ” + 到文本 (下一个窗口2) 标签2.文本颜色 = #红褐 .子程序 取消剪贴板监视2 移除剪贴板监视链_d (窗口句柄2, 下一个窗口2) ' 从观察链中删除本观察窗口 标签2.文本颜色 = #黑色 .子程序 监视剪贴板3 下一个窗口3 = 加入剪贴板监视链_d (窗口句柄3) 标签3.标题 = 标签3.标题 + #换行符 + “下一个窗口; ” + 到文本 (下一个窗口3) 标签3.文本颜色 = #红褐 .子程序 取消剪贴板监视3 移除剪贴板监视链_d (窗口句柄3, 下一个窗口3) ' 从观察链中删除本观察窗口 标签3.文本颜色 = #黑色 .子程序 消息处理子程序1, 整数型, , 消息处理子程序, .参数 窗口句柄_, 整数型, , hwnd 接收该消息的窗口句柄。 .参数 消息_, 整数型, , uMsg 消息标识 消息值 .参数 消息参数1, 整数型, , wParam .参数 消息参数2, 整数型, , lParam .判断开始 (消息_ = 2) ' 判断父窗口是否将被销毁 ( WM_DESTROY 2 2 ) 移除剪贴板监视链_d (窗口句柄1, 下一个窗口1) .判断 (消息_ = 776) ' 判断剪贴板内容是否发生变化 WM_DRAWCLIPBOARD .如果真 (下一个窗口1 ≠ 0) ' 将 #WM_DRAWCLIPBOARD 消息传递给下一个观察链中的窗口 发送消息_d (下一个窗口1, 消息_, 消息参数1, 消息参数2) .如果真结束 标签11.标题 = 取剪辑板文本 () .判断 (消息_ = 781) ' WM_CHANGECBCHAIN ' 当程序调用 ChangeClipboardChain 时,Windows 会向当前剪贴板查看器发送一个 WM_CHANGECBCHAIN 消息。该消息的 wParam 参数是要从链里退出的窗口的句柄(即 ChangeClipboardChain 的第一个参数),lParam 是将要退出的窗口的下一个剪贴板查看器的窗口句柄(即 ChangeClipboardChain 的第二个参数)。 ' 当你的程序收到了 WM_CHANGECBCHAIN 消息,则必须检查 wParam 是否等于你保存的 hwndNextViewer 值。如果相等,你的程序必须把 hwndNextViewer 设为 lParam。这个操作确保将来你得到的任何 WM_CHANGECBCHAIN 消息不会被发送给从链里退出的那个窗口。如果 wParam 不等于 hwndNextViewer,并且 hwndNextViewer 不为 NULL,就把消息发送给下一个剪贴板查看器: .判断开始 (消息参数1 = 下一个窗口1) 下一个窗口1 = 消息参数2 .判断 (下一个窗口1 ≠ 0) 发送消息_d (下一个窗口1, 消息_, 消息参数1, 消息参数2) .默认 .判断结束 .默认 .判断结束 返回 (消息信息传送_d (前一窗口1, 窗口句柄_, 消息_, 消息参数1, 消息参数2)) ' 将未处理的消息交由原窗口程序处理 .子程序 消息处理子程序2, 整数型, , 消息处理子程序, .参数 窗口句柄_, 整数型, , hwnd 接收该消息的窗口句柄。 .参数 消息_, 整数型, , uMsg 消息标识 消息值 .参数 消息参数1, 整数型, , wParam .参数 消息参数2, 整数型, , lParam .判断开始 (消息_ = 2) ' 判断父窗口是否将被销毁 移除剪贴板监视链_d (窗口句柄2, 下一个窗口2) .判断 (消息_ = 776) ' 判断剪贴板内容是否发生变化 WM_DRAWCLIPBOARD .如果真 (下一个窗口2 ≠ 0) 发送消息_d (下一个窗口2, 消息_, 消息参数1, 消息参数2) .如果真结束 标签22.标题 = 取剪辑板文本 () .判断 (消息_ = 781) ' WM_CHANGECBCHAIN .判断开始 (消息参数1 = 下一个窗口2) 下一个窗口2 = 消息参数2 .判断 (下一个窗口2 ≠ 0) 发送消息_d (下一个窗口2, 消息_, 消息参数1, 消息参数2) .默认 .判断结束 .默认 .判断结束 返回 (消息信息传送_d (前一窗口2, 窗口句柄_, 消息_, 消息参数1, 消息参数2)) ' 将未处理的消息交由原窗口程序处理 .子程序 消息处理子程序3, 整数型, , 消息处理子程序, .参数 窗口句柄_, 整数型, , hwnd 接收该消息的窗口句柄。 .参数 消息_, 整数型, , uMsg 消息标识 消息值 .参数 消息参数1, 整数型, , wParam .参数 消息参数2, 整数型, , lParam .判断开始 (消息_ = 2) ' 判断父窗口是否将被销毁 移除剪贴板监视链_d (窗口句柄3, 下一个窗口3) .判断 (消息_ = 776) ' 判断剪贴板内容是否发生变化 WM_DRAWCLIPBOARD .如果真 (下一个窗口3 ≠ 0) 发送消息_d (下一个窗口3, 消息_, 消息参数1, 消息参数2) .如果真结束 标签33.标题 = 取剪辑板文本 () .判断 (消息_ = 781) ' WM_CHANGECBCHAIN .判断开始 (消息参数1 = 下一个窗口3) 下一个窗口3 = 消息参数2 .判断 (下一个窗口3 ≠ 0) 发送消息_d (下一个窗口3, 消息_, 消息参数1, 消息参数2) .默认 .判断结束 .默认 .判断结束 返回 (消息信息传送_d (前一窗口3, 窗口句柄_, 消息_, 消息参数1, 消息参数2)) ' 将未处理的消息交由原窗口程序处理 .子程序 _按钮监视1_被单击 监视剪贴板1 () 按钮监视1.禁止 = 真 按钮取消监视1.禁止 = 假 .子程序 _按钮取消监视1_被单击 取消剪贴板监视1 () 按钮监视1.禁止 = 假 按钮取消监视1.禁止 = 真 .子程序 _按钮监视2_被单击 监视剪贴板2 () 按钮监视2.禁止 = 真 按钮取消监视2.禁止 = 假 .子程序 _按钮取消监视2_被单击 取消剪贴板监视2 () 按钮监视2.禁止 = 假 按钮取消监视2.禁止 = 真 .子程序 _按钮监视3_被单击 监视剪贴板3 () 按钮监视3.禁止 = 真 按钮取消监视3.禁止 = 假 .子程序 _按钮取消监视3_被单击 取消剪贴板监视3 () 按钮监视3.禁止 = 假 按钮取消监视3.禁止 = 真
运行结果:
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接
赞 (0)