Domino Code Fragment

Code Name*
API Call to Get a filename from the user in Lotuscript?
Date*
04/28/2024
Source (or email address if you prefer)*
Rlatulippe@romac.com
IP address:.18.220.187.178
Description*
This example illustrates how Lotuscript can be used to call a Win32 API Common File Dialog to get a file. Similiar techniques can be used on other operating systems:
Type*
LotusScript
Categories*
(Misc)
Implementation:
Required Client:
Server:
Limitations:
Comments:
Files/Graphics attachments (if applicable): Code:
Option Public
Option Declare



Dim Filter As String
Dim FileName As String
Dim FileTitle As String
Dim TruncName As String


Dim VaultWIPRoot As String
Dim VaultWIPUserPath As String


Type tagOPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As Long
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    Flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As Long    
End Type


Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME)  As Long

Dim OPENFILENAME As tagOPENFILENAME

Public Const OFN_ALLOWMULTISELECT = &H200
Public Const OFN_CREATEPROMPT = &H2000
Public Const OFN_ENABLEHOOK = &H20
Public Const OFN_ENABLETEMPLATE = &H40
Public Const OFN_ENABLETEMPLATEHANDLE = &H80
Public Const OFN_EXPLORER = &H80000                        
Public Const OFN_EXTENSIONDIFFERENT = &H400
Public Const OFN_FILEMUSTEXIST = &H1000
Public Const OFN_HIDEREADONLY = &H4
Public Const OFN_LONGNAMES = &H200000                      
Public Const OFN_NOCHANGEDIR = &H8
Public Const OFN_NODEREFERENCELINKS = &H100000
Public Const OFN_NOLONGNAMES = &H40000                      
Public Const OFN_NONETWORKBUTTON = &H20000
Public Const OFN_NOREADONLYRETURN = &H8000
Public Const OFN_NOTESTFILECREATE = &H10000
Public Const OFN_NOVALIDATE = &H100
Public Const OFN_OVERWRITEPROMPT = &H2
Public Const OFN_PATHMUSTEXIST = &H800
Public Const OFN_READONLY = &H1
Public Const OFN_SHAREAWARE = &H4000
Public Const OFN_SHAREFALLTHROUGH = 2
Public Const OFN_SHARENOWARN = 1
Public Const OFN_SHAREWARN = 0
Public Const OFN_SHOWHELP = &H10


Function OpenCommDlg ()
    Dim Title As String    
    Dim DefExt As String
    Dim szCurDir As String
    Dim APIResults%
   
    SetFileFilter
   
    'Give the dialog a caption title.
    Title = "Add supporting document" & Chr$(0)
   
    'Allocate string space for returned strings
    FileName = Chr$(0) & Space$(255) & Chr$(0)
    FileTitle = Space$(255) & Chr$(0)
   
    'If the user does not specify an extension, append TXT.
    DefExt = "BMP" & Chr$(0)
   
    'Set up the default directory
    szCurDir = Curdir$ & Chr$(0)
   
    'Set up the data structure before you call the GetOpenFileName
   
    OPENFILENAME.lStructSize = Len(OPENFILENAME)
   
    'If the OpenFile Dialog box is not linked to any form use this line.
    'It will pass a null pointer.
   
    OPENFILENAME.hwndOwner = 0&
   
    OPENFILENAME.lpstrFilter =  Filter
    OPENFILENAME.nFilterIndex = 1
    OPENFILENAME.lpstrFile = FileName
    OPENFILENAME.nMaxFile = Len(FileName)
    OPENFILENAME.lpstrFileTitle = FileTitle

     OPENFILENAME.nMaxFileTitle = Len(FileTitle)
    OPENFILENAME.lpstrTitle = Title
    OPENFILENAME.Flags = OFN_FILEMUSTEXIST
    OPENFILENAME.lpstrDefExt = DefExt
    OPENFILENAME.hInstance = 0
    OPENFILENAME.lpstrCustomFilter = 0
    OPENFILENAME.nMaxCustFilter = 0
    OPENFILENAME.lpstrInitialDir = szCurDir
    OPENFILENAME.nFileOffset = 0
    OPENFILENAME.nFileExtension = 0
    OPENFILENAME.lCustData = 0
    OPENFILENAME.lpfnHook = 0
    OPENFILENAME.lpTemplateName = 0
   
    'This will pass the desired data structure to the Windows API,
    'which will in turn it uses to display the Open Dialog form.  
    APIResults% = GetOpenFileName(OPENFILENAME)
   
    If APIResults% <> 0 Then          
         FileName = Cstr( OPENFILENAME.lpstrFile )
         FileTitle = Cstr( OPENFILENAME.lpstrFileTitle )        
         OpenCommDlg = 1
    Else
         OpenCommDlg = 0
    End If
End Function


Sub Initialize
    If (OpenCommDlg = 1) Then
         Print " "
' use FileExt and other globals that contain the filename and extension, etc.
    Else
         Print "No documents were attached."
    End If
   
End Sub