The following example demonstrates the use of the IFileOpenDialog interface, introduced in Windows Vista.
#COMPILE EXE
#DIM ALL
#INCLUDE "ShObjIdl.inc"
FUNCTION PBMAIN () AS LONG
LOCAL hr AS LONG
' // Create an instance of the IFileOpenDialog interface
LOCAL pofd AS IFileOpenDialog
pofd = NEWCOM CLSID $CLSID_FileOpenDialog
IF ISNOTHING(pofd) THEN EXIT FUNCTION
DIM rgFileTypes(2) AS COMDLG_FILTERSPEC
DIM pszNames(2) AS WSTRINGZ * %MAX_PATH
DIM pszSpecs(2) AS WSTRINGZ * %MAX_PATH
pszNames(0) = "PB code files"
pszNames(1) = "Executable files"
pszNames(2) = "All files"
pszSpecs(0) = "*.bas;*.inc"
pszSpecs(1) = "*.exe;*.dll"
pszSpecs(2) = "*.*"
rgFileTypes(0).pszName = VARPTR(pszNames(0)) : rgFileTypes(0).pszSpec = VARPTR(pszSpecs(0))
rgFileTypes(1).pszName = VARPTR(pszNames(1)) : rgFileTypes(1).pszSpec = VARPTR(pszSpecs(1))
rgFileTypes(2).pszName = VARPTR(pszNames(2)) : rgFileTypes(2).pszSpec = VARPTR(pszSpecs(2))
hr = pofd.SetFileTypes(3, rgFileTypes(0))
' // Set the title of the dialog
hr = pofd.SetTitle("A Single-Selection Dialog")
' // Display the dialog
hr = pofd.Show(0)
' // Get the result
LOCAL pItem AS IShellItem
LOCAL pwszName AS WSTRINGZ PTR
IF SUCCEEDED(hr) THEN
hr = pofd.GetResult(pItem)
IF SUCCEEDED(hr) THEN
hr = pItem.GetDisplayName(%SIGDN_FILESYSPATH, pwszName)
MSGBOX @pwszName
CoTaskMemFree(pwszName)
END IF
END IF
END FUNCTION