Hola Jose Antonio:Aquí tienes como hacerlo. Solo dos requisitos importantes para que funcione tal como esta:
1.- Tienes que compilarlo en Windows 2000 porque al compilar se hacen comprobaciones de versión en las cabeceras.
2.- Compilarlo con la versión 5 de C++Builder porque necesita que los ficheros de cabecera esten actualizados con las estructuras necesarias en Windows 2000.
code:
OPENFILENAME ofn;
OSVERSIONINFO ver;
char szFileName[MAX_PATH] = "\0"; // nombre archivo actual
char szInitialDir[MAX_PATH] = "c:\\"; // directorio inicial ZeroMemory(&ofn, sizeof(ofn));
// Comprueba que se esta ejecutando bajo Windows 2000
ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&ver);
if ( (ver.dwPlatformId==VER_PLATFORM_WIN32_NT) && (ver.dwMajorVersion>=5) )
ofn.lStructSize = sizeof(ofn);
else
ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;
ofn.hwndOwner = Handle;
ofn.lpstrFilter = "Archivos de texto (*.txt)\0*.txt";
ofn.nFilterIndex = 1;
ofn.lpstrFile = szFileName;
ofn.nMaxFile = sizeof(szFileName);
ofn.lpstrInitialDir = szInitialDir;
ofn.lpstrTitle = "Abrir archivo de texto";
ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY;
ofn.lpstrDefExt = "*.txt";
//"Descomenta" la linea de abajo si quieres que en Win2000 salga como en Win95
//ofn.FlagsEx = OFN_EX_NOPLACESBAR;
if ( GetOpenFileName(&ofn) )
ShowMessage(szFileName);
Tal como esta una vez lo has compilado con BCB5 en Win2000 da igual que lo ejecutes luego en cualquier versión de Windows ya que comprueba si se esta ejecutando o no en Win2000 y en caso de que no muestra el dialogo tipico de Win95/98.
En caso de que no tengas el BCB5 y quieres que te muestre como hacerlo para que funcione en cualquier versión de C++Builder y aunque no lo compiles directamente en Win2000 avisame.
Más información en la versión actualizada de la ayuda del API en http://msdn.microsoft.com que puedes consultar sin necesidad de bajarla.
Saludos.
_Leo