啟動/關閉外部exe
-
引擎自帶
- FPlatformProcess::CreateProc()
- FPlatformProcess::TerminateProc()
-
windows api
-
ShellExecute()
-
system()
virtual void Tick(float DeltaTime) override; FProcHandle pHandle ; UFUNCTION(BlueprintCallable) void OpenExternalApp(const FString& AppPath); UFUNCTION(BlueprintCallable) void CloseExternalApp(); UFUNCTION(BlueprintCallable) void ExecuteExternalApp(const FString& AppPath); UFUNCTION(BlueprintCallable) void KillProcess(const FString& ProcessName);
#include <string> #include <windows.h> void ASystemActor::OpenExternalApp(const FString& AppPath) { pHandle= FPlatformProcess::CreateProc(*AppPath, nullptr, true, false, false, nullptr, 0, nullptr, nullptr); UE_LOG(LogTemp,Warning,TEXT(__FUNCTION__"Create App")) } void ASystemActor::CloseExternalApp() { if (pHandle.IsValid()) { FPlatformProcess::TerminateProc(pHandle); pHandle.Reset(); UE_LOG(LogTemp,Warning,TEXT(__FUNCTION__"Close App")) } else { UE_LOG(LogTemp,Warning,TEXT(__FUNCTION__"Close None")) } } void ASystemActor::ExecuteExternalApp(const FString& AppPath) { std::string str_path=TCHAR_TO_UTF8(*AppPath); std::wstring wstr_path; wstr_path.assign(str_path.begin(), str_path.end()); ShellExecute(NULL, L"open", wstr_path.c_str(), NULL, NULL, SW_SHOWDEFAULT); } void ASystemActor::KillProcess(const FString& ProcessName) { std::string process = std::string("TASKKILL /F /IM ") + TCHAR_TO_UTF8(*ProcessName); system(process.c_str()); UE_LOG(LogTemp,Warning,TEXT(__FUNCTION__"Kill App Process")) }
開啟虛擬鍵盤 On-Screen Keyboard
- ShellExecute
void ASystemActor::ShowVirtualKeyboard() { ShellExecute(NULL, L"open", L"osk.exe", NULL, NULL, SW_SHOWNORMAL); //WinExec("TabTip.exe", SW_SHOWNORMAL); }