首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++Builder 監視剪貼板變更實作

     編輯:關於C++

剪貼板監視機制

Windows 透過剪貼板檢視器鏈結通知應用程式剪貼板內容變更。應用程式需呼叫 SetClipboardViewer 將自身視窗加入鏈結,並處理 WM_DRAWCLIPBOARD 訊息。結束監視時呼叫 ChangeClipboardChain 移除自身。

C++Builder 實作步驟

1. 表單標頭檔宣告 (Unit1.h)

class TForm1 : public TForm {
__published:
    // ... 元件宣告 ...
private:
    void __fastcall ClipboardChanged(TMessage &Msg);
public:
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_DRAWCLIPBOARD, TMessage, ClipboardChanged)
    END_MESSAGE_MAP(TForm)
};

2. 訊息處理函數 (Unit1.cpp)

void __fastcall TForm1::ClipboardChanged(TMessage &Msg)
{
    POINT MousePos;
    GetCursorPos(&MousePos);
    PopupMenu4->PopupComponent = Form1;
    PopupMenu4->Popup(MousePos.x, MousePos.y); // 剪貼板變更時彈出選單
}

3. 啟動/停止監視按鈕事件

void __fastcall TForm1::ToolButton9Click(TObject *Sender)
{
    static HWND hNextViewer;
    static bool bWatching = false;

    if (bWatching) {
        ToolButton9->Down = false;
        ChangeClipboardChain(Form1->Handle, hNextViewer); // 移除鏈結
    } else {
        ToolButton9->Down = true;
        Clipboard()->Clear();
        Application->Minimize();
        hNextViewer = SetClipboardViewer(Form1->Handle); // 加入鏈結,保存下一個視窗控制碼
    }
    bWatching = !bWatching;
}

關鍵點說明

  • SetClipboardViewer 返回鏈結中下一個視窗控制碼,必須保存以便 ChangeClipboardChain 使用。
  • 處理 WM_DRAWCLIPBOARD 後,若不處理該訊息,必須傳遞給下一個視窗:SendMessage(hNextViewer, WM_DRAWCLIPBOARD, 0, 0)。本範例為示範彈出選單,省略轉發,實務上應加上轉發以免斷鏈影響其他監視程式。
  • 表單關閉時務必檢查並呼叫 ChangeClipboardChain 移除自身。
  • 範例中將視窗最小化並清空剪貼板僅為演示,實際應用視需求調整。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved