易語言調用SetClipboardViewer的api實現剪貼版的內容監控

今天小編就爲大家分享一篇關於易語言調用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.禁止 = 真

運行結果:

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對神馬文庫的支持。如果你想了解更多相關內容請查看下面相關鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章