using System; using System.Runtime.InteropServices; namespace ConsoleApplication { [StructLayout(LayoutKind.Sequential)] public class OpenFileName { public int structSize; public IntPtr dlgOwner = IntPtr.Zero; public IntPtr instance = IntPtr.Zero; public string filter; public string customFilter = null; public int maxCustFilter = 0; public int filterIndex = 0; public string file; public int maxFile; public string fileTitle; public int maxFileTitle; public string initialDir; public string title; public int flags = 0; public short fileOffset = 0; public short fileExtension = 0; public string defExt; public IntPtr custData = IntPtr.Zero; public IntPtr hook = IntPtr.Zero; public string templateName = null; public IntPtr reservedPtr = IntPtr.Zero; public int reservedInt = 0; public int flagsEx = 0; } public class Program { [DllImport("comdlg32.dll")] public static extern bool GetOpenFileName([In, Out] OpenFileName ofn); public static void Main(string[] args) { Console.WriteLine("Hello World!"); var ofn = new OpenFileName(); ofn.structSize = Marshal.SizeOf(ofn); ofn.filter = "All files\0*.*\0Log files\0*.log\0Batch files\0*.bat\0"; 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 = @"C:\"; ofn.title = "Open file called using platform invoke..."; ofn.defExt = "txt"; if (GetOpenFileName(ofn)) { 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); } Console.WriteLine("Goodbye World!"); } } }