반응형
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()이라는 함수도 존재합니다.
반응형
'Programming > Win32&MFC&COM' 카테고리의 다른 글
파일명 변경하는 API 함수 목록 (0) | 2015.06.17 |
---|---|
Memory Mapped File(MMF)를 이용한 프로세스간 메모리 공유 (0) | 2015.06.16 |
MFC 다이얼로그, SDI, MDI의 최소 크기(Size) 설정 (0) | 2015.06.04 |
MFC의 CFileFind를 이용한 파일명 열거 (0) | 2015.06.03 |
CRect의 DeflateRect() 메소드 (0) | 2015.06.01 |