DxLibを用いている部分は元のウィンドウを縮小化させる処理とWindows.h関係を引っ張ってるだけです。
構成
ランチャー作ったときにやってた
ぶっちゃけ作ってたのでとりあえずコードを載せます。ただ一年以上前に書いたコードなのであんま覚えてない。
htmlで書いている関係でincludeの所であれがないけど許して…。
#pragma once
#include string
class FolderInGame
{
private:
// プロセスが起動したかどうか
BOOL result;
public:
// コンストラクタ
FolderInGame() : result(FALSE) {}
// デストラクタ
~FolderInGame() {}
// メイン/ exeの階層までのパスを保存した引数とexeの名前を保存した引数
void Process(std::string createPath, std::string folderName);
/// ゲッター
// 起動を確認
bool GetbResult();
};
#include "FolderInGame.hpp"
void FolderInGame::Process(std::string createPath, std::string folderName)
{
result = TRUE; // ゲームの起動を始めた合図
PROCESS_INFORMATION pInfo = {}; // プロセス軌道のためのもの
STARTUPINFO sInfo = {}; // 初期プロセス起動のためのもの
ZeroMemory(&sInfo, sizeof(sInfo)); // 構造体全部初期化する
sInfo.cb = sizeof(sInfo);
ZeroMemory(&pInfo, sizeof(pInfo));
GetStartupInfo(&sInfo); // スタートアップ情報を得る
// ランチャーが見えない状態で起動させる
sInfo.dwFlags = STARTF_USESHOWWINDOW;
sInfo.wShowWindow = SW_HIDE;
// ディレクトリ位置を調べる用変数
std::string gamePath = ""; // ゲームexeファイル
std::string direPath = ""; // ゲームファイル
gamePath.operator+= (createPath);
gamePath.operator+= (folderName);
gamePath.operator+= ("\\");
direPath = gamePath;
gamePath.operator+= (folderName);
gamePath.operator+= (".exe");
SetWindowMinimizeFlag(TRUE); // ランチャーを最小化にする
// ゲームを起動
result = CreateProcess(
NULL,
(LPSTR)gamePath.c_str(), // ゲームを指定
NULL,
NULL,
FALSE,
CREATE_NEW_PROCESS_GROUP,
NULL,
direPath.c_str(), // カレントディレクトリを指定
&sInfo,
&pInfo
);
WaitForSingleObject(pInfo.hProcess, INFINITE); // 終了するまで待機
SetWindowMinimizeFlag(FALSE); // 最小化を解除
CloseHandle(pInfo.hProcess); // 解放
CloseHandle(pInfo.hThread); // 解放
result = FALSE; // ランチャーへの合図
}
bool FolderInGame::GetbResult()
{
return result;
}
ここではCreateProcessを用いています。
createPathは簡単に言えばC\\...\\Launcherってとこで、folderNameはGameOneだとしたらC\\...\\Launcher\\GameOne\\GameOne.exeみたいな感じ。