1. 程式人生 > >windows下的剪下板程式設計詳解

windows下的剪下板程式設計詳解

 說道剪下板大家都不陌生吧 ,右鍵貼上 都用過。其實程式設計也很簡單,但是在程序之間的通訊 卻有著不可替代的作用  ,剪下板說白了就是一個緩衝區 ,但是這個緩衝區不是某個程序的私有空間,而被全部程序所共享。windows下的每個程序都可以共享剪下板中的資料 。     其實我以前也學過剪下板程式設計但是一直沒有真正理解,於是又學習了一遍。終於明白了。。。寫下來分享下。。。。

要使用剪下板就要了解剪下板的幾個函式 ?

BOOL EmptyClipboard(VOID);  //清空剪下板並且釋放與剪下板相關的資料的控制代碼  
BOOL OpenClipboard( HWND );  //開啟剪下板並且阻止其他應用程式 修改剪下板的內容     hwnd為當前開啟窗體的控制代碼
HGLOBAL GlobalAlloc( UINT,  SIZE_T );   //在全域性堆分配一塊記憶體,windows記憶體管理器不提供單獨的全域性對和本地堆 ,這個函式比起他記憶體 函式慢,但是這個函式仍然在剪下板等應用中使用。 有人可能會問了,為什麼不用new或者 malloc呢? 那是因為你的new和malloc所分配的空間只是在一個程序中分配的,它並不能被windows下所有程序所共享 。  
(*)他返回的不是一個記憶體塊的指標,而是一個記憶體物件的控制代碼 。  我們可以通過GloabalLock()獲得記憶體指標,。。。
LPVOID GlobalLock( HGLOBAL
hMem); //鎖定一個記憶體物件,並且返回指向這個記憶體物件的第一個位元組的指標 。 對於可移動的記憶體物件來說,其內部的資料結構包含一個計數器,GlobalLock會是這個計數器+1 ,GlobalUnLock使這個計數器-1 。 鎖定的記憶體塊將不會被 移動或者丟棄 除非呼叫了GlobalReAlloc函式 .每次呼叫完一個GlobalLock函式 對應呼叫GlobalUnLock函式 。
BOOL GlobalUnlock( HGLOBAL hMem );  減少GMEM_MOVEABLE型別記憶體物件的鎖定計數,對於GMEM_FIXED型別的記憶體物件沒有影響  
BOOL CloseClipboard(VOID);  //當一個應用程式使用完剪下板應該呼叫這個函式 關閉剪下板,允許其他程式訪問 剪下板 。
HANDLE SetClipboardData( UINT,  HANDLE hMem );  //將指定的記憶體物件的資料 設定到剪下板  。
HANDLE GetClipboardData( UINT );  //從剪下板獲得指定的資料,這個函式呼叫前 剪下板必須被開啟  。
BOOL IsClipboardFormatAvailable(UINT);  //檢測剪下板中是否有指定格式的資料
函式介紹完了下面就是應用 :  
1、向剪下板中增加資料 ,這裡我用文字做示範 、
 ::OpenClipboard(m_hWnd) ;// 開啟剪下板 防止其他 程序第剪下板操作 
  EmptyClipboard()  ;//清空剪下板 並且將許可權附加到 開啟剪下板的窗體 
 HANDLE h=GlobalAlloc(GMEM_FIXED,100) ; //在全域性堆分配記憶體並且返回控制代碼 
 char *p=(char*) GlobalLock(h) ; //鎖定指定記憶體物件,返回記憶體指向物件第一個位元組的指標,增加記憶體物件的鎖定計數
 strcpy(p,"this is a ClipBoard test") ;  //將字串拷貝到全域性堆
 SetClipboardData(CF_TEXT,h) ;  //將指定記憶體物件的資料設定到剪下板
 GlobalUnlock(h) ;//解鎖記憶體物件 並且減少鎖定計數
 CloseClipboard() ;  //關閉剪下板 在呼叫Open之後 必須有
2、清空剪下板
 ::EmptyClipboard() ;   //清空剪下板  
3、獲得剪下板的資料 
 ::OpenClipboard(m_hWnd) ;   //開啟剪下板  
 if (IsClipboardFormatAvailable(CF_TEXT))    //如果剪下板中有文字型別的資料
 {
  HANDLE h=GetClipboardData(CF_TEXT); // 獲得剪下板資料 所在的記憶體物件 
  char * p=(char*)GlobalLock(h) ;  //通過鎖定記憶體物件 獲得剪下板緩衝區的指標  
  GlobalUnlock(h) ;            //解鎖記憶體物件 減少 記憶體物件的鎖定技術  
 MessageBox(p) ;
 }

相關推薦

windows程式設計

 說道剪下板大家都不陌生吧 ,右鍵貼上 都用過。其實程式設計也很簡單,但是在程序之間的通訊 卻有著不可替代的作用  ,剪下板說白了就是一個緩衝區 ,但是這個緩衝區不是某個程序的私有空間,而被全部程序所共享。windows下的每個程序都可以共享剪下板中的資料 。     其實

windows批處理(cmd/bat)程式設計

       開始之前先簡單說明下cmd檔案和bat檔案的區別:在本質上兩者沒有區別,都是簡單的文字編碼方式,都可以用記事本建立、編輯和檢視。兩者所用的命令列程式碼也是共用的,只是cmd檔案中允許使用的命令要比bat檔案多。cmd檔案只有在windows2000以上的系統中

WindowsVTK6.0.0安裝(CMake使用說明)

操作 工具 generate 其中 con htm 目錄下的文件 ima 新建 操作系統:Windows7,用到工具:Visual studio、CMake。 1.準備工作 VTK下載: 下載最新VTK穩定版(6.0.0,截至2013年7月)http://www.vtk

MFCCSocket程式設計(轉)

MFC下CSocket程式設計詳解:  1. 常用的函式和注意事項(詳細的函式介面說明請檢視MSDN):     CSocket::Create 初始化(一般寫伺服器程式都不要用為好,用下面的 CSocket::Socket 初始化)     CSocket::So

串列埠驅動程式設計---串列埠開啟、傳送、接收(

上一篇部落格分析了串列埠驅動初始化部分,下面逐步分析串列埠驅動中的開啟串列埠,資料傳送和接收! 初始化主要工作流程: 先來分析串列埠開啟操作流程,還是先上圖: 這裡分析還是離不開上篇部落格中的兩張重要的圖: 串列埠操作重要的資料結構: 由上一篇串列埠驅動分析可知

windows生成github ssh key

一、ssh是什麼:ssh是Secure Shell(安全外殼協議)的縮寫,建立在應用層和傳輸層基礎上的安全協議。為了便於訪問github,要生成ssh公鑰,這樣就不用每一次訪問github都要輸入使用者名稱和密碼。 二、 1.在本地成功安裝好Git之後。單擊滑鼠右鍵,選擇Git Bush h

linuxC程式設計

linux作業系統下 c語言程式設計 整理編寫:007xiong原文:Hoyt等(一)目錄介紹1)Linux程式設計入門--基礎知識2)Linux程式設計入門--程序介紹3)Linux程式設計入門--檔案操作4)Linux程式設計入門--時間概念5)Linux程式設計入門--訊號處理6)Linux程式設計入

Windows安裝Resin及配置與釋出應用

    關於Resin的好處,網上介紹了一大堆,小編經不住誘惑,決定試用一下。目前Resin的最新版本為:4.0.40,可以從官網直接下載。     1. 將下載下來的Resin包解壓開,會看到一大堆的檔案,有一些關鍵的檔案,我們需要了解一下。 resin-4.0.4

WindowsOpenssl安裝與使用

Windows下Openssl安裝與使用詳解 一、安裝 1.1 安裝環境:      1、作業系統:Windows XP SP2       2、C++編譯器:VC++ 6.0 1.2下載: 下載ActivePerl  5.10.1.1007(最新的版本或較低的版

tinyxml在linux和windows的編譯及使用

一:摘要1.XML全稱EXtensible Markup Language,翻譯為可擴充套件標記語言,XML檔案通常就是一個文字檔案,可以使用任何編碼2.TinyXML是一個開源的C++用來處理XML的第三方庫 二:說明1. 2. 部落格內容及所有程式碼均是在該版本下編譯

windows 64位,React-Native環境搭建 (Android)

React-Native環境搭建需要: 1、安裝Java JDK 2、安裝Android Studio 3、安裝node.js 4、安裝git 5、安裝Python 2.x (注意目前不支援Python 3版本) 6、安裝react-native-c

windows建立程序,CreateProcess()及用法

windows下想要建立一個子程序不如linux的fork函式來得方便,通過CreateProcess函式建立一個新的程序,函式的定義如下 BOOL CreateProcess(    LPCTSTR lpApplicationName, // 應用程式名稱  L

windows安裝rabbitmq的步驟

(僅作為個人的備忘記錄) Rabbit MQ 是建立在強大的Erlang OTP平臺上,因此安裝Rabbit MQ的前提是安裝Erlang。通過下面兩個連線可以下載安裝最新的版本: 下載並安裝 Er

【Linux】Linux 多程序程式設計

一.多程序程式的特點    程序是一個具有獨立功能的程式關於某個資料集合的一次可以併發執行的執行活動,是處 於活動狀態的計算機程式。    程序作為構成系統的基本細胞, 不僅是系統內部獨立執行的實體, 而且是獨立競爭資源的基本實體。    程序

Linux安裝軟件命令

代碼包 相關信息 make bin 一個 軟件包 輸入 -i bin文件 Linux下軟件安裝方法總結:一、rpm包安裝方式步驟:1、找到相應的軟件包,比如soft.version.rpm,下載到本機某個目錄;2、打開一個終端,su -成root用戶;3、cd soft.v

redis key的過期時間 :expire

編寫 抽樣 通過 字符串 n) 開發包 有序集合 memcache jedis Redis是一個開源的Key-Value數據緩存,和Memcached類似。 Redis多種類型的value,包括string(字符串)、list(鏈表)、set(集合)、zset(sort

Linux徹底卸載mysql

安裝mysql nod lib 嘗試 機器 需要 結果 files str Linux下徹底卸載mysql詳解 一、使用以下命令查看當前安裝mysql情況,查找以前是否裝有mysql 1 rpm -qa|grep -i mysql 可以看到如

Linux的監控器之一Ganglia與部署

集群 服務器 監控器 Ganglia基礎詳解Ganglia介紹 Ganglia是一個跨平臺可擴展的,高性能計算系統下的分布式監控系統,如集群和網格。它是基於分層設計,它使用廣泛的技術,如XML數據代表,便攜數據傳輸,RRDtool用於數據存儲和可視化。它利用精心設計的數據結構和算法實現每節點間並發

LINUX分區命令Parted

運行 script mbr gpt分區 ble 版本號 may was mkpart 通常劃分分區工具我們用的比較多是fdisk命令,但是現在由於磁盤越來越廉價,而且磁盤空間越來越大。而fdisk工具他對分區是有大小限制的,它只能劃分小於2T的磁盤。現在的磁盤

linuxlast與lastb命令

bubuko 使用 文件的 clas ip地址 tty 遠程 默認 讀取 在linux系統中,last與lastb命令用來列出目前與過去登錄系統的用戶相關信息。指令英文原義: last, lastb - show listing of last logged in user