| 625 | | typedef HRESULT (WINAPI *SHGETFOLDERPATH)( HWND, int, HANDLE, DWORD, |
|---|
| 626 | | LPWSTR ); |
|---|
| 627 | | #ifndef CSIDL_FLAG_CREATE |
|---|
| 628 | | # define CSIDL_FLAG_CREATE 0x8000 |
|---|
| 629 | | #endif |
|---|
| 630 | | #ifndef CSIDL_APPDATA |
|---|
| 631 | | # define CSIDL_APPDATA 0x1A |
|---|
| 632 | | #endif |
|---|
| 633 | | #ifndef CSIDL_PROFILE |
|---|
| 634 | | # define CSIDL_PROFILE 0x28 |
|---|
| 635 | | #endif |
|---|
| 636 | | #ifndef SHGFP_TYPE_CURRENT |
|---|
| 637 | | # define SHGFP_TYPE_CURRENT 0 |
|---|
| 638 | | #endif |
|---|
| 639 | | |
|---|
| 640 | | HINSTANCE shfolder_dll; |
|---|
| 641 | | SHGETFOLDERPATH SHGetFolderPath ; |
|---|
| 642 | | |
|---|
| 643 | | /* load the shfolder dll to retrieve SHGetFolderPath */ |
|---|
| 644 | | if( ( shfolder_dll = LoadLibrary( _T("SHFolder.dll") ) ) != NULL ) |
|---|
| 645 | | { |
|---|
| 646 | | SHGetFolderPath = (void *)GetProcAddress( shfolder_dll, |
|---|
| 647 | | _T("SHGetFolderPathW") ); |
|---|
| 648 | | if ( SHGetFolderPath != NULL ) |
|---|
| 649 | | { |
|---|
| 650 | | wchar_t whomedir[MAX_PATH]; |
|---|
| 651 | | |
|---|
| 652 | | /* get the "Application Data" folder for the current user */ |
|---|
| 653 | | if( S_OK == SHGetFolderPath( NULL, |
|---|
| 654 | | (b_appdata ? CSIDL_APPDATA : |
|---|
| 655 | | CSIDL_PROFILE) | CSIDL_FLAG_CREATE, |
|---|
| 656 | | NULL, SHGFP_TYPE_CURRENT, |
|---|
| 657 | | whomedir ) ) |
|---|
| 658 | | { |
|---|
| 659 | | FreeLibrary( shfolder_dll ); |
|---|
| 660 | | return FromWide( whomedir ); |
|---|
| 661 | | } |
|---|
| 662 | | } |
|---|
| 663 | | FreeLibrary( shfolder_dll ); |
|---|
| 664 | | } |
|---|
| | 629 | wchar_t whomedir[MAX_PATH]; |
|---|
| | 630 | /* Get the "Application Data" folder for the current user */ |
|---|
| | 631 | if( S_OK == SHGetFolderPathW( NULL, |
|---|
| | 632 | (b_appdata ? CSIDL_APPDATA : CSIDL_PROFILE) | CSIDL_FLAG_CREATE, |
|---|
| | 633 | NULL, SHGFP_TYPE_CURRENT, whomedir ) ) |
|---|
| | 634 | return FromWide( whomedir ); |
|---|