Unity调用Windows窗口句柄,选择文件和目录

it2022-05-05  153

 

T:2019-6-25 10:06:59

C:Scatt Kang

using System;

using System.Collections;

using System.Collections.Generic;

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;}

public class WindowsExplorer{ [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);

/// <summary> /// 调用WindowsExploer 并返回所选文件夹路径 /// </summary> /// <param name="dialogtitle">打开对话框的标题</param> /// <returns>所选文件夹路径</returns> public static string GetPathFromWindowsExplorer(string dialogtitle = "请选择下载路径" ) { string res; OpenDialogDir ofn2 = new OpenDialogDir(); ofn2.pszDisplayName = new string(new char[2000]); ;     // 存放目录路径缓冲区          ofn2.lpszTitle = dialogtitle;// 标题          ofn2.ulFlags = 0x00000040; // 新的样式,带编辑框          IntPtr pidlPtr = WindowsExplorer.SHBrowseForFolder(ofn2);

char[] charArray = new char[2000]; for (int i = 0; i < 2000; i++) charArray[i] = '\0';

WindowsExplorer.SHGetPathFromIDList(pidlPtr, charArray); res = new String(charArray); res = res.Substring(0, res.IndexOf('\0')); return res; }

}

转载于:https://www.cnblogs.com/51-Scott/p/11081137.html

相关资源:各显卡算力对照表!

最新回复(0)