Example #1
0
BOOL TSHGetSpecialFolderPathV(HWND hWnd, void *str, int flg, BOOL is_create)
{
	static BOOL (WINAPI *pSHGetSpecialFolderPath)(HWND, void *, int, BOOL);

	if (!pSHGetSpecialFolderPath) {
		pSHGetSpecialFolderPath = (BOOL (WINAPI *)(HWND, void *, int, BOOL))
			::GetProcAddress(::GetModuleHandle("shell32"),
				IS_WINNT_V ? "SHGetSpecialFolderPathW" : "SHGetSpecialFolderPathA");
	}

	return	pSHGetSpecialFolderPath ? pSHGetSpecialFolderPath(hWnd, str, flg, is_create) : FALSE;
}
Example #2
0
BOOL GetPresetDir(LPTSTR pszPath)
{
#if defined(_WIN32_WCE) && _WIN32_WCE < 300
	_tcscpy(pszPath, _T("\\My Documents"));
#elif defined(_WIN32_WCE)
	SHGetSpecialFolderPath(NULL, pszPath, CSIDL_PERSONAL, FALSE);
#else // win32
	GetModuleFileName(GetInst(), pszPath, MAX_PATH);
	LPTSTR p = _tcsrchr(pszPath, _T('\\'));
	if (p) *p = NULL;

	// SHGetSpecialFolderPathがない環境 (WinNT4 SP6 without IE4)
	// のユーザーから苦情がきたため
	// こんなことしなくてもよいのでは? (古い環境に対応していてはきりがない)
	BOOL (WINAPI *pSHGetSpecialFolderPath)(HWND hwndOwner, LPTSTR lpszPath, int nFolder, BOOL fCreate) = NULL;
	HINSTANCE hInstDll = (HINSTANCE)LoadLibrary(_T("shell32.dll"));
	if (hInstDll) {
#ifdef _UNICODE
#ifdef _WIN32_WCE
		(FARPROC&)pSHGetSpecialFolderPath = GetProcAddress(hInstDll, _T("SHGetSpecialFolderPathW"));
#else
		(FARPROC&)pSHGetSpecialFolderPath = GetProcAddress(hInstDll, "SHGetSpecialFolderPathW");
#endif
#else
		(FARPROC&)pSHGetSpecialFolderPath = GetProcAddress(hInstDll, _T("SHGetSpecialFolderPathA"));
#endif
		if (pSHGetSpecialFolderPath)
			pSHGetSpecialFolderPath(NULL, pszPath, CSIDL_PERSONAL, FALSE);
		FreeLibrary(hInstDll);
	}
#endif
	if (_tcslen(pszPath) + _tcslen(PRESET_DIR) + 2 > MAX_PATH)
		return FALSE;
	_tcscat(pszPath, _T("\\"));
	_tcscat(pszPath, PRESET_DIR);
	if (GetFileAttributes(pszPath) == 0xFFFFFFFF)
		CreateDirectory(pszPath, NULL);

	return TRUE;
}