ict.lixian.single/Assets/Scripts/ROBOT/OpenDialogFile.cs

236 lines
8.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using DG.Tweening.Plugins.Core.PathCore;
using System;
using System.IO;
using System.Runtime.InteropServices;
using UnityEngine;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class OpenDialogFile
{
public int structSize = 0;
public IntPtr dlgOwner = IntPtr.Zero;
public IntPtr instance = IntPtr.Zero;
public String filter = null;
public String customFilter = null;
public int maxCustFilter = 0;
public int filterIndex = 0;
public String file = null;
public int maxFile = 0;
public String fileTitle = null;
public int maxFileTitle = 0;
public String initialDir = null;
public String title = null;
public int flags = 0;
public short fileOffset = 0;
public short fileExtension = 0;
public String defExt = null;
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;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class OpenDialogDir
{
public IntPtr hwndOwner = IntPtr.Zero;
public IntPtr pidlRoot = IntPtr.Zero;
public String pszDisplayName = null;
public String lpszTitle = null;
public UInt32 ulFlags = 0;
public IntPtr lpfn = IntPtr.Zero;
public IntPtr lParam = IntPtr.Zero;
public int iImage = 0;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
//public class OpenFileName
//{
// public int structSize = 0;
// public IntPtr dlgOwner = IntPtr.Zero;
// public IntPtr instance = IntPtr.Zero;
// public String filter = null;
// public String customFilter = null;
// public int maxCustFilter = 0;
// public int filterIndex = 0;
// public String file = null;
// public int maxFile = 0;
// public String fileTitle = null;
// public int maxFileTitle = 0;
// public String initialDir = null;
// public String title = null;
// public int flags = 0;
// public short fileOffset = 0;
// public short fileExtension = 0;
// public String defExt = null;
// 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 static class FolderBrowserHelper
{
#region Window
[DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
private static extern bool GetOpenFileName([In, Out] OpenFileName ofn);
[DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
private static extern bool GetSaveFileName([In, Out] OpenFileName ofn);
[DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
private static extern bool GetOpenFileName([In, Out] OpenDialogFile ofn);
[DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
private static extern bool GetSaveFileName([In, Out] OpenDialogFile ofn);
[DllImport("shell32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
private static extern IntPtr SHBrowseForFolder([In, Out] OpenDialogDir ofn);
[DllImport("shell32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
private static extern bool SHGetPathFromIDList([In] IntPtr pidl, [In, Out] char[] fileName);
#endregion
public const string IMAGEFILTER = "ͼƬ<CDBC>ļ<EFBFBD>(*.png)\0*.png";
public const string TEXTGEFILTER = "<22>ı<EFBFBD><C4B1>ļ<EFBFBD>(*.txt)\0*.txt";
public const string ALLFILTER = "<22><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>(*.*)\0*.*";
/// <summary>
/// ѡ<><D1A1><EFBFBD>ļ<EFBFBD>
/// </summary>
/// <param name="callback"><3E><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD>·<EFBFBD><C2B7></param>
/// <param name="filter"><3E>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ɸѡ<C9B8><D1A1></param>
public static void SelectFile(Action<string> callback, string filter = ALLFILTER)
{
try
{
OpenFileName openFileName = new OpenFileName();
openFileName.structSize = Marshal.SizeOf(openFileName);
// openFileName.initialDir = "<22><>ʼĿ¼"
openFileName.filter = filter;
openFileName.initialDir = "D:\\Unity_Project\\IntelligentICTVirtualSimulation\\U.P.A\\Assets\\StreamingAssets\\RobotFiles\\Motions";
openFileName.title = "ѡ<><D1A1><EFBFBD>ļ<EFBFBD>";
openFileName.file = new string(new char[256]);
openFileName.maxFile = openFileName.file.Length;
openFileName.fileTitle = new string(new char[64]);
openFileName.maxFileTitle = openFileName.fileTitle.Length;
openFileName.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000008;
if (GetOpenFileName(openFileName))
{
string filepath = openFileName.file; //ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>;
//if (File.Exists(filepath.ToString()))
//{
if (callback != null)
callback(filepath);
return;
// }
}
}
catch (Exception e)
{
Debug.LogError(e);
}
if (callback == null)
callback(string.Empty);
}
public static void SaveFile(string path,Action<string> callback, string filter = ALLFILTER)
{
try
{
OpenFileName openFileName = new OpenFileName();
openFileName.structSize = Marshal.SizeOf(openFileName);
// openFileName.initialDir = "<22><>ʼĿ¼"
openFileName.filter = filter;
openFileName.file = new string(new char[256]);
openFileName.maxFile = openFileName.file.Length;
openFileName.fileTitle = new string(new char[64]);
openFileName.maxFileTitle = openFileName.fileTitle.Length;
// openFileName.initialDir;
openFileName.title = "<22><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>";
openFileName.initialDir = path;//"D:\\Unity_Project\\IntelligentICTVirtualSimulation\\U.P.A\\Assets\\StreamingAssets\\RobotFiles\\Motions";
if (filter==IMAGEFILTER)
{
openFileName.defExt = "png";
}
if (filter==TEXTGEFILTER)
{
openFileName.defExt = "txt";
}
openFileName.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000008;
if (GetSaveFileName(openFileName))
{
string filepath = openFileName.file;
if (callback != null)
callback(filepath);
return;
}
}
catch (Exception e)
{
Debug.LogError(e);
}
if (callback == null)
callback(string.Empty);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>WindowsExploer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>·<EFBFBD><C2B7>
/// </summary>
/// <param name="dialogtitle"><3E>򿪶Ի<F2BFAAB6><D4BB><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD></param>
/// <returns><3E><>ѡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>·<EFBFBD><C2B7></returns>
public static string GetPathFromWindowsExplorer(string dialogtitle = "<22><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>")
{
try
{
OpenDialogDir ofn2 = new OpenDialogDir();
ofn2.pszDisplayName = new string(new char[2048]);
// <20><><EFBFBD><EFBFBD>Ŀ¼·<C2BC><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ofn2.lpszTitle = dialogtitle; // <20><><EFBFBD><EFBFBD>
ofn2.ulFlags = 0x00000040; // <20>µ<EFBFBD><C2B5><EFBFBD>ʽ,<2C><><EFBFBD><EFBFBD><E0BCAD>
IntPtr pidlPtr = SHBrowseForFolder(ofn2);
char[] charArray = new char[2048];
for (int i = 0; i < 2048; i++)
{
charArray[i] = '\0';
}
SHGetPathFromIDList(pidlPtr, charArray);
string res = new string(charArray);
res = res.Substring(0, res.IndexOf('\0'));
return res;
}
catch (Exception e)
{
Debug.LogError(e);
}
return string.Empty;
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>Ŀ¼
/// </summary>
/// <param name="path"><3E><>Ҫ<EFBFBD>򿪵<EFBFBD><F2BFAAB5>ļ<EFBFBD>Ŀ¼</param>
public static void OpenFolder(string path)
{
System.Diagnostics.Process.Start("explorer.exe", path);
}
}