函数参考


_ClipBoard_ChangeChain

从剪切板查看器中移除指定窗口链

#Include <Clipboard.au3>
_ClipBoard_ChangeChain($hRemove, $hNewNext)

参数

$hRemove 要移除链的窗口句柄.
必须是传递到 _ClipBoard_SetClipboardViewer 函数的窗口句柄.
$hNewNext 参数 $hRemove 的窗口句柄是在剪贴板查看器链中的窗口句柄.
由函数 _ClipBoard_SetViewer 返回.除非在响应 $WM_CHANGECBCHAIN 信息时,该序列发生变化.

返回值

None.

注意/说明

 确定 $hNewNext 窗口替换链中的 $hRemove 窗口
 函数 _ClipBoard_SetViewer 发送 $WM_CHANGECBCHAIN 消息到剪贴板查看器链的第一个窗口.

相关

_ClipBoard_SetViewer

详情参考

在MSDN中搜索


示例/演示


#include <Clipboard.au3>
#include <GUIConstantsEx.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")

    ; 循环直到用户退出
    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