2015-07-20 72 views
0

剪貼板數據我有以下的剪貼板數據:如何更改Windows

enter image description here

我可以以某種方式改變這些記錄的指標?

也可以刪除/使零長度其中一些?

可以通過WinAPI嗎?

至於第一個問題,我沒有看到爲此目的的任何功能。

至於第二個問題,我寫了下面的代碼:

#include <Windows.h> 

int main() 
{ 
    OpenClipboard(NULL); 

    HGLOBAL hdst = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, sizeof(int)); 
    int* dst = (int*)GlobalLock(hdst); 
    dst[0] = 0; 
    GlobalUnlock(hdst); 

    SetClipboardData(49166, hdst); 

    CloseClipboard(); 
} 

但它並沒有歸零的49166格式的記錄。

我該怎麼辦?

+0

[?如何清除剪貼板中指定格式的數據(http://stackoverflow.com/questions/ 14419197 /如何對明確指定的格式數據-從剪貼板) –

回答

0

這是一個方法來做到這一點。首先,使用GetClipboardData api獲取剪貼板數據字符串,然後按照您的方式修改數據字符串。其次,使用SetClipboardData api將字符串重寫爲cliboard。

你不叫GetClipboardData首先從你的代碼,你可以是這樣做的:

char *buffer = NULL; 
CString fromClipboard; 
//open the cliboard 
if (OpenClipboard()) 
{ 
    HANDLE hData = GetClipboardData(CF_TEXT); 
    char* buffer = (char *)GlobalLock(hData); 
    fromClipboard = buffer; 
    //modify fromClipboard string by your method and rewrite to clipboard 
    //maybe like this 
    fromCliboard.Replace("hello", "world"); 
    HGLOBAL clipbuffer; 
    char* buffer; 
    EmptyClipboard(); 
    clipbuffer = GlobalAlloc(GMEM_DDESHARE, source.GetLength()+1); 
    buffer = (char*)GlobalLock(clipbuffer); 
    strcpy(buffer, LPCSTR(source)); 
    GlobalUnlock(hData); 
    GlobalUnlock(clipbuffer); 
    SetClipboardData(CF_TEXT,clipbuffer); 
    CloseClipboard(); 
}