[DllImport("comdlg32.dll", SetLastError=true, CharSet = CharSet.Auto)]
static extern bool GetOpenFileName([In, Out] OpenFileName ofn);
<DllImport("comdlg32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function GetOpenFileName(<[In], Out> ByVal ofn As OpenFileName) As Boolean
End Function
None.
Please add some!
' Copyright
' Microsoft Corporation
' All rights reserved
'typedef struct tagOFN {
' DWORD lStructSize;
' HWND hwndOwner;
' HINSTANCE hInstance;
' LPCTSTR lpstrFilter;
' LPTSTR lpstrCustomFilter;
' DWORD nMaxCustFilter;
' DWORD nFilterIndex;
' LPTSTR lpstrFile;
' DWORD nMaxFile;
' LPTSTR lpstrFileTitle;
' DWORD nMaxFileTitle;
' LPCTSTR lpstrInitialDir;
' LPCTSTR lpstrTitle;
' DWORD Flags;
' WORD nFileOffset;
' WORD nFileExtension;
' LPCTSTR lpstrDefExt;
' LPARAM lCustData;
' LPOFNHOOKPROC lpfnHook;
' LPCTSTR lpTemplateName;
'#if (_WIN32_WINNT >= 0x0500)
' void * pvReserved;
' DWORD dwReserved;
' DWORD FlagsEx;
'#endif // (_WIN32_WINNT >= 0x0500)
'} OPENFILENAME, *LPOPENFILENAME;
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
Public Class OpenFileName
Public structSize As Integer = 0
Public dlgOwner As IntPtr = IntPtr.Zero
Public instance As IntPtr = IntPtr.Zero
Public filter As String = Nothing
Public customFilter As String = Nothing
Public maxCustFilter As Integer = 0
Public filterIndex As Integer = 0
Public file As String = Nothing
Public maxFile As Integer = 0
Public fileTitle As String = Nothing
Public maxFileTitle As Integer = 0
Public initialDir As String = Nothing
Public title As String = Nothing
Public flags As Integer = 0
Public fileOffset As Short = 0
Public fileExtension As Short = 0
Public defExt As String = Nothing
Public custData As IntPtr = IntPtr.Zero
Public hook As IntPtr = IntPtr.Zero
Public templateName As String = Nothing
Public reservedPtr As IntPtr = IntPtr.Zero
Public reservedInt As Integer = 0
Public flagsEx As Integer = 0
End Class 'OpenFileName
Public Class LibWrap
'BOOL GetOpenFileName(LPOPENFILENAME lpofn);
Declare Auto Function GetOpenFileName Lib "Comdlg32.dll" ( _
<[In](), Out()> ByVal ofn As OpenFileName) As Boolean
End Class 'LibWrap
Private Function ShowOpen(Optional ByVal filter As String = ("All files" & ChrW(0) & "*.*" & ChrW(0)), _
Optional ByVal title As String = "Open File Dialog...", _
Optional ByVal defext As String = "*", _
Optional ByVal path As String = "C:\") As String
Try
Dim ofn As New OpenFileName
ofn.structSize = Marshal.SizeOf(ofn)
ofn.filter = filter
ofn.file = New String(New Char(256) {})
ofn.maxFile = ofn.file.Length
ofn.fileTitle = New String(New Char(64) {})
ofn.maxFileTitle = ofn.fileTitle.Length
ofn.initialDir = path
ofn.title = title
ofn.defExt = defext
If LibWrap.GetOpenFileName(ofn) Then
Console.WriteLine("Selected file with full path: {0}", ofn.file)
Console.WriteLine("Selected file name: {0}", ofn.fileTitle)
Console.WriteLine("Offset from file name: {0}", ofn.fileOffset)
Console.WriteLine("Offset from file extension: {0}", ofn.fileExtension)
Return ofn.file
End If
Catch ex As Exception
Debug.Assert(False)
Return System.String.Empty
End Try
End Function
Prints time in seconds since last user input.
Save to idle.c
Compile at bash command line with: gcc -Wall idle.c
Test it with: sleep 15; ./a.exe
Moving the mouse or pressing the keyboard during the test will alter the result, as expected!
// tcc (http://bellard.org/tcc/) command line to compile:
// tcc -lcomdlg32 openfilename.c
// ./openfilename.exe is 2,048 bytes !!!
// gcc (under cygwin) command line to compile:
// gcc -Wall -Wl,--enable-stdcall-fixup -mnop-fun-dllimport -mwindows getopenfilename.c
// ./a.exe is 61,414 bytes !!!
#include <windows.h>
// tinycc: pull info from CYGWIN header /usr/include/w32api/commdlg.h
#ifdef __TINYC__
#define OFN_READONLY 0x1
#define OFN_OVERWRITEPROMPT 0x2
#define OFN_HIDEREADONLY 0x4
#define OFN_NOCHANGEDIR 0x8
#define OFN_SHOWHELP 0x10
#define OFN_ENABLEHOOK 0x20
#define OFN_ENABLETEMPLATE 0x40
#define OFN_ENABLETEMPLATEHANDLE 0x80
#define OFN_NOVALIDATE 0x100
#define OFN_ALLOWMULTISELECT 0x200
#define OFN_EXTENSIONDIFFERENT 0x400
#define OFN_PATHMUSTEXIST 0x800
#define OFN_FILEMUSTEXIST 0x1000
#define OFN_CREATEPROMPT 0x2000
#define OFN_SHAREAWARE 0x4000
#define OFN_NOREADONLYRETURN 0x8000
#define OFN_NOTESTFILECREATE 0x10000
#define OFN_NONETWORKBUTTON 0x20000
#define OFN_NOLONGNAMES 0x40000
#define OFN_EXPLORER 0x80000
#define OFN_NODEREFERENCELINKS 0x100000
#define OFN_LONGNAMES 0x200000
#define OFN_ENABLEINCLUDENOTIFY 0x400000
#define OFN_ENABLESIZING 0x800000
#define OFN_DONTADDTORECENT 0x2000000
#define OFN_FORCESHOWHIDDEN 0x10000000
#define OFN_EX_NOPLACESBAR 0x1
#define OFN_SHAREFALLTHROUGH 2
#define OFN_SHARENOWARN 1
#define OFN_SHAREWARN 0
typedef UINT_PTR (CALLBACK *LPOFNHOOKPROC) (HWND,UINT,WPARAM,LPARAM);
typedef struct tagOFNA {
DWORD lStructSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCSTR lpstrFilter;
LPSTR lpstrCustomFilter;
DWORD nMaxCustFilter;
DWORD nFilterIndex;
LPSTR lpstrFile;
DWORD nMaxFile;
LPSTR lpstrFileTitle;
DWORD nMaxFileTitle;
LPCSTR lpstrInitialDir;
LPCSTR lpstrTitle;
DWORD Flags;
WORD nFileOffset;
WORD nFileExtension;
LPCSTR lpstrDefExt;
LPARAM lCustData;
LPOFNHOOKPROC lpfnHook;
LPCSTR lpTemplateName;
void *pvReserved;
DWORD dwReserved;
DWORD FlagsEx;
} OPENFILENAMEA,*LPOPENFILENAMEA;
#define OPENFILENAME OPENFILENAMEA
#define LPOPENFILENAME LPOPENFILENAMEA
#define GetOpenFileName GetOpenFileNameA
#endif
#ifdef __CYGWIN__
#include <commdlg.h>
#endif
// below adapted from: https://www.daniweb.com/software-development/cpp/code/217307/a-simple-getopenfilename-example
int main(int argc, char **argv) {
char szFile[100];
OPENFILENAME ofn;
memset(&ofn, 0, sizeof (ofn));
ofn.lStructSize = sizeof (ofn);
ofn.hwndOwner = NULL;
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof (szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
int i = GetOpenFileName(&ofn);
return(i);
}
Contributed by John Refling