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()
似乎没什么用.编辑:上面的代码总是'有效'它永远不会出错,它永远不会做我想要的!
如何在剪贴板上设置文本
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)