我有以下剪贴板数据:
我可以以某种方式更改这些记录的索引吗?
我也可以删除/制作其中一些零长度吗?
是否可以通过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 :(得分: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();
}