如何在Windows中更改剪贴板数据

时间:2015-07-20 10:55:00

标签: c++ windows winapi clipboard

我有以下剪贴板数据:

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格式的记录归零。

我该怎么做?

1 个答案:

答案 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();
}