방법 1)
브라우저에서 "다운로드 받은 파일 보기" 와 같은걸 사용하면 해당 폴더를 열어주고
다운로드 받은 파일을 자동으로 선택해 줍니다.
이 기능을 구현하기 위해서 사용하는 api 는 SHOpenFolderAndSelectItems 인데
2000은 안되고 xp 부터만 사용이 가능할 뿐만 아니라 PIDL 을 사용해야 되기 때문에
사용 방법도 복잡합니다.
그런데 보니까 explorer 커맨드 라인 명령에 /select 라는게 있었네요.
http://support.microsoft.com/kb/152457
커맨드 창에 아래처럼 입력을 해보면 setup.exe 가 자동으로 선택되어 있는걸 확인할 수 있습니다.
Code:
explorer /select,c:\down\setup.exe
예제)
예전에 사용했던 소스인데 약간 수정하였습니다.
void CEasyProcessDlg::OpenFolder(CString strPath)
{
char szWinDir[MAX_PATH]={0,}, szDrv[5]={0,}, szPath[MAX_PATH]={0,};
char szName[100], szExt[10];
CString strPath2;
strPath.TrimLeft("\\??\\");
strPath.TrimLeft("\\");
_splitpath((LPSTR)(LPCTSTR)strPath, szDrv, szPath, szName, szExt);
strPath2.Format("/select,%s", strPath);
ShellExecute(NULL, "open", "explorer.exe", strPath2, NULL, SW_SHOWNORMAL);
}
방법2)
구글링을 해도 SHOpenFolderAndSelectItems() 사용법이 제대로 나온곳이 없어서
SHOpenFolderAndSelectItems() 를 사용하는 함수도 만들어 봤습니다. (버그가 있을찌도..)
그런데 SHOpenFolderAndSelectItems() 는 wine 에서 not implemented 에러를 토해내고 죽어 버리더군요. wine 도 고려하신다면 피해야 할듯.
Code:
ITEMIDLIST* IDListFromPath(LPCTSTR pathName)
{
LPSHELLFOLDER pDesktopFolder;
HRESULT hr = SHGetDesktopFolder(&pDesktopFolder);
ITEMIDLIST *pidl=NULL;
if (FAILED(hr)) {ASSERT(0); return NULL;}
OLECHAR olePath [MAX_PATH];
#ifdef _UNICODE
lstrcpy(olePath, pathName);
#else
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpszPath, -1, pathName, MAX_PATH);
#endif
ULONG chEaten;
ULONG dwAttributes;
hr = pDesktopFolder->ParseDisplayName(NULL, NULL, olePath, &chEaten, &pidl, &dwAttributes);
pDesktopFolder->Release();
return pidl;
}
BOOL OpenFolderAndSelectItems(LPCTSTR filePathName)
{
BOOL ret = TRUE;
ITEMIDLIST* pidlFile = IDListFromPath(filePathName);
if(pidlFile==NULL || FAILED(SHOpenFolderAndSelectItems(pidlFile, 0, NULL, 0)))
{ASSERT(0); ret = FALSE;}
if(pidlFile) ::ILFree(pidlFile);
return ret;
}
이렇게 사용하면 됩니다.
Code:
OpenFolderAndSelectItems(L"c:\\temp\\test.txt");
'프로그래밍 팁 > etc' 카테고리의 다른 글
커맨드라인 문자열 간단하게 파싱하기 (0) | 2011.07.11 |
---|---|
PE파일의 API확인 명령어[간단] (0) | 2011.07.11 |
파일 시간 가져오기(Create Time, Access Time, Write Time) (0) | 2011.07.07 |
압축 프로그램의 컨텍스트 메뉴 중 새폴더 만들기 (2) | 2011.07.07 |
파일사이즈 구하기 (0) | 2011.07.06 |