RESPUESTA A LA PREGUNTA 13575 - C/VISUAL C #include #include // Esta macro convierte en un valor DWORD el número de versión #define PACKVERSION(major,minor) MAKELONG(minor,major) #ifndef BIF_USENEWUI #define BIF_USENEWUI 0x0050 #endif // Muestra una Dialog de selección de directorios, dejando en el parámetro el seleccionado // Devuelve FALSE si no se seleccionó ningún directorio BOOL SelectFolder( CString& nFolderName, LPCTSTR nTitulo, UINT nFlags ) { BOOL bRet; char pszPath[MAX_PATH]; BROWSEINFO mPtrBInfo; mPtrBInfo.hwndOwner = NULL; // HWND mPtrBInfo.pidlRoot = NULL; // LPCITEMIDLIST mPtrBInfo.pszDisplayName = pszPath; // LPTSTR mPtrBInfo.lpszTitle = nTitulo; // LPCTSTR if(GetDllVersion(TEXT("Shell32.dll")) >= PACKVERSION(5,0)) mPtrBInfo.ulFlags = nFlags | BIF_RETURNONLYFSDIRS | BIF_USENEWUI else mPtrBInfo.ulFlags = nFlags | BIF_RETURNONLYFSDIRS; mPtrBInfo.lpfn = NULL; // BFFCALLBACK mPtrBInfo.lParam = 0L; // LPARAM mPtrBInfo.iImage = 0; // int if ( OleInitialize( NULL ) != S_OK ) AfxMessageBox( "Error inicializando OLE" ); ITEMIDLIST *mPtrIList = SHBrowseForFolder( &mPtrBInfo ); bRet = SHGetPathFromIDList( mPtrIList, pszPath ); OleUninitialize(); if ( bRet ) nFolderName = pszPath; return bRet; } // Obtener el número de versión de una DLL DWORD GetDllVersion(LPCTSTR lpszDllName) { HINSTANCE hinstDll; DWORD dwVersion = 0; hinstDll = LoadLibrary(lpszDllName); if(hinstDll) { DLLGETVERSIONPROC pDllGetVersion; pDllGetVersion = (DLLGETVERSIONPROC) GetProcAddress(hinstDll, "DllGetVersion"); // Because some DLLs may not implement this function, you // must test for it explicitly. Depending on the particular // DLL, the lack of a DllGetVersion function may // be a useful indicator of the version. if(pDllGetVersion) { DLLVERSIONINFO dvi; HRESULT hr; ZeroMemory(&dvi, sizeof(dvi)); dvi.cbSize = sizeof(dvi); hr = (*pDllGetVersion)(&dvi); if(SUCCEEDED(hr)) { dwVersion = PACKVERSION(dvi.dwMajorVersion, dvi.dwMinorVersion); } } FreeLibrary(hinstDll); } return dwVersion; } Oscar Vazquez oscar.vazquez@proteccionsearch.com.ar http://www.lawebdelprogramador.com