函数参考


_ClipBoard_SetViewer

添加指定窗口到剪贴板查看器链中

#Include <Clipboard.au3>
_ClipBoard_SetViewer($hViewer)

参数

$hViewer 添加的窗口句柄

返回值

成功: 返回剪贴板查看器链中下一个窗口句柄
失败: 返回 0 ,没有剪贴板查看器

注意/说明

窗户属于剪贴板查看器链的一部分,必须处理剪贴板 $WM_CHANGECBCHAIN 和 $ WM_DRAWCLIPBOARD 消息.
每个剪贴板查看器窗口必须调用 _SendMessage 函数向查看器链中的下一个窗口传递上述信息.
剪贴板查看器窗口最终必须通过调用 _ClipBoard_ChangeChain 函数从剪贴板查看器链中移走自己.

相关

_ClipBoard_ChangeChain, _ClipBoard_GetViewer

详情参考

在MSDN中搜索


示例/演示


#include <GUIConstantsEx.au3>
#include <Clipboard.au3>
#include <WindowsConstants.au3>
#include <SendMessage.au3>

Global $iMemo, $hNext = 0

_Main()

Func _Main()
    Local $hGUI

    ; 创建 GUI
    $hGUI = GUICreate("Clipboard", 600, 400)
    $iMemo = GUICtrlCreateEdit("", 2, 2, 596, 396, $WS_VSCROLL)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
    GUISetState()

    ; 初始化剪贴板查看器
    $hNext = _ClipBoard_SetViewer($hGUI)

    GUIRegisterMsg($WM_CHANGECBCHAIN, "WM_CHANGECBCHAIN")
    GUIRegisterMsg($WM_DRAWCLIPBOARD, "WM_DRAWCLIPBOARD")

    MemoWrite("GUI handle ....: " & $hGUI)
    MemoWrite("Viewer handle .: " & _ClipBoard_GetViewer())

    ; 循环直到用户退出
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    ; 关闭剪贴板查看器
    _ClipBoard_ChangeChain($hGUI, $hNext)
EndFunc   ;==>_Main

; 写入消息到 memo
Func MemoWrite($sMessage = "")
    GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
EndFunc   ;==>MemoWrite

; 处理 $WM_CHANGECBCHAIN 消息
Func WM_CHANGECBCHAIN($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    ; 显示接收到的消息
    MemoWrite("***** $WM_CHANGECBCHAIN *****")

    ; 如果下一个窗口正在关闭, 那么修复链
    If $iwParam = $hNext Then
        $hNext = $ilParam
        ; 否则传递消息到下一个查看器
    ElseIf $hNext <> 0 Then
        _SendMessage($hNext, $WM_CHANGECBCHAIN, $iwParam, $ilParam, 0, "hwnd", "hwnd")
    EndIf
EndFunc   ;==>WM_CHANGECBCHAIN

; 处理 $WM_DRAWCLIPBOARD 消息
Func WM_DRAWCLIPBOARD($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    ; 显示剪贴板中的文本
    MemoWrite(_ClipBoard_GetData())

    ; 传递消息到下一个查看器
    If $hNext <> 0 Then _SendMessage($hNext, $WM_DRAWCLIPBOARD, $iwParam, $ilParam)
EndFunc   ;==>WM_DRAWCLIPBOARD