C/C++ Windows API将文本发送到剪贴板

3

这段代码的作用是将一个字符串发送到剪贴板。然而,我只能让它正常工作一次。现在当我按下CTRL+V键时,它无法正确地粘贴。

但是当我使用这个片段来识别剪贴板中的文本时,它会显示应该有的内容。

    #include <windows.h>
#include <iostream>
BOOL SetClipboardText(LPCTSTR pszText)
{
   BOOL ok = FALSE;
   if(OpenClipboard(NULL)) {
      // the text should be placed in "global" memory
      HGLOBAL hMem = GlobalAlloc(GMEM_SHARE | GMEM_MOVEABLE, 
         (lstrlen(pszText)+1)*sizeof(pszText[0]) );
      LPTSTR ptxt = (LPTSTR)GlobalLock(hMem);
      lstrcpy(ptxt, pszText);
      GlobalUnlock(hMem);
      // set data in clipboard; we are no longer responsible for hMem
      ok = (BOOL)SetClipboardData(CF_TEXT, hMem);

      CloseClipboard(); // relinquish it for other windows
   }
   return ok;
}

int main()
{
    LPCTSTR test = "DOG";
    SetClipboardText(test);
    return 0;
}


   //get clipboard text
   #include <windows.h>
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
     HANDLE clip;
     if (OpenClipboard(NULL)) 
    clip = GetClipboardData(CF_TEXT);
    printf("%s",clip);
//cout << (char*)clip; // HANDLE==void*, so cast it
cin.get();}
1个回答

3

在使用GetClipboardData返回的剪贴板数据时,需要调用GlobalLock()函数并使用返回的指针作为字符串数据。

对于使用GMEM_MOVABLE分配的对象,内存的指针不能保证与句柄具有相同的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接