剪切板操作SetClipboardData GetClipboardData


Code:

1. // Funciton:    
2. // 拷贝数据到剪切板   
3. // 从剪切板粘贴数据    
4. // Data:2011/4/8    
5. #include <windows.h>   
6. #include <stdio.h>   
7. void SetDataToClip(void)    
8. {   
9.     // 打开剪贴板   
10.     if (!OpenClipboard(NULL)|| !EmptyClipboard())    
11.     {   
12.         printf("打开或清空剪切板出错!/n");   
13.         return;   
14.     }   
15.        
16.     HGLOBAL hMen;   
17.     TCHAR strText[256] = "我被拷贝到剪切板!/n";   
18.        
19.     // 分配全局内存    
20.     hMen = GlobalAlloc(GMEM_MOVEABLE, ((strlen(strText)+1)*sizeof(TCHAR)));    
21.        
22.     if (!hMen)   
23.     {   
24.         printf("分配全局内存出错!/n");    
25.         // 关闭剪切板    
26.         CloseClipboard();   
27.         return;         
28.     }   
29.        
30.     // 把数据拷贝考全局内存中   
31.     // 锁住内存区    
32.     LPSTR lpStr = (LPSTR)GlobalLock(hMen);    
33.        
34.     // 内存复制   
35.     memcpy(lpStr, strText, ((strlen(strText))*sizeof(TCHAR)));    
36.     // 字符结束符    
37.     lpStr[strlen(strText)] = (TCHAR)0;   
38.     // 释放锁    
39.     GlobalUnlock(hMen);   
40.        
41.     // 把内存中的数据放到剪切板上   
42.     SetClipboardData(CF_TEXT, hMen);   
43.     CloseClipboard();   
44.        
45.     return;   
46. }   
47. void GetDataFromClip()   
48. {   
49.     // 判断数据格式    
50.     if (!IsClipboardFormatAvailable(CF_TEXT) )   
51.     {   
52.         printf("剪切板数据格式不是CF_TEXT/n");   
53.         return;   
54.     }   
55.        
56.     if (!OpenClipboard(NULL))    
57.     {   
58.         printf("打开剪切板出错!/n");   
59.         return;   
60.     }   
61.     // 从剪切板获取数据    
62.     HGLOBAL hMem = GetClipboardData(CF_TEXT);   
63.     if (hMem)   
64.     {    
65.         //  获取字符串    
66.         LPSTR lpStr = (LPSTR)GlobalLock(hMem);     
67.         if (lpStr)   
68.         {   
69.             printf(lpStr);   
70.             // 释放内存锁    
71.             GlobalUnlock(hMem);    
72.         }   
73.     }    
74.     // 关闭剪切板    
75.     CloseClipboard();    
76. }   
77. int main(void)   
78. {   
79.     //SetDataToClip();   
80.     GetDataFromClip();    
81.     return 0;   
82. }

Code:

1. // Funciton:    
2. // 拷贝数据到剪切板   
3. // 从剪切板粘贴数据    
4. // Data:2011/4/8    
5. #include <windows.h>   
6. #include <stdio.h>   
7. void SetDataToClip(void)    
8. {   
9.     // 打开剪贴板   
10.     if (!OpenClipboard(NULL)|| !EmptyClipboard())    
11.     {   
12.         printf("打开或清空剪切板出错!/n");   
13.         return;   
14.     }   
15.        
16.     HGLOBAL hMen;   
17.     TCHAR strText[256] = "我被拷贝到剪切板!/n";   
18.        
19.     // 分配全局内存    
20.     hMen = GlobalAlloc(GMEM_MOVEABLE, ((strlen(strText)+1)*sizeof(TCHAR)));    
21.        
22.     if (!hMen)   
23.     {   
24.         printf("分配全局内存出错!/n");    
25.         // 关闭剪切板    
26.         CloseClipboard();   
27.         return;         
28.     }   
29.        
30.     // 把数据拷贝考全局内存中   
31.     // 锁住内存区    
32.     LPSTR lpStr = (LPSTR)GlobalLock(hMen);    
33.        
34.     // 内存复制   
35.     memcpy(lpStr, strText, ((strlen(strText))*sizeof(TCHAR)));    
36.     // 字符结束符    
37.     lpStr[strlen(strText)] = (TCHAR)0;   
38.     // 释放锁    
39.     GlobalUnlock(hMen);   
40.        
41.     // 把内存中的数据放到剪切板上   
42.     SetClipboardData(CF_TEXT, hMen);   
43.     CloseClipboard();   
44.        
45.     return;   
46. }   
47. void GetDataFromClip()   
48. {   
49.     // 判断数据格式    
50.     if (!IsClipboardFormatAvailable(CF_TEXT) )   
51.     {   
52.         printf("剪切板数据格式不是CF_TEXT/n");   
53.         return;   
54.     }   
55.        
56.     if (!OpenClipboard(NULL))    
57.     {   
58.         printf("打开剪切板出错!/n");   
59.         return;   
60.     }   
61.     // 从剪切板获取数据    
62.     HGLOBAL hMem = GetClipboardData(CF_TEXT);   
63.     if (hMem)   
64.     {    
65.         //  获取字符串    
66.         LPSTR lpStr = (LPSTR)GlobalLock(hMem);     
67.         if (lpStr)   
68.         {   
69.             printf(lpStr);   
70.             // 释放内存锁    
71.             GlobalUnlock(hMem);    
72.         }   
73.     }    
74.     // 关闭剪切板    
75.     CloseClipboard();    
76. }   
77. int main(void)   
78. {   
79.     //SetDataToClip();   
80.     GetDataFromClip();    
81.     return 0;   
82. }