易语言调用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.禁止 = 真
运行结果:
总结
以上是 易语言调用SetClipboardViewer的api实现剪贴版的内容监控 的全部内容, 来源链接: utcz.com/z/342151.html