Win32 API 获取其他程序剪贴板内容
代碼如下;使用CFree;
#include <windows.h>int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) {/* TODO: Place code here.*/HGLOBAL hGlobal ;PTSTR pGlobal ;HWND hwnd = FindWindow(NULL, "計算器");OpenClipboard (hwnd) ; hGlobal = GetClipboardData (CF_TEXT) ;if (hGlobal != NULL){pGlobal = (PTSTR) GlobalLock (hGlobal) ;MessageBox(NULL, pGlobal, "獲取剪貼板文本", MB_OK);GlobalUnlock (hGlobal) ;}CloseClipboard () ;return 0; }先查找 計算器 窗口;然后打開其剪貼板,然后獲取內容;
如果是對于UNICODE文本則使用 hGlobal = GetClipboardData (CF_UNICODETEXT) ;
HGLOBAL是兼容以前windows 3.x時代的16位內存分配API的數據,表示一個內存塊,這個內存塊是GlobalAlloc分配的,需要GlobalLock才能取得內存塊的指針。
不過在Win32下,這個數據和Global內存分配函數沒有用了,保留下來只是為了兼容。而且在Win32下,HGLOBAL就是一個void *的指針,可以不用GlobalLock直接使用來訪問內存。
注意:但是某種特定情況下還是需要使用GlobalAlloc 和 HGLOBAl ,如CreateStreamOnHGlobal、CoTaskMemAlloc。
?
Globallock函數:
鎖定內存中指定的內存塊,并返回一個地址值,令其指向內存塊的起始處。除非用 GlobalUnlock 函數將內存塊解鎖,否則地址會一直保持有效。
參數
hMem Long,指定一個全局內存塊的句柄。
?
先運行win自帶計算器,輸入一些數據,在計算器菜單中點擊 復制 菜單,此時計算器輸入的內容被拷貝到剪貼板;然后啟動程序;
運行如下;
程序彈出消息框顯示獲取的剪貼板內容,程序運行后會彈出消息框顯示計算器剪貼板的內容;但是當消息框顯示的時候無法用鍵盤的PrtSc鍵截圖;因為此時內存是全局鎖定的;
總結
以上是生活随笔為你收集整理的Win32 API 获取其他程序剪贴板内容的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win32 API 枚举打印机
- 下一篇: Win32 API CreateComp