Tips : Steam -2- (番外編)
2016/07/13

番外編:Steam コンテンツを起動してみる(2)


エミュレータではないけれど CatShanty2 v0.6xxxx 以降の機能を利用して Steam のコンテンツ(ゲーム)を起動してみます。

エミュレータ設定:基本タブ

番外編:Steam 起動 その1 の続き。

さてエミュレータのイメージファイルとしてライブラリに取り込んだショートカットファイル(.url)ですが、そこから Steam を起動させるためのエミュレータ設定を作成します。

メニュー>エミュレータ設定>追加 で「エミュレータの設定ダイアログ」を開きます。

まずは「基本設定」タブで次のように設定します。
エミュレータ設定:基本設定

設定名は適当です。 対応機種は Steam 、イメージファイルは "そのまま渡す" です。
他の設定内容を以下に解説します。

コマンドラインオプション

エミュレータ本体 には、 Steam インストール先のSteam.exeを指定します。

起動オプション には、ショートカットファイル内に記述されているコマンドラインオプション部分をそのまま持ってくることにします。

ショートカットファイルはini形式なので、置換定数の$iniloadで取得することができます。
$iniload内部にも置換定数が書けますので、ファイル指定部を$imageとすれば起動させたいショートカットのファイルパスが指定されることになります。

$iniload("$image","InternetShortcut","URL")

これにより、ショートカットファイル$imageから、セクションInternetShortcut, キーURLの指す値を起動オプションとして Steam.exe に渡すことになります。

展開すると…

例としてHalf-Life 2 Episode Two.urlを起動した場合の展開を示します。

1)$image が置換されます

$iniload("E:\Steam_ShortCut\Half-Life 2 Episode Two.url","InternetShortcut","URL")

2)$iniload が .url ファイルの内容に置換されます

steam://rungameid/420

3)コマンドラインが完成します

Steam.exe steam://rungameid/420

CatShanty2 ver0.8x以降はもっと簡単に起動できます

エミュレータ設定:高度な設定タブ

次に「高度な設定」タブで、コンテンツ(ゲーム)の終了検知ができるようにします。 エミュレータ設定:高度な設定

以下に各設定内容を解説します。


エミュレータの終了検知

起動されたコンテンツは、Steam.exe 本体とは別なプロセスで動作するため、シグナル状態で検知してゲームを終了しても Steam.exe を閉じるまで終了とみなされません。 そこで検知方法を ウィンドウのタイトルで検知 にします。

では、どのウィンドウを対象と判断させるかですが、(筆者の所持している少ないコンテンツを見た限りでは)大体の場合でショートカットファイル名から上手いこと解決できそうです。
例として"Half-Life 2 Episode Two.url"、ウィンドウタイトル"HALF-LIFE 2"で考察します。

ショートカットファイル名とウィンドウタイトルが完全一致していると有り難いのですが、それは期待できません。
ひとまず汎用向けとして イメージ名で検索イメージ名を半角スペースで区切る にチェックを入れます。

これにより例は、"Half-Life" "2" "Episode" "Two" のいずれかを含むウィンドウが検知対象になります。

更に 検索する最短文字数 を調節します。
あまり短いと他のアプリと被りますし、あまり長いと本来のタイトルを超えてしまう可能性が出ます。57くらいが良いかと思います。

値を 5 にすることで例は、 "Half-Life" "Episode" を含むウィンドウが対象となります。
大小文字は区別されませんので、ウィンドウタイトル"HALF-LIFE 2"が検知対象となりました。

また、奥の手として手動で指定する方法もありますが、それはまた後の頁で紹介します。

コンテンツのウィンドウタイトルを調べるには…

Steam からコンテンツを起動後、ウィンドウモードにして確認したり。
ウィンドウタイトルをウィンドウで確認
あるいは一時的にデスクトップへ戻ってタスクバーで確認したり。
ウィンドウタイトルをタスクバーで確認
ちなみに画像は HalfLife2: Episode Two のものですが、HalfLife2 シリーズは全部 "HALF-LIFE 2" なんですね。

 

Steam の更新を待機する

さて Steam を常時ログインしておきたくない筆者は、コンテンツ起動時に結構な割合で更新が開始されます。
Steam更新

更新時間が長いと、エミュレータ(というかこの場合コンテンツ)不在により CatShanty2 は終了とみなしてしまいます。

そこで ウィンドウを検知するまでタイムアウトせず起動処理を継続する にチェックを入れ、検知対象のウィンドウの起動が確認できるまで終了検知の開始を待機させます。

この場合、タスクトレイアイコンの右クリックメニューからいつでも待機を中止することができます。
また待機時間が長いと定期的に確認のポップアップが表示されますが、中止の必要がなければ無視し続けて構いません。
待機中止

Steam の起動準備ダイアログを検知対象から除外する

Steam はコンテンツの起動途中、以下のダイアログを表示します。
待機中止

上記の「タイムアウトをしないで待機」している間にこのダイアログが検知されると、ウィンドウタイトルによりコンテンツが起動されたと判断され終了検知が開始されます。
間もなくこのダイアログは自動で閉じるため、その結果 CatShanty2 はコンテンツ終了とみなしてしまいます。

そこで 但し以下を含まない エディットボックスへ- Steamを入力することで、このダイアログを検知対象から外します。

 
以上のエミュレータ設定で、大体の Steam コンテンツは起動・連携できると思います。

 

次は、イレギュラーなコンテンツに対応する方法を考えてみます。
番外編:Steam 起動 その3 へ続く。