9 个解决方案
#1
你的意思是用程序模拟这个效果么还是什么?
#2
也可以这么说吧
我在程序里的LIstView里有文件目录,当选择多个文件进行复制时,希望能把它放到剪切板里
我在程序里的LIstView里有文件目录,当选择多个文件进行复制时,希望能把它放到剪切板里
#3
你把选中的文件路径名字 保存在TStringLis
然后循环TStringLis 获取路径名;
最后用SHFileOperation复制文件夹 或者用CopyFile赋值文件
然后循环TStringLis 获取路径名;
最后用SHFileOperation复制文件夹 或者用CopyFile赋值文件
#4
选中,这样copytocliboard不行?
#5
不行,因为不确定要保存到哪个目录,有可能关了程序用户仍能粘贴,这就应该是保存到剪切板里的
#6
关闭了你的程序,仍能保存?
你的程序都关了 你TStringLis早没了
那你这里 “路径存放到TStringLis里,” 不是瞎扯
#7
//---------------------------------------------------------------------------
//#define NO_WIN32_LEAN_AND_MEAN
//#include <shlobj.h>
bool CopyFilesToClip(TStringList *fileList)
{
//复制文件到剪切板,对于多个文件,没有参数指定文件个数,
//每个文件名用 0 分隔,所有文件名结束用 两个0表示
DROPFILES *dropFiles;
UINT memLen;
HGLOBAL Gmem;
char *pMem,*szFileList;
//记算所需内存大小。
memLen=sizeof(DROPFILES);
for(int i=0;i<fileList->Count;i++)
memLen+=fileList->Strings[i].Length()+1;
memLen++; //最后一个0的位置。
Gmem= GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE, memLen);
pMem=(char*)GlobalLock(Gmem);
if(pMem==NULL)
{
GlobalFree(Gmem);
return false;
}
dropFiles=(DROPFILES*)pMem;
szFileList=pMem+sizeof(DROPFILES);
dropFiles->pFiles =sizeof(DROPFILES);
dropFiles->pt.x=0;
dropFiles->pt.y=0;
dropFiles->fNC =false;
dropFiles->fWide =false;
int nameLen=0;
for(int i=0;i<fileList->Count;i++)
{
nameLen+=wsprintf(szFileList+nameLen,fileList->Strings[i].c_str());
nameLen++;//字符结尾0的位置。
}
szFileList[nameLen]=0;//最后一个0。
GlobalUnlock(Gmem);
if(!OpenClipboard(NULL) )
{
GlobalFree(Gmem);
return false;
}
bool retValue=true;
EmptyClipboard();
if(NULL==SetClipboardData( CF_HDROP, Gmem ))
retValue=false;
CloseClipboard();
return retValue;
}
//---------------------------------------------------------------------------
#8
感谢 1cctv ,也感谢参与的大大,谢谢
#9
#1
你的意思是用程序模拟这个效果么还是什么?
#2
也可以这么说吧
我在程序里的LIstView里有文件目录,当选择多个文件进行复制时,希望能把它放到剪切板里
我在程序里的LIstView里有文件目录,当选择多个文件进行复制时,希望能把它放到剪切板里
#3
你把选中的文件路径名字 保存在TStringLis
然后循环TStringLis 获取路径名;
最后用SHFileOperation复制文件夹 或者用CopyFile赋值文件
然后循环TStringLis 获取路径名;
最后用SHFileOperation复制文件夹 或者用CopyFile赋值文件
#4
选中,这样copytocliboard不行?
#5
不行,因为不确定要保存到哪个目录,有可能关了程序用户仍能粘贴,这就应该是保存到剪切板里的
#6
关闭了你的程序,仍能保存?
你的程序都关了 你TStringLis早没了
那你这里 “路径存放到TStringLis里,” 不是瞎扯
#7
//---------------------------------------------------------------------------
//#define NO_WIN32_LEAN_AND_MEAN
//#include <shlobj.h>
bool CopyFilesToClip(TStringList *fileList)
{
//复制文件到剪切板,对于多个文件,没有参数指定文件个数,
//每个文件名用 0 分隔,所有文件名结束用 两个0表示
DROPFILES *dropFiles;
UINT memLen;
HGLOBAL Gmem;
char *pMem,*szFileList;
//记算所需内存大小。
memLen=sizeof(DROPFILES);
for(int i=0;i<fileList->Count;i++)
memLen+=fileList->Strings[i].Length()+1;
memLen++; //最后一个0的位置。
Gmem= GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE, memLen);
pMem=(char*)GlobalLock(Gmem);
if(pMem==NULL)
{
GlobalFree(Gmem);
return false;
}
dropFiles=(DROPFILES*)pMem;
szFileList=pMem+sizeof(DROPFILES);
dropFiles->pFiles =sizeof(DROPFILES);
dropFiles->pt.x=0;
dropFiles->pt.y=0;
dropFiles->fNC =false;
dropFiles->fWide =false;
int nameLen=0;
for(int i=0;i<fileList->Count;i++)
{
nameLen+=wsprintf(szFileList+nameLen,fileList->Strings[i].c_str());
nameLen++;//字符结尾0的位置。
}
szFileList[nameLen]=0;//最后一个0。
GlobalUnlock(Gmem);
if(!OpenClipboard(NULL) )
{
GlobalFree(Gmem);
return false;
}
bool retValue=true;
EmptyClipboard();
if(NULL==SetClipboardData( CF_HDROP, Gmem ))
retValue=false;
CloseClipboard();
return retValue;
}
//---------------------------------------------------------------------------
#8
感谢 1cctv ,也感谢参与的大大,谢谢