回覆列表
  • 1 # 使用者175911566982

    Update:調整了順序,添加了詳細的過程介紹,修改了之前偷懶的程式碼

    Windows下使用剪貼簿的過程大致如下:

    複製的過程:

    1. 初始狀態。

    2. 程式A使用 OpenClipboard 開啟剪貼簿。此時剪貼簿被獨佔,無法被其他程式開啟。

    3. 程式A使用 EmptyClipboard 清空剪貼簿。此時剪貼簿中原有的資料被清除。

    4. 程式A使用 GlobalAlloc 申請一段用於存放資料的全域性記憶體。

    5. 程式A使用 GlobalLock、GlobalUnlock 設定全域性記憶體中的資料。

    6. 程式A使用 SetClipboardData 將全域性記憶體的控制代碼設定到剪貼簿。

    7. 程式A使用 CloseClipboard 關閉剪貼簿。此時剪貼簿的佔用被解除,其他程式可以訪問剪貼簿。程式A關閉後剪貼簿中依然有資料。

    貼上的過程:

    1. 初始狀態。

    2. 程式B使用 OpenClipboard 開啟剪貼簿。

    3. 程式B使用 GetClipboardData 獲取剪貼簿中全域性記憶體的控制代碼。

    4. 程式B使用 GlobalLock、GlobalUnlock 獲取全域性記憶體中的資料。

    5. 程式B使用 CloseClipboard 關閉剪貼簿。

    實際上,當你在檔案管理器中使用“複製”的時候,並不會真正地將整個檔案複製到剪貼簿中,只是將檔案的路徑存放在了剪貼簿中(型別為 CF_HDROP,簡單地說是一個檔案列表),當然也不會消耗多少時間。當你“貼上”的時候,檔案管理器才會真正地複製這個檔案。

    舉例來說,你可以透過下面的程式碼來檢視當前剪貼簿中剛剛“複製”了的檔案(C++11程式碼):

    效果(隨便選了一些檔案):

  • 中秋節和大豐收的關聯?
  • 父親三週年祭文詩詞?