Programming/Win32&MFC&COM
특수한 폴더의 경로를 알아오기
psychoria
2015. 6. 6. 00:00
반응형
Windows를 사용하다보면, 특수한 폴더들이 몇 군데 있습니다.
일단 대표적인 게 Windows가 설치된 폴더, System 폴더가 있습니다.
바탕화면 폴더, 폰트 폴더 등도 특수한 폴더에 속합니다.
이러한 폴더 주소는 사용자마다 다를 수 있기 때문에 프로그래밍시에 직접 넣는 것은 위험할 수 있습니다.
쉘 함수 중에 이런 특수한 폴더의 경로를 알아내는 함수가 존재합니다.
HRESULT SHGetSpecialFolderLocation(HWND hwndOwner, int nFolder, PIDLIST_ABSOLUTE *ppidl)
SHGetSpecialFolderLocation() 라는 함수입니다.
첫 번째 인자는 미래를 위해서 예약된 인자이므로 NULL을 넣어줍니다.
두 번째 인자가 가장 중요한 부분인데 원하는 폴더가 어떤 것인지를 적는 부분입니다.
세 번째 부분은 결과를 받기 위해서 전달합니다.
함수의 사용은 다음과 같이 가능합니다.
#include <ShlObj.h>
#include <iostream>
int main()
{
LPITEMIDLIST itemList = nullptr;
wchar_t szPath[MAX_PATH] = {0, };
SHGetSpecialFolderLocation(nullptr, CSIDL_PROGRAM_FILESX86, &itemList);
SHGetPathFromIDListW(itemList, szPath);
CoTaskMemFree(itemList);
std::wcout << "\""<< szPath << "\"" << std::endl;
return 0;
}
간단하게 사용이 가능합니다.
LPITEMIDLIST 변수를 사용한 이후에는 CoTaskMemFree로 반드시 메모리 해제를 해줘야 합니다.
두 번째 인자에 원하는 폴더의 ID를 입력하면 경로를 획득할 수 있습니다.
특수한 폴더의 경로를 정확하게 획득하고자 할 때 사용하면 됩니다.
이 함수를 포함하는 SHGetFolderLocation()이라는 함수도 존재합니다.
반응형