윈도 2000에서 파일의 경로를 클립보드에 넣기...
글쓴이: ckmcj / 작성시간: 일, 2003/05/04 - 12:39오후
m_TempList라는 리스트 박스에 현재 선택된
파일들의 전체 경로가 있구요....
첫 번째 루프에서 메모리 할당후
두 번째 루프에서
c:\temp1.txt'\0'c:\temp2.txt'\0''\0'
위와 같은 형식의 문자열을 만든후
세번째 루프에서 multibyte char 로 바꿉니다(win 2000 입니다.)
근데 문제는 한글이 들어간 경로는 문제가 생기네요.....
http://www.codeguru.com/clipboard/CopyFilesToExplorer.shtml
여기를 참고해서 했습니다.
BOOL CMainFrame::ListToClipboard(DROPEFFECT effect)
{
GetSelectedList()->SelToList(&m_TempList);
char *sFiles=NULL,text[MAX_PATH];
int i,n=m_TempList.GetCount();
int total=0,size=0;
if(n==0) return FALSE;
for(i=0;i<n;i++)
{
m_TempList.GetText(i,text);
size=strlen(text);
total+=(size+1);
}
sFiles=(char *)malloc(++total);
for(i=0,total=0;i<n;i++)
{
m_TempList.GetText(i,text);
size=strlen(text);
strcpy(sFiles+total,text);
AfxMessageBox(sFiles+total);
total+=size;
total+=1;//NULL 추가
}
sFiles[++total-1]='\0';
DROPFILES dobj = { 20, { 0, 0 }, 0, 1 };
int nGblLen = sizeof(dobj) + total*2 +5;//lots of nulls and multibyte_char
HGLOBAL hGbl = GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE, nGblLen);
char* sData = (char*)::GlobalLock(hGbl);
memcpy( sData, &dobj, 20 );
char* sWStr = sData+20;
int srcPos,destPos;
for( srcPos=destPos=0; destPos < total*2; destPos += 2 )
{
if(sFiles[srcPos]<0)
{
CString set;
sWStr[destPos] = sFiles[srcPos];
sWStr[destPos+1] = sFiles[srcPos+1];
set+=sWStr[destPos];
set+=sWStr[destPos+1];
AfxMessageBox(set);
srcPos+=2;
total--;
}
else
sWStr[destPos] = sFiles[srcPos++];
}
::GlobalUnlock(hGbl);
free(sFiles);
if( OpenClipboard() )
{
EmptyClipboard();
// only DWORD
HGLOBAL h2 = GlobalAlloc ( GMEM_ZEROINIT | GMEM_MOVEABLE | GMEM_DDESHARE, sizeof(DWORD) );
DWORD *pdw1 = (DWORD *)GlobalLock(h2);
(*pdw1) = effect;
GlobalUnlock(h2);
// Our Preferred item comes first
SetClipboardData( RegisterClipboardFormat( CFSTR_PREFERREDDROPEFFECT ), h2 );
SetClipboardData( CF_HDROP, hGbl );
CloseClipboard();
}
else
return FALSE;
return TRUE;
}Forums:


우선 DROPFILES 구조체에 대해서 보시고요.http://ms
우선 DROPFILES 구조체에 대해서 보시고요.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/structures/dropfiles.asp
DROPFILES dobj = { 20, { 0, 0 }, 0, 1 };이렇게 하셨으면 Unicode character 를 사용하겠다는 말입니다. unicode 변환 함수로 미리 string을 변환한 다음 원하시는 format으로 합치셔야 합니다.
댓글 달기