/* * [ getfolder.cpp ] * * ## SHGetSpecialFolderPath の使用例 * ## CSIDL の列挙 * */ #include #include #include "resource.h" #define NUM_CSIDL 30 // 要素数 // 定数情報を格納する構造体 typedef struct tagCSIDL_CONST { int clIndex; int clValue; char clName[30]; } CSIDL_CONST, *PCSIDL_CONST; // 定数一覧を入力 CSIDL_CONST alldata[NUM_CSIDL]= { { 0, CSIDL_DESKTOP, "CSIDL_DESKTOP" }, { 1, CSIDL_INTERNET, "CSIDL_INTERNET" }, { 2, CSIDL_PROGRAMS, "CSIDL_PROGRAMS" }, { 3, CSIDL_CONTROLS, "CSIDL_CONTROLS" }, { 4, CSIDL_PRINTERS, "CSIDL_PRINTERS" }, { 5, CSIDL_PERSONAL, "CSIDL_PERSONAL" }, { 6, CSIDL_FAVORITES, "CSIDL_FAVORITES" }, { 7, CSIDL_STARTUP, "CSIDL_STARTUP" }, { 8, CSIDL_RECENT, "CSIDL_RECENT" }, { 9, CSIDL_SENDTO, "CSIDL_SENDTO" }, { 10, CSIDL_BITBUCKET, "CSIDL_BITBUCKET" }, { 11, CSIDL_STARTMENU, "CSIDL_STARTMENU" }, { 12, CSIDL_DESKTOPDIRECTORY, "CSIDL_DESKTOPDIRECTORY" }, { 13, CSIDL_DRIVES, "CSIDL_DRIVES" }, { 14, CSIDL_NETWORK, "CSIDL_NETWORK" }, { 15, CSIDL_NETHOOD, "CSIDL_NETHOOD" }, { 16, CSIDL_FONTS, "CSIDL_FONTS" }, { 17, CSIDL_TEMPLATES, "CSIDL_TEMPLATES" }, { 18, CSIDL_COMMON_STARTMENU, "CSIDL_COMMON_STARTMENU" }, { 19, CSIDL_COMMON_PROGRAMS, "CSIDL_COMMON_PROGRAMS" }, { 20, CSIDL_COMMON_STARTUP, "CSIDL_COMMON_STARTUP" }, { 21, CSIDL_COMMON_DESKTOPDIRECTORY, "CSIDL_COMMON_DESKTOPDIRECTORY" }, { 22, CSIDL_APPDATA, "CSIDL_APPDATA" }, { 23, CSIDL_PRINTHOOD, "CSIDL_PRINTHOOD" }, { 24, CSIDL_ALTSTARTUP, "CSIDL_ALTSTARTUP" }, { 25, CSIDL_COMMON_ALTSTARTUP, "CSIDL_COMMON_ALTSTARTUP" }, { 26, CSIDL_COMMON_FAVORITES, "CSIDL_COMMON_FAVORITES" }, { 27, CSIDL_INTERNET_CACHE, "CSIDL_INTERNET_CACHE" }, { 28, CSIDL_COOKIES, "CSIDL_COOKIES" }, { 29, CSIDL_HISTORY, "CSIDL_HISTORY" } }; const char szClassName[]= "GetFolder"; HMODULE hAppModule= NULL; LRESULT CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { hAppModule= (HMODULE)hInstance; HWND hDlg= ::CreateDialog(hAppModule, MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)DlgProc); ::ShowWindow(hDlg,SW_SHOW); MSG msg; while ( ::GetMessage(&msg,NULL,0,0) ) { if ( !::IsDialogMessage(hDlg,&msg) ) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } } return 0; } LRESULT CALLBACK DlgProc(HWND in_hWnd, UINT in_Message, WPARAM in_wParam, LPARAM in_lParam) { int i= 0; int selindex= 0; int ret= 0; HWND hCtrl= NULL; char folderpath[MAX_PATH]; switch ( in_Message ) { case WM_INITDIALOG: hCtrl= ::GetDlgItem(in_hWnd,IDC_LIST1); for ( i=0 ; i