UE4 打开外部文件夹(C++ )

博客介绍了UE4封装好的一个函数的使用及实现方法,还提及用CreateProc打开的使用方法,并给出该函数详细介绍的网址,以cmd打开文件夹路径为例说明,作者表示仅供新手参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,UE4封装好的一个函数

使用方法:

// 打开外部目标文件夹
FPlatformProcess::ExploreFolder(*文件夹路径);

函数实现方法:
在这里插入图片描述

二,用 CreateProc 打开,注意

使用方法:

FilePath = explorer.exe  + 想要的开文件夹的路径
FPlatformProcess::CreateProc(*FilePath, nullptr, true, false, false, nullptr, -1, nullptr, nullptr);

可以到:
http://api.unrealengine.com/INT/API/Runtime/Core/GenericPlatform/FGenericPlatformProcess/CreateProc/index.html
查看此函数详细介绍

就像 :
在这里插入图片描述
cmd
explorer.exe + 想要的开文件夹的路径

我也是新手,仅供参考哦!

<think>我们被要求回答如何在UnrealEngine中打开外部exe文件。根据问题,我们需要通过代码或设置来实现。在UnrealEngine中,打开外部程序通常使用平台特定的函数。在Windows平台上,我们可以使用`FPlatformProcess::CreateProc`函数。此外,UE4/UE5也提供了`FPlatformProcess::LaunchURL`,但这个方法通常用于打开URL,而不是可执行文件。因此,我们主要使用`CreateProc`。步骤:1.包含必要的头文件:`#include"HAL/PlatformProcess.h"`2.使用`FPlatformProcess::CreateProc`函数启动外部程序。函数原型:```cppFProcHandleFPlatformProcess::CreateProc(constTCHAR*URL,constTCHAR*Params,boolbLaunchDetached,boolbLaunchHidden,boolbLaunchReallyHidden,uint32*OutProcessID,int32PriorityModifier,constTCHAR*OptionalWorkingDirectory,void*PipeWriteChild,void*PipeReadChild);```参数说明:-URL:要执行的程序路径(绝对路径或相对路径,但建议使用绝对路径)-Params:传递给程序的参数-bLaunchDetached:是否以分离模式启动(独立进程)-bLaunchHidden:是否隐藏窗口-bLaunchReallyHidden:是否完全隐藏(不显示窗口)-OutProcessID:输出进程ID(可选)-PriorityModifier:进程优先级(通常为0,表示正常)-OptionalWorkingDirectory:工作目录(可选)-PipeWriteChild,PipeReadChild:管道相关(通常为nullptr)示例代码:假设我们要打开位于`D:/MyProgram.exe`的程序,无参数,并且以独立进程运行。在某个函数中(比如在玩家点击按钮时触发):```cpp#include"HAL/PlatformProcess.h"voidAMyActor::LaunchExternalExe(){FStringExecutablePath=TEXT("D:/MyProgram.exe");FStringParameters=TEXT("");//参数,如果没有就为空boolbLaunched=FPlatformProcess::CreateProc(*ExecutablePath,*Parameters,true,//分离模式true,//隐藏窗口true,//完全隐藏nullptr,0,nullptr,nullptr,nullptr).IsValid();if(bLaunched){UE_LOG(LogTemp,Log,TEXT("Externalprogramlaunchedsuccessfully."));}else{UE_LOG(LogTemp,Error,TEXT("Failedtolaunchexternalprogram."));}}```注意:路径字符串中的斜杠可以使用正斜杠(/)或双反斜杠(\\),因为UnrealEngine的字符串处理会处理它们。另外,也可以使用`FPlatformProcess::LaunchURL`,但这个方法主要用于打开文件或URL(比如用默认程序打开一个文本文件或网页),而不是执行一个可执行文件。所以,我们这里使用`CreateProc`。如果是在蓝图里调用,我们可以创建一个蓝图可调用的函数(在C++中声明为`UFUNCTION(BlueprintCallable)`),然后在蓝图中使用。例如,在C++类中声明:```cppUFUNCTION(BlueprintCallable,Category="MyFunctions")voidLaunchExternalExe();```然后在蓝图中调用这个函数。安全注意事项:启动外部程序可能会被安全软件阻止,并且在不同平台上的行为可能不同。上述代码仅适用于Windows平台。如果需要在其他平台运行,需要添加平台宏(如`#ifPLATFORM_WINDOWS`)并编写相应平台的代码。另外,在打包后的游戏中,路径可能需要使用相对路径或者通过配置文件获取,因为绝对路径在用户电脑上可能不存在。因此,建议将外部程序放在游戏目录下(例如,放在`Content/External`文件夹中),然后使用相对路径(相对于游戏可执行文件所在目录)来构建完整路径。获取游戏可执行文件所在目录:`FPaths::ProjectDir()`,然后拼接相对路径。示例:```cppFStringGameDir=FPaths::ProjectDir();FStringRelativePath=TEXT("External/MyProgram.exe");FStringFullPath=GameDir/RelativePath;```这样,在打包后,只要将`MyProgram.exe`放在打包目录的`External`文件夹下即可。总结步骤:1.在C++中编写函数,使用`FPlatformProcess::CreateProc`启动外部exe。2.将函数声明为`BlueprintCallable`以便在蓝图中使用(可选)。3.注意路径问题,建议使用相对路径并放在项目目录中。相关问题:1.如何传递参数给外部程序?2.如何捕获外部程序的输出?3.如何知道外部程序何时结束?4.在非Windows平台上如何打开外部程序?</think>### 如何在 Unreal Engine 中打开外部 EXE 文件 在 Unreal Engine 中打开外部 EXE 文件,可通过以下两种方式实现: --- #### 方法 1:通过 C++ 代码(推荐) 使用 `FPlatformProcess::CreateProc` 函数启动外部程序: ```cpp #include "HAL/PlatformProcess.h" // 示例:启动 D 盘的 MyProgram.exe void LaunchExternalExe() { FString ExecutablePath = TEXT("D:/MyProgram.exe"); // EXE 绝对路径 FString Parameters = TEXT(""); // 命令行参数 bool bLaunchDetached = true; // 作为独立进程运行 bool bLaunchHidden = false; // 是否隐藏窗口 bool bLaunchReallyHidden = false; // 是否完全隐藏 uint32* ProcessID = nullptr; // 可选进程ID FProcHandle ProcessHandle = FPlatformProcess::CreateProc( *ExecutablePath, *Parameters, bLaunchDetached, bLaunchHidden, bLaunchReallyHidden, ProcessID, 0, // 优先级 nullptr, // 工作目录 nullptr, // 管道写端 nullptr // 管道读端 ); if (ProcessHandle.IsValid()) { UE_LOG(LogTemp, Display, TEXT("EXE launched successfully")); FPlatformProcess::CloseProc(ProcessHandle); // 关闭句柄(不影响运行) } else { UE_LOG(LogTemp, Error, TEXT("Failed to launch EXE")); } } ``` **关键参数说明**: - `ExecutablePath`:EXE 文件的**绝对路径**(使用 `/` 或 `\\`) - `bLaunchDetached`:设为 `true` 确保外部程序独立运行 - 路径建议使用 `FPaths` 工具动态获取(如 `FPaths::ProjectDir() + "External/Tool.exe"`) --- #### 方法 2:通过蓝图实现 1. **创建自定义蓝图函数库**: ```cpp // BlueprintFunctionLibrary.h UCLASS() class MYPROJECT_API USystemHelper : public UBlueprintFunctionLibrary { GENERATED_BODY() UFUNCTION(BlueprintCallable, Category="System") static void LaunchExe(const FString& Path); }; // BlueprintFunctionLibrary.cpp void USystemHelper::LaunchExe(const FString& Path) { FPlatformProcess::CreateProc(*Path, nullptr, true, false, false, nullptr, 0, nullptr, nullptr); } ``` 2. **在蓝图中调用**: - 拖入 `LaunchExe` 节点 → 输入 EXE 路径(如 `"C:/Program Files/MyApp/app.exe"`) --- #### 注意事项 1. **路径安全**: - 使用 `FPaths::ConvertRelativePathToFull()` 处理相对路径 - 避免硬编码路径,建议通过配置文件读取 2. **平台兼容性**: ```cpp #if PLATFORM_WINDOWS // Windows 专用代码 #endif ``` 3. **权限问题**: - 打包后 EXE 需放在用户有权限的目录(如 `Saved/` 或项目根目录) 4. **错误处理**: - 检查文件是否存在:`FPaths::FileExists(ExecutablePath)` - 日志输出:`UE_LOG` 配合 `LogTemp` 分类 --- #### 调试建议 1. 添加日志输出: ```cpp UE_LOG(LogTemp, Warning, TEXT("Trying to launch: %s"), *ExecutablePath); ``` 2. 在蓝图中连接调试节点(如 **Print String**)监控执行状态[^5] > 通过上述方法,可在 UE 中安全启动外部程序。建议优先使用 C++ 方案,因其提供更精细的控制和错误处理能力[^1][^4]。 --- ### 相关问题 1. 如何向外部 EXE 传递命令行参数? 2. 如何捕获外部程序的输出结果? 3. Unreal Engine 跨平台启动外部程序有哪些差异? 4. 如何检测外部程序是否运行成功? 5. 在打包后的游戏中如何管理外部 EXE 的路径?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值