美文网首页
Unity打开Windows文件夹选择路径

Unity打开Windows文件夹选择路径

作者: 玄策丶 | 来源:发表于2020-12-21 09:13 被阅读0次

    使用OpenFile.OpenWinFile(InputField);将路径保存到传入的参数InputField输入框中。

    /***********************
    * Title:        
    * FileName:         
    * Date:         2020
    * Author:       玄策
    * Version:      1.0
    * UnityVersion: 2019.2.4f1
    * Description:  
    * Func:           
    * -   
    ***********************/
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Runtime.InteropServices;
    using UnityEngine;
    using UnityEngine.UI;
    public class OpenFile : MonoBehaviour
    {
        public static void OpenWinFile(InputField InpF)
        {
            //使用如下:
            OpenDialogDir ofn2 = new OpenDialogDir();
            ofn2.pszDisplayName = new string(new char[2048]); ;     // 存放目录路径缓冲区  
            ofn2.lpszTitle = "选择保存路径";// 标题  
            //ofn2.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX; // 新的样式,带编辑框  
            //IntPtr pidlPtr = IntPtr.Zero;
            IntPtr pidlPtr = DllOpenFileDialog.SHBrowseForFolder(ofn2);
    
            char[] charArray = new char[2048];
            for (int i = 0; i < 2048; i++)
                charArray[i] = '\0';
    
            DllOpenFileDialog.SHGetPathFromIDList(pidlPtr, charArray);
            string fullDirPath = new String(charArray);
            fullDirPath = fullDirPath.Substring(0, fullDirPath.IndexOf('\0'));
    
            Debug.Log(fullDirPath);//这个就是选择的目录路径
            InpF.text = fullDirPath;
        }
        public static void OpenWinFile()
        {
            //使用如下:
            OpenDialogDir ofn2 = new OpenDialogDir();
            ofn2.pszDisplayName = new string(new char[2000]); ;     // 存放目录路径缓冲区  
            ofn2.lpszTitle = "Open Project";// 标题  
            //ofn2.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX; // 新的样式,带编辑框  
            IntPtr pidlPtr = DllOpenFileDialog.SHBrowseForFolder(ofn2);
    
            char[] charArray = new char[2000];
            for (int i = 0; i < 2000; i++)
                charArray[i] = '\0';
    
            DllOpenFileDialog.SHGetPathFromIDList(pidlPtr, charArray);
            string fullDirPath = new String(charArray);
            fullDirPath = fullDirPath.Substring(0, fullDirPath.IndexOf('\0'));
    
            Debug.Log(fullDirPath);//这个就是选择的目录路径
        }
    }
    
    [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;
    }
    
    public class DllOpenFileDialog
    {
        [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
        public static extern bool GetOpenFileName([In, Out] OpenDialogFile ofn);
    
        [DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
        public static extern bool GetSaveFileName([In, Out] OpenDialogFile ofn);
    
        [DllImport("shell32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
        public static extern IntPtr SHBrowseForFolder([In, Out] OpenDialogDir ofn);
    
        [DllImport("shell32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
        public static extern bool SHGetPathFromIDList([In] IntPtr pidl, [In, Out] char[] fileName);
    
    }
    
    
    

    相关文章

      网友评论

          本文标题:Unity打开Windows文件夹选择路径

          本文链接:https://www.haomeiwen.com/subject/mjzlnktx.html