利用API函數完成剪貼板Clipboard的操作

2021-03-06 VBA語言專家
大家好,我們今日講解「VBA信息獲取與處理」教程中第十二個專題「VBA中剪貼板(Clipboard)的應用」的第三節「利用API函數完成剪貼板Clipboard的操作」,這個專題是非常有用的知識點,希望大家能掌握利用。第三節  利用API函數完成剪貼板Clipboard的操作在上一講中,我們對剪貼板中的文本簡單操作進行了了解,是利用MSForms.DataObject對象來完成的,這種對象有前期綁定和後期綁定兩種方式都可以實現目標。今天我們講解利用API函數來完成對剪貼板的操作。這種方式的操作可以設計到各個方面。1  必要的API函數了解為了利用API函數達到我們的目的,我們先來了解一下將利用到的API函數。1)OpenClipboard函數:作用是打開剪貼板聲明及引用:Declare Function OpenClipboard Lib "user32" Alias "OpenClipboard" (ByValhwnd As Long) As Long如果調用成功,它會返回一個非0值;如果失敗,則返回0;如果有其他窗口已經打開剪貼板,這個函數會調用失敗。如果函數調用成功,一定要記得使用CloseClipboard函數關閉它。2)GetClipboardData函數:作用是讀取剪貼板裡面的數據聲明及引用:Declare Function GetClipboardData Lib "user32" (ByValwFormat As Long) As Long 如果調用成功,返回剪貼板中以指定格式存放的剪貼板對象的句柄;如果調用失敗,返回Null;在使用GetClipboardData之前,必須先成功調用OpenClipboard3)CopyMemory函數將一定字節長度的數據從內存中的一個位置(源)複製到另一個位置(目的地)聲明及引用:Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Destination:目的地的第一個字節的內存地址(指針)Source:   源的第一個字節的內存地址(指針)4)GlobalLock函數鎖定一個全局內存對象並返回它所佔用內存塊的第一個字節的內存地址(指針)聲明及引用:Declare Function GlobalLock Lib "kernel32" (ByValhMem As Long) As Long5)GlobalSize函數返回給定內存對象的字節長度聲明及引用:Declare Function GlobalSize Lib "kernel32" (ByValhMem As Long) As Long6)GlobalUnlock函數將可移動(GMEM_MOVEABLE)內存對象的鎖計數器數值-1,對於固定位置(GMEM_FIXED)的內存對象,這個函數不起作用聲明及引用:Declare Function GlobalUnlock Lib "kernel32" (ByValhMem As Long) As Long聲明及引用:Declare Function CloseClipboard Lib "user32"() As Long有了上面的7個API函數,我們就可以利用API函數來操控剪貼板了。2  利用API函數實現剪貼板操作的代碼實現Declare Function OpenClipboard Lib "user32" (ByValhwnd As Long) As LongDeclare Function GetClipboardData Lib "user32" (ByValwFormat As Long) As LongDeclare Function CloseClipboard Lib "user32" () As LongDeclare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Declare Function GlobalLock Lib "kernel32" (ByValhMem As Long) As LongDeclare Function GlobalUnlock Lib "kernel32" (ByValhMem As Long) As LongDeclare Function GlobalSize Lib "kernel32" (ByValhMem As Long) As LongPrivate Const CF_TEXT = 1    Dim bytClipData() As Byte    Dim sClipString As String    If OpenClipboard(ByVal 0&) Then  '如果OpenClipboard函數返回非0值,說明成功打開剪貼板hMem = GetClipboardData(CF_TEXT)   '獲取剪貼板中以文本格式存在的內存對象的句柄        If CBool(hMem) Then  '如果剪貼板中對應的格式不存在,此時的hMem會是0(Null),這裡用CBool把它轉換成Boolean類型加以判斷lpData = GlobalLock(hMem) '獲取內存對象第一個字節的內存地址nClipSize = GlobalSize(hMem)   '獲取內存對象的字節長度ReDimbytClipData(1 To nClipSize) '修改緩衝字節數組的長度,確保能夠容納內存對象的全部數據CopyMemorybytClipData(1), ByVallpData, nClipSize  '複製內存對象的數據到字節數組中,注意Byval的用法sClipString = StrConv(bytClipData, vbUnicode) '將字節轉化成字符串MsgBox "當前剪貼板內的文本是:" &vbCrLf&sClipString '將結果顯示給用戶代碼截圖:1)If OpenClipboard(ByVal 0&) Then  '打開剪貼板,如果OpenClipboard函數返回非0值,說明成功打開剪貼板。2)hMem = GetClipboardData(CF_TEXT)   '獲取剪貼板中以文本格式存在的內存對象的句柄,各個值如下:Public Const CF_BITMAP = 2Public Const CF_METAFILEPICT = 33)If CBool(hMem) Then  '當取得hMem的返回之後,如果剪貼板中對應的格式不存在,此時的hMem會是0(Null),這裡用CBool把它轉換成Boolean類型加以判斷4)   lpData = GlobalLock(hMem) '獲取內存對象第一個字節的內存地址nClipSize = GlobalSize(hMem)   '獲取內存對象的字節長度5)CopyMemorybytClipData(1), ByVallpData, nClipSize  '複製內存對象的數據到字節數組中,注意Byval的用法sClipString = StrConv(bytClipData, vbUnicode) '將字節轉化成字符串,6)StrConv函數返回按指定類型轉換的 Variant (String)。語法:StrConv(string, conversion, LCID) conversion 必要參數。Integer。其值的和決定轉換的類型。LCID 可選的。如果與系統LocaleID不同,則為LocaleID(系統LocaleID為預設值。)vbUpperCase 1 將字符串文字轉成大寫。vbLowerCase 2 將字符串文字轉成小寫。vbProperCase 3 將字符串中每個字的開頭字母轉成大寫。vbWide* 4* 將字符串中單字節字符轉成雙字節字符。vbNarrow* 8* 將字符串中雙字節字符轉成單字節字符。vbKatakana** 16** 將字符串中平假名字符轉成片假名字符。vbHiragana** 32** 將字符串中片假名字符轉成平假名字符。vbUnicode 64 根據系統的預設碼頁將字符串轉成 Unicode。vbFromUnicode128 將字符串由 Unicode 轉成系統的預設碼頁。7)CloseClipboard關閉剪貼板,以便其他程序再次訪問。3  利用API函數實現剪貼板操作的實現效果這講給大家講解了利用API函數實現剪貼板操作的方法,是非常重要的一講內容。  積木編程的思路內涵:在我的系列書籍中一直在強調「搭積木」的編程思路,這也是學習利用VBA的主要方法,特別是職場人員,更是要採用這種方案。其主要的內涵:1  代碼不要自己全部的錄入。你要做的是把積木放在合適的位置然後去修正代碼,一定要拷貝,從你的積木庫中去拷貝,然後修正代碼,把時間利用到高效的思考上。2  建立自己的「積木庫」。平時在學習過程中,把自己認為有用的代碼放在一起,多積累,在用到的時候,可以隨時拿來。你的積木庫資料越多,你做程序的思路就會越廣。VBA的應用界定及學習教程:VBA是利用Office實現個人小型辦公自動化的有效手段(工具)。這是我對VBA的應用界定。在取代OFFICE新的辦公軟體沒有到來之前,誰能在數據處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重複我之前的經歷,我根據自己多年VBA實際利用經驗,推出了六部VBA專門教程:第一套:VBA代碼解決方案是VBA中各個知識點的講解,教程共147講,覆蓋絕大多數的VBA知識點,提供的程序文件更是一座不可多得的代碼寶庫,是初學及中級人員必備教程;目前這套教程提供的版本是修訂第二版,程序文件通過32位和64位兩種OFFICE系統測試。第二套:VBA資料庫解決方案資料庫是數據處理的專業利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,適合中級人員的學習。目前這套教程提供的是修訂第一版教程,程序文件通過32位和64位兩種OFFICE系統測試。第三套:VBA數組與字典解決方案   數組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學習,是初級及中級人員代碼精進的手段。目前這套教程提供的版本是修訂第一版,程序文件通過32位和64位兩種OFFICE系統測試。第四套:VBA代碼解決方案之視頻是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。這套教程是第一套教程(修訂一版)的視頻講解,聽元音更易接受。這套教程還會額外提供通過32位和64位兩種OFFICE系統測試的程序文件。第五套:VBA中類的解讀和利用 這是一部高級教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。這套教程的領會主要是讀者的領悟了,領悟一種佛學的哲理。第六套教程:《VBA信息獲取與處理》,這是一部高級教程,涉及範圍更廣,實用性更強,面向中高級人員。教程共二十個專題,包括:跨應用程式信息獲得、隨機信息的利用、電子郵件的發送、VBA網際網路數據抓取、VBA延時操作,剪切板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定製工作表信息函數等等內容。上述教程的學習順序:1→3→2→6→5或者4→3→2→6→5。提供的程序文件更是一座巨大的代碼庫,供讀者使用,如需要可以WeChat: NZ9668學習VBA是個過程,也需要經歷一種枯燥的感覺「眾鳥高飛盡,孤雲獨去閒。相看兩不厭,只有敬亭山」。學習的過程也是修心的過程,修一個平靜的心。在代碼的世界中,心平靜了,心情好了,身體自然而然就好。心靜則正,內心裡沒有那麼多邪知邪見,也就沒有那麼多妄想。利人就是利己。我的教程助力給正在努力的朋友。「水善利萬物而不爭」,綿綿密密,微則無聲,巨則洶湧。學習亦如此,知道什麼是自己所需要的,不要蜷縮在一小塊自認為天堂的世界裡,待到暮年時再去做自欺欺人的言論。要努力提高自己,用一顆充滿生機的心靈,把握現在,這才是進取。越是有意義的事情,困難會越多。願力決定始終,智慧決定成敗。不管遇到什麼,都是風景。看淡紛爭,看輕得失。學習時微而無聲,利用時則巨則洶湧。「路漫漫其修遠兮,吾將上下而求索」每一分收穫都是成長的記錄,怎無憑,正是這種執著,成就了朝霞的燦爛。最後將一闕詞送給致力於VBA學習的朋友,讓大家感受一下學習過程的枯燥與執著:分享我多年工作實際經驗的成果,隨喜這些有用的東西,給確實需要利用VBA的同路人。回向學習利用VBA的歷歷往事,不勝感慨,謹以這些文字以紀念,

加微信NZ9668可獲得詳細資料信息

_____________________________ 

 

更多關聯閱讀

  

相關焦點

  • 剪貼板Clipboard是什麼
    大家好,在之前的專題講解中,對於來自網絡數據的抓取,曾經講過一個細節,就是將數據先放到剪貼板中,然後再粘貼到工作表內,大家可以再看一看資料006工作表.XLSM中Sub CopyToClipbox過程的內容,那麼什麼是剪貼板,利用它有什麼好處呢?對於VBA的操作,這個知識點有哪些方便獨到之處呢?我們這個專題就來講解。
  • 剪貼板中的數據格式(Clipboard Formats)
    剪貼板中的所有數據格式的提取使用EnumClipBoardFormats函數獲取剪貼板內所有可用格式的編號,然後使用GetClipboardFormatName函數取得該編號對應的格式名稱。,將返回值傳給下一次函數調用,可以得到下一個可用的剪貼板格式編號。
  • 利用word的剪貼板進行文本的移動、複製操作
    01Office剪貼板在Office 2010中,剪貼板可以存儲如果Office剪貼板中已存滿24項剪貼內容,又繼續移動或複製新內容時,Office會提示複製的內容將被添加到剪貼板的最後一項並清除第一項內容。
  • 10個不那麼知名但很實用的Web API
    下面是一個簡單的複製 - 粘貼操作示例:if (navigator.clipboard     &&:通過包含Clipboard Async API,就可以不用document.execCommad()函數了,因為它現在已經過時了。
  • 10個不那麼知名但很強大的Web API
    下面是一個簡單的複製 - 粘貼操作示例:if (navigator.clipboard     && navigator.clipboard.read:通過包含Clipboard Async API,就可以不用document.execCommad()函數了,因為它現在已經過時了。
  • 提取剪貼板中所有數據格式到工作表
    大家好,我們今日講解&34;教程中第十二個專題&34;的第五節&34;,這個專題是非常有用的知識點,希望大家能掌握利用。第五節 提取剪貼板中所有數據格式到工作表在上面的幾節中主要講了理論上的一些必要的知識點,這講就利用這些知識點完成一些必要的操作,講解如何把剪貼板上的數據格式分析提取到工作表之中。
  • 快速了解JavaScript的文本框操作
    在實際的事件發生之前,通過beforecopy、beforecut 和 beforepaste 事件可以在向剪貼板發送或從中檢索數據前修改數據。不過,取消這些事件並不會取消剪貼板操作。要阻止實際的剪貼板操作,必須取消 copy、cut和 paste 事件。
  • 拒絕反覆輸入的煩惱,剪貼板也可以這樣強大
    1clipboard主打多設備剪貼同步,比較適合需要經常切換電腦的寫作者。最快捷的內容選擇操作通過Alt+C喚起快捷窗口,使用數字鍵1、2、3、4、5即可完成選擇及快速黏貼。最全複製黏貼格式支持支持圖片、文件、文字、表格複製黏貼,保存內容原有屬性及格式信息,不丟失,不遺漏任何你最需要的信息。優缺點:基本功能已經實現,但細節上還需要打磨,比如 支持合併粘貼內容,支持純文本黏貼等等,期待。
  • 蘋果的剪貼板那麼好用,你卻不知道?| 有輕功
    最近聽說 Windows 10 要推出雲端同步剪貼板的功能,不知道大家是否有利用過 iOS 與 Mac 從 2016 年底開始內建的「通用剪貼板」功能呢
  • excel如何利用剪貼板提高效率
    excel如何利用剪貼板提高效率解決辦法:剪貼板第一步:找到【開始】-【剪貼板】右下角按鈕「複製」和「粘貼」命令,只需要將項目複製到office剪貼板將其添加到項目集合中,然後就可以隨時將其從office剪貼板粘貼到任何office文檔中。
  • Excel剪貼板的強悍功能!
    公眾號「Excel基礎學習園地」是一個免費發布Excel基礎知識、函數應用、操作技巧、學習方法等資訊的公眾號,請點擊上方
  • 深入淺出Windows API程序設計 目錄
    12.5 其他內存管理函數404第13章 文件、驅動器、目錄操作40613.1 基本概念40713.1.1 與硬碟存儲有關的幾個重要概念40713.1.2 分區、邏輯驅動器、文件系統、卷40813.1.3 文件名、目錄、路徑、當前目錄40913.2 文件操作41013.2.1 創建、打開文件
  • Excel技巧—開始菜單之剪貼板
    「剪貼板」主要就是將我們從Excel中或其他程序中複製出來的內容,臨時存儲的地方,最多可以存放24條數據。「剪貼板」主要有兩大特性:①、所見即所得:剪貼板中的內容就是單元格中顯示的內容,也就是我們看到的內容。②、剪貼板中的內容可多次操作。
  • android手勢操作滑動效果觸控螢幕事件處理
    很多時候,利用觸控螢幕的Fling、Scroll等Gesture(手勢)操作來操作會使得應用程式的用戶體驗大大提升,比如用Scroll手勢在 瀏覽器中滾屏,用Fling在閱讀器中翻頁等。第三,Listener一般會以Interface(接口)的方式來提供,其中 包含一個或多個abstract(抽象)方法,我們需要實現這些方法來完成onTouch()、onKey()等等的操作。這樣,當我們給某個view設 置了事件Listener,並實現了其中的抽象方法以後,程序便可以在特定的事件被dispatch到該view的時候,通過callbakc函數給予適 當的響應。
  • 你想要的數據排名可不是簡單利用rank函數就能完成的
    今天,我想和小夥伴們分享交流的是關於在Excel數據處理過程中的排序操作。提到數據的排名,它可和數據序號填充大不相同哦。有人會說,用rank函數呀,它不就是專門針對數據排名而設定的公式嗎!沒錯,我們一起來看看吧!
  • 手把手教你學Numpy——常用API合集
    median和percentile分別是求中位數與百分位數,它們不是Numpy當中array的函數,而是numpy的庫函數。所以我們需要把array當做參數傳入。percentile這個函數還需要額外傳入一個int,表示我們想要得到的百分位數,比如我們想要知道50%位置上的數,則輸入50。
  • VBA程序中,利用API函數讓程序達到毫秒級的延時
    大家好,我們今日繼續講解VBA代碼解決方案的第82講內容:如何利用代碼讓程序延時,SLEEP函數和timeGetTime函數兩個API函數的講解。在上面的實例中,對於精確延時使用的sleep函數,使用這個函數要注意的是,由於這個函數是Windows API函數,使用前必須先聲明,然後使用。 雖然sleep函數延時是毫秒級的,精確度比較高,但它在延時時會將程序掛起,使作業系統暫時無法響應用戶操作,所以在長延時的時候不適合使用它。
  • magic-api 0.4.8 發布,接口快速開發框架
    一元運算符,支持非布爾值運算 修複函數命名atPercent變更為asPercent項目介紹magic-api 是一個基於Java的接口快速開發框架,通過magic-api提供的UI界面完成編寫接口,無需定義Controller
  • Win10如何查看剪貼板內容|怎樣查看剪貼板記錄
    粘貼是我們日常使用電腦的過程中,用得最多的功能之一,但是有時候自己複製了什麼東西,都不知道了,雖然可以藉助第三方的工具,但是在win10中,我們可以直接查看剪貼板的內容。這篇文章就是給大家帶來的打開該功能方法。