在windows中设置GLOBAL剪贴板文本,本机c ++

mat*_*att 1 c++ windows clipboard

我在控制台应用程序中有一个ASCII字符串(空终止字符数组).

所有我想做的就是让我的应用程序将这个字符串放入"全局剪贴板",以便在运行它之后,我可以在任何标准应用程序(在这种情况下,visual studio)中按ctrl + v,我的字符串将被粘贴!

我该怎么做呢?

我已经做好了:

void SetClipboardText(char* txt)
{
    if(!OpenClipboard(NULL))
    {
        __asm int 3;
    }

    int l = PIstrlen(txt);
    HLOCAL la = GlobalAlloc(LMEM_MOVEABLE,l+1);
    void* dest = GlobalLock(la);
    PImemcpy(dest,txt,l+1);
    GlobalUnlock(la);
    if(!SetClipboardData(CF_OEMTEXT,la))
    {
        __asm int 3;
    }
    CloseClipboard();
}
Run Code Online (Sandbox Code Playgroud)

我试过CF_TEXT,CF_OEMTEXT,CF_UNICODE,我在打开剪贴板时尝试过NULL和GetDesktopWindow()

似乎没什么用.编辑:上面的代码总是'有效'它永远不会出错,它永远不会做我想要的!

Kas*_*sma 6

如何在剪贴板上设置文本

CString source; 
//put your text in source
if(OpenClipboard())
{
    HGLOBAL clipbuffer;
    char * buffer;
    EmptyClipboard();
    clipbuffer = GlobalAlloc(GMEM_DDESHARE, source.GetLength()+1);
    buffer = (char*)GlobalLock(clipbuffer);
    strcpy(buffer, LPCSTR(source));
    GlobalUnlock(clipbuffer);
    SetClipboardData(CF_TEXT,clipbuffer);
    CloseClipboard();
}
Run Code Online (Sandbox Code Playgroud)

如何从剪贴板中获取文本

char * buffer;
if(OpenClipboard())
{

    buffer = (char*)GetClipboardData(CF_TEXT);
    //do something with buffer here 
    //before it goes out of scope

}

CloseClipboard(); 
Run Code Online (Sandbox Code Playgroud)