有时候在开发过程中,需要多次拷贝和黏贴一些脚本命令到某种终端,如果该终端支持连续粘贴,那可以一次性的将所有命令复制并贴到终端里。如果不支持,那就只能一条一条的复制粘贴。楼主最近遇到的情况就是在某个项目中,需要按顺序连续的一条一条地拷贝6条命令到一个终端里,相当费时间,次数多了手都累的很!
于是乎花了点时间做了一个“一键拷贝命令工具”,界面如下:
点击左边的每个按钮,即可将右边对应编辑框里的内容写入到windows剪贴板里,再ctrl+v一下,即可完成一条命令的输入。
也就是说:把 “选择命令和ctrl+c” 两步操作 简化为点击一次按钮。
其原理非常简单,核心代码注释如下:
CString strText;
GetDlgItemText(ID, strText); //获取编辑框里的命令内容
if ("" == strText || strText.GetLength() >= 1024)
return;
wchar_t sztmp[1024] = {0};
wsprintf(sztmp, L"%s", strText);
if (::OpenClipboard(m_hWnd)) //打开剪贴板
{
if (::EmptyClipboard())//清空剪贴板内数据
{
int nSize = strText.GetLength() * 2 + 2;//这里是字节数,UNICODE编码每个字符占2个字节,后面加上一个\0结尾符.
HGLOBAL hMem = ::GlobalAlloc(GHND, nSize);
char* pData = (char*)::GlobalLock(hMem);
memcpy_s(pData, nSize, sztmp, nSize - 2);
//sprintf(pData, "%s", strText);
pData[nSize-1] = '\0';
::GlobalUnlock(hMem);
::SetClipboardData(CF_UNICODETEXT, hMem); //将数据写入剪贴板
::CloseClipboard(); //关闭剪贴板,给其它进程使用
::GlobalFree(hMem);
}
}
代码下载路径在这里,供需要的朋友参考,VS2013工程可直接编译运行