更全的链接:Unity 选择本地目录选择文件打开指定文件夹(无需引入dll)_love and share-CSDN博客https://blog.csdn.net/qq_39342142/article/details/103781728

比较适合的内容:

using UnityEngine;
using System.Collections;
using System;
using System.Runtime.InteropServices;[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]public class OpenFile
{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 class WindowDll
{[DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]public static extern bool GetOpenFileName([In, Out] OpenFile of);[DllImport("Comdlg32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]public static extern bool GetSaveFileName([In, Out] OpenFile ofn);/// <summary>/// 用于获取当前Player窗口指针。/// </summary>/// <returns></returns>[DllImport("user32.dll")]private static extern IntPtr GetForegroundWindow();/// <summary>/// 打开文件/// </summary>/// <param name="filter">过滤器</param>/// <param name="m_defaultPath">默认打开的路径</param>/// <returns></returns>public static string OpenFile(string filter, string m_defaultPath){OpenFile of = new OpenFile();of.structSize = Marshal.SizeOf(of);of.filter = filter;of.file = new string(new char[256]);of.maxFile = of.file.Length;of.fileTitle = new string(new char[64]);of.maxFileTitle = of.fileTitle.Length;of.dlgOwner = GetForegroundWindow();string defaultPath = m_defaultPath;defaultPath = defaultPath.Replace('/', '\\');of.initialDir = defaultPath;of.title = "小宝贝儿,Word很大你忍一下";of.defExt = "DOCX";of.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000200 | 0x00000008;if (WindowDll.GetOpenFileName(of)){Debug.Log("Selected file with full path: {0}" + of.file);return of.file;}return string.Empty;}
}

其中需要注意的有一个地方就是,当对话框打开之后,鼠标点击其他位置,对话框会聚焦失败,在Unity里面会导致Unity崩溃,发布出来之后主线程卡死,不切回对话框的话,会无法往下走。

解决方案:

(1)、把对话框一直放在最前方,也就是上面的贴的代码

(2)、使用GetActiveWindow() ,也会解决这个问题

两个方案也是有区别的,查了一下资料        (21条消息) GetActiveWindow与GetForegroundWindow两者有何区别?_彷徨而立的博客-CSDN博客_getforegroundwindow

大概意思就是GetForegroundWindow是系统级别的最前方,而GetActiveWindow是你当前线程级别的最前方。

测试一下两者的区别:

GetForegroundWindow:

登录QQ的情况下,因为QQ是保持在系统最前方的,用GetForegroundWindow获取最前方的窗口的时候,拿到的还是对话框窗口,只是当打开Console界面的时候,点击Console界面会导致该界面保持在最前方,然后Unity的代码产生编译,导致Unity出现BUG

Reload Assembly called from managed code directly. This will cause a crash. You should never refresh assets in synchronous mode or enter playmode synchronously from script code.

GetActiveWindow:

与GetForegroundWindow一样的问题

发布没有测试,如果有发布测试之后有不同反应的,可以评论留言

Unity打开本地文件(不使用dll的情况下)相关推荐

  1. android本地xml文件怎么打开,android 打开本地文件

    首先要知道的是,Android 打开本地文件是根据类型打开的,也就是根据文件的 MIME 类型来确定 如果不知道是什么类型,那就是 : */* 类型匹配表: private static final ...

  2. Android实现打开本地文件,Android 打开本地文件(示例代码)

    Android 打开本地的文件,目前来说,其实很常见.而且现在有手机版的office了.查看office的全家桶就更加方便. 首先要知道的是,Android 打开本地文件是根据类型打开的,也就是根据文 ...

  3. 服务器怎么打开本地电脑文件夹,如何在云服务器上打开本地文件夹

    如何在云服务器上打开本地文件夹 内容精选 换一换 Tomcat是一个被广泛使用的Java Web应用服务器.本文介绍了在华为云弹性云服务器上部署Java Web环境的操作步骤.首先需要下载部署Java ...

  4. 用QFileDialog::getOpenFileUrls打开本地文件:指定路径

    QString openFilePath = "file:///" + ProcessingModuleProxy::getInstance().getImportPath();Q ...

  5. Element-UI中打开本地文件

    Element-UI中打开本地文件 一.问题 二.html部分 三.js部分 四.上一个/下一个 一.问题 有时候我们要打开本地文件直接在页面上查看,怎么用Element-UI提供的功能实现? 二.h ...

  6. 服务器读取本地文件,如何在云服务器上打开本地文件

    如何在云服务器上打开本地文件 内容精选 换一换 边缘节点上报应用日志和系统日志需要打开日志开关,且边缘节点的NTP与华为云一致.如果看不到日志,可能有如下原因:日志开关未打开.登录IEF控制台,在左侧 ...

  7. 在excel中打开本地文件或文件夹

    效果演示: A2中输入本地文件或文件夹绝对路径 B2中输入公式 =HYPERLINK(A2)  然后回车保存,再次点击B2中的链接会直接打开本地文件夹或文件

  8. Android调用系统安装程序打开本地文件(包括 Android7.0以上)

    前言 在 Android 手机文件管理中,点击某个文件的时候,会弹出选择打开文件的方式,那么,如果在我们自己的软件中要实现这种效果该怎么做呢?其实 Android 打开本地文件很常见,打开的时候会根据 ...

  9. java web打开文件_Java web 如何打开本地文件夹?

    使用情景 有一个只在一台 Windows7 上使用的 Java web 项目,浏览器是 Chrome.它需要点击一个链接可以打开指定的本地文件夹,目录会有中文. 服务器环境 Jdk1.7.Tomcat ...

最新文章

  1. 安装SecureCRT
  2. P4报名截止|引爆1.1万亿基因测序市场,精准医学50+殿堂级专家议程大曝光
  3. Android驱动开发第五章
  4. mysql 创建定时任务
  5. python的基本结构_python基础--结构篇
  6. clustered index disadvantages in mysql
  7. java项目所需jar包的下载--maven仓库
  8. java获取大乐透开奖_java生成大乐透中奖号码
  9. 计算机组成原理—DRAM的刷新
  10. 二叉树类图_数据结构(十四)——二叉树
  11. MMO-SNS类游戏服务器间数据交互策略分享
  12. node.js 知识分享网站源码【毕业设计】
  13. 用曲率,挠率反求曲线方程!(作业捷径篇 续集)
  14. java html转word!
  15. mysql 支持嵌套查询吗_【转】MySql 嵌套查询
  16. 计算机综述(computer overview)
  17. Scrapy爬虫之网站图片爬取
  18. 深度学习整理:detection 学习(2)——detection细节知识入门
  19. matlab2019b重装导致mjs安装失败问题解决
  20. 解决冲突后,git merge --continue 时 lint不通过

热门文章

  1. java 包含几个字符_java中如何判断一个字符串包含几个指定字符
  2. Redis 为什么这么快? Redis 的有序集合 zset 的底层实现原理是什么? —— 跳跃表 skiplist
  3. Vue登录注册,并保存登录状态
  4. 31.linux关闭tcp6
  5. Mac学习第一步——Mac OS X系统常用多点触摸板操作手势
  6. 起诉时不知对方名下多少银行账户,怎么申请财产保全
  7. Android 发邮件
  8. 物联网云服务器框架,物联网(五)---搭建自己的云平台[ESP8266+Django]
  9. 11月9日(要要救)全国消防日,消防安全牢记心!
  10. 王者荣耀s12服务器维护,王者荣耀S12开启:勇者积分规则调整新增排位保护卡