ŠĀ/* SPDX-License-Identifier: ZLIB Copyright (c) 2014 - 2023 Guillaume Vareille http://ysengrin.com _________ / \ tinyfiledialogsTest.cs v3.15.1 [Nov 19, 2023] zlib licence |tiny file| C# bindings created [2015] | dialogs | \____ ___/ http://tinyfiledialogs.sourceforge.net \| git clone http://git.code.sf.net/p/tinyfiledialogs/code tinyfd ____________________________________________ | | | email: tinyfiledialogs at ysengrin.com | |____________________________________________| If you like tinyfiledialogs, please upvote my stackoverflow answer https://stackoverflow.com/a/47651444 - License - This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.InteropServices; class tinyfd { public const string mDllLocation = "C:\\Users\\frogs\\yomspace2015\\yomlibs\\tinyfd\\dll_cs_lua_fortran_pascal\\tinyfiledialogs32.dll"; // cross platform UTF8 [DllImport(mDllLocation, CallingConvention = CallingConvention.Cdecl)] public static extern void tinyfd_beep(); [DllImport(mDllLocation, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern int tinyfd_notifyPopup(string aTitle, string aMessage, string aIconType); [DllImport(mDllLocation, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern int tinyfd_messageBox(string aTitle, string aMessage, string aDialogType, string aIconType, int aDefaultButton); [DllImport(mDllLocation, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr tinyfd_inputBox(string aTitle, string aMessage, string aDefaultInput); [DllImport(mDllLocation, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr tinyfd_saveFileDialog(string aTitle, string aDefaultPathAndFile, int aNumOfFilterPatterns, string[] aFilterPatterns, string aSingleFilterDescription); [DllImport(mDllLocation, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr tinyfd_openFileDialog(string aTitle, string aDefaultPathAndFile, int aNumOfFilterPatterns, string[] aFilterPatterns, string aSingleFilterDescription, int aAllowMultipleSelects); [DllImport(mDllLocation, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr tinyfd_selectFolderDialog(string aTitle, string aDefaultPathAndFile); [DllImport(mDllLocation, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr tinyfd_colorChooser(string aTitle, string aDefaultHexRGB, byte[] aDefaultRGB, byte[] aoResultRGB); // windows only utf16 [DllImport(mDllLocation, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern int tinyfd_notifyPopupW(string aTitle, string aMessage, string aIconType); [DllImport(mDllLocation, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern int tinyfd_messageBoxW(string aTitle, string aMessage, string aDialogType, string aIconType, int aDefaultButton); [DllImport(mDllLocation, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr tinyfd_inputBoxW(string aTitle, string aMessage, string aDefaultInput); [DllImport(mDllLocation, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr tinyfd_saveFileDialogW(string aTitle, string aDefaultPathAndFile, int aNumOfFilterPatterns, string[] aFilterPatterns, string aSingleFilterDescription); [DllImport(mDllLocation, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr tinyfd_openFileDialogW(string aTitle, string aDefaultPathAndFile, int aNumOfFilterPatterns, string[] aFilterPatterns, string aSingleFilterDescription, int aAllowMultipleSelects); [DllImport(mDllLocation, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr tinyfd_selectFolderDialogW(string aTitle, string aDefaultPathAndFile); [DllImport(mDllLocation, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr tinyfd_colorChooserW(string aTitle, string aDefaultHexRGB, byte[] aDefaultRGB, byte[] aoResultRGB); // cross platform [DllImport(mDllLocation, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr tinyfd_getGlobalChar(string aCharVariableName); [DllImport(mDllLocation, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern int tinyfd_getGlobalInt(string aIntVariableName); [DllImport(mDllLocation, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern int tinyfd_setGlobalInt(string aIntVariableName, int aValue); // ******** a complicated way to access tinyfd's global variables // [DllImport("kernel32.dll", SetLastError = true)] internal static extern IntPtr GetProcAddress(IntPtr hModule, string procName); // [DllImport("kernel32.dll", SetLastError = true)] internal static extern IntPtr LoadLibrary(string lpszLib); } namespace ConsoleApplication1 { class tinyfiledialogsTest { private static string stringFromAnsi(IntPtr ptr) // for UTF-8/char { return System.Runtime.InteropServices.Marshal.PtrToStringAnsi(ptr); } private static string stringFromUni(IntPtr ptr) // for UTF-16/wchar_t { return System.Runtime.InteropServices.Marshal.PtrToStringUni(ptr); } [STAThread] static void Main(string[] args) { // ******** a simple way to access tinyfd's global variables IntPtr lTheVersionText = tinyfd.tinyfd_getGlobalChar("tinyfd_version"); string lTheVersionString = stringFromAnsi(lTheVersionText); tinyfd.tinyfd_messageBox("tinyfd_version", lTheVersionString, "ok", "info", 1); // cross platform utf-8 IntPtr lTheInputText = tinyfd.tinyfd_inputBox("input box", "gimme a string", "A text to input"); string lTheInputString = stringFromAnsi(lTheInputText); int lala = tinyfd.tinyfd_messageBox("a message box char", lTheInputString, "ok", "warning", 1); lTheInputText = tinyfd.tinyfd_selectFolderDialog("select a folder", ""); lTheInputString = stringFromAnsi(lTheInputText); lala = tinyfd.tinyfd_messageBox("the chosen folder", lTheInputString, "ok", "warning", 1); // windows only utf-16 IntPtr lAnotherInputTextW = tinyfd.tinyfd_inputBoxW("input box", "gimme another string", "Another text to input"); string lAnotherInputString = stringFromUni(lAnotherInputTextW); int lili = tinyfd.tinyfd_messageBoxW("a message box wchar_t", lAnotherInputString, "ok", "info", 1); lAnotherInputTextW = tinyfd.tinyfd_selectFolderDialogW("select a folderW", ""); lAnotherInputString = stringFromUni(lAnotherInputTextW); lili = tinyfd.tinyfd_messageBoxW("a message box wchar_t", lAnotherInputString, "ok", "info", 1); tinyfd.tinyfd_notifyPopupW("just a dummy warning", lTheVersionString, "warning"); // cross platform tinyfd.tinyfd_beep(); // ******** a complicated way to access tinyfd's global variables (uncomment the last 2 lines in the class tinyfd above) // IntPtr tinyfd_DLL = tinyfd.LoadLibrary(tinyfd.mDllLocation); // if (tinyfd_DLL != IntPtr.Zero) // { // IntPtr lVersionAddr = tinyfd.GetProcAddress(tinyfd_DLL, "tinyfd_version"); // string lVersion = stringFromAnsi(lVersionAddr); // IntPtr lForceConsoleAddr = tinyfd.GetProcAddress(tinyfd_DLL, "tinyfd_forceConsole"); // if (lForceConsoleAddr != IntPtr.Zero) // { // int lForceConsoleValue = Marshal.ReadInt32(lForceConsoleAddr); // tinyfd.tinyfd_notifyPopup(lVersion, lForceConsoleValue.ToString(), "info"); // Marshal.WriteInt32(lForceConsoleAddr, 0); // } // } } } }