Acho que é próximo do que você quer:
Função C_PUTFILE portada da MiniGui mas pode ser usada em qq compilação
cNome_Arq := C_PUTFILE("ControlPos File (*.ret)" + Chr(0) + "*.ret" + Chr(0), "Save control positon to file", "D:\TBI_TCP\", Nil, "CB14030200.RET" )
#pragma BEGINDUMP
#define _WIN32_IE 0x0500
#define HB_OS_WIN_USED
#define _WIN32_WINNT 0x0400
#include <shlobj.h>
#include <windows.h>
#include <commctrl.h>
#include "hbapi.h"
#include "hbvm.h"
#include "hbstack.h"
#include "hbapiitm.h"
#include "winreg.h"
#include "tchar.h"
// Like C_PUTFILE(aType,cTitle,cDefDir,lChaneDir,!NEW!cDefaultFileName)
HB_FUNC ( C_PUTFILE )
{
OPENFILENAME ofn;
char buffer[512];
int flags = OFN_FILEMUSTEXIST | OFN_EXPLORER ;
if ( hb_parl(4) )
{
flags = flags | OFN_NOCHANGEDIR ;
}
strcpy( buffer, hb_parc(5) ); //here is change "cDefaultFileName"
memset( (void*) &ofn, 0, sizeof( OPENFILENAME ) );
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = GetActiveWindow() ;
ofn.lpstrFilter = hb_parc(1) ;
ofn.lpstrFile = buffer;
ofn.nMaxFile = 512;
ofn.lpstrInitialDir = hb_parc(3);
ofn.lpstrTitle = hb_parc(2) ;
ofn.Flags = flags;
if( GetSaveFileName( &ofn ) )
{
hb_retc( ofn.lpstrFile );
}
else
{
hb_retc( "" );
}
}
#pragma ENDDUMP