易语言调用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

回到顶部