윈도 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으로 합치셔야 합니다.
댓글 달기