我在控制台应用程序中有一个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();
}
我尝试了CF_TEXT、CF_OEMTEXT、CF_UNICODE,我尝试了在打开剪贴板时使用NULL和GetDesktopWindow(
似乎什么都不起作用。编辑:上面的代码总是“工作”它从来没有错误,它只是从来没有做我想要的!
3条答案
按热度按时间kcrjzv8t1#
如何打开EPUB文件
如何从剪贴板中删除文本
a64a0gku2#
您应该尝试使用Raymond的helper function来表示
SetClipboardData
。问题的一部分可能是您使用了
LMEM_MOVEABLE
和GlobalAlloc
,而您应该使用GMEM_MOVEABLE
,但我还没有验证这一点。w9apscun3#
我必须先调用EmptyClipboard()清空剪贴板
我想这是因为,在我尝试过的所有CF_XXX中,我没有选择最“默认”的一个。
你可以复制一张图片,然后复制文本,它们都被放到剪贴板上,你可以进入一个图片程序,点击粘贴,它会粘贴图片,然后进入一个文本程序,点击粘贴,它会粘贴文本。
因此,我认为我的问题是我没有选择一个“默认”的文本格式,它只是被添加到剪贴板后面的东西在更多的“默认”格式,所以当你点击粘贴在一个程序,它选择了更多的“默认”格式的东西粘贴。
所以,我的不完全理想的修复方法是在OpenClipboard()之后添加EmptyClipboard(),这会导致剪贴板中的所有内容都被删除,程序默认粘贴我的不完全默认格式的文本。