
前提
JoyToKeyのバージョン:5.2.0
JoyToKeyが既に起動されている状態で、JoyToKeyの対象としたいデバイス(ゲームパッド、左手デバイスなど)を新たに接続した場合、それをJoyToKeyに認識させるには、下記2つのいずれかの操作が必要になります。
(1) 任意のプロファイルの[Options]タブを開く→[再検出]ボタンを押す
(2) JoyToKeyを再起動する
いずれも少し不便であるため、コマンドラインランチャ(Moonlight)からバッチファイルを実行することにより、(2)を簡単に実行できるようにしたいと考えました。
作成したバッチファイルのソースは下記の通りです。
(taskkillの所は失敗した方法ですが参考まで。)
@echo off rem ------------------------------------------------------------------------------------------------------------------------------ rem JoyToKeyの終了(既に起動しているという前提) rem 参考:バッチファイルからアプリを終了させる: QXエディタ入門 https://qx-nosusume.cocolog-nifty.com/qx/2016/03/bat_taskkill.html rem taskkill /F /IM JoyToKey.exe rem taskkillだと「アクセスが拒否されました」になって不可だった。 rem 参考:「アクセスが拒否されました」のプロセスの強制終了 - Qiita https://qiita.com/Noburo/items/55b4c36d02fedb5a7af6 wmic process where "name='JoyToKey.exe'" delete rem ------------------------------------------------------------------------------------------------------------------------------ rem JoyToKeyを改めて起動 "C:\Data\Tools\JoyToKey\JoyToKey.exe" rem exitへの到達を確認できるようにするためのメッセージを表示(削除予定) echo exitに到達! pause exit
これでJoyToKeyの再起動自体は実現できましたが、バッチファイル実行のために起動されたコマンドプロンプトのウィンドウが閉じずに残ってしまうという不具合があります。
コマンドプロンプトには
インスタンス \PC名\ROOT\CIMV2:Win32_Process.Handle="8108" を削除しています
インスタンスは正しく削除されました。
というメッセージが表示された上で、その1行下にキャレットが点滅した状態になります。
一見入力待ち状態のように見えますが、キーボードで入力しても何も起こらず、Ctrl+Cによる強制終了も不可能になります。(コマンドプロンプトをAlt+Tabや右上の✕ボタンで閉じること自体は可能です。)
問題は
"C:\Data\Tools\JoyToKey\JoyToKey.exe"
にあるようで、この行の終了待ちをしているために最後のexitに到達していないようです。
そこで、終了待ちをさせないようにできないかと考え、
・「call "C:\Data\Tools\JoyToKey\JoyToKey.exe"」に変更する
・「start "C:\Data\Tools\JoyToKey\JoyToKey.exe"」に変更する
を試しましたが、解決しませんでした。
callとstartのヘルプを読み、有用なオプションがないかも検討しましたが、それらしいものは見つかりませんでした。
また、「JoyToKeyの終了を待っているのなら、JoyToKeyのウィンドウを手動で閉じればexitに到達するのではないか?」と考え、JoyToKeyを閉じてみましたが、コマンドプロンプトの状態は変化しませんでした。
試しに同じことをメモ帳(notepad.exe)を対象としてやってみた所、やはりexitには到達しませんが、「メモ帳のウィンドウを手動で閉じるとexitに到達し、コマンドプロンプトも終了される」という変化が見られました。
詳細は分かりませんが、JoyToKeyとメモ帳ではこの点について性質が異なるようです。
@echo off wmic process where "name='notepad.exe'" delete "C:\WINDOWS\system32\notepad.exe" rem exitへの到達を確認できるようにするためのメッセージを表示(削除予定) echo exitに到達! pause exit
ならば「メモ帳を再起動するバッチファイル」なら作れるのか?と思い、callやstartでnotepad.exeを起動する方法を検討しましたが、それも成功しませんでした。
実現したいこと
上記のバッチファイルの不具合(コマンドプロンプトのウィンドウが閉じずに残ってしまう)を解決する方法が知りたいです。
または、「コマンドラインランチャからJoyToKeyを再起動する」ことを実現できるのであれば、全く別の方法を提示頂いても構いません。
補足
上述した「メモ帳をstartで実行する版」のソースは下記の通りです。
@echo off wmic process where "name='notepad.exe'" delete start "C:\WINDOWS\system32\notepad.exe" exit
このバッチファイルを「C:\Data\Tools\JoyToKey\bat」に置いてダブルクリックで実行すると、
(1) メモ帳が既に実行中ならば終了される
(2) 下記の画像のような「タイトルバーにnotepad.exeのファイルパスが記載されたコマンドプロンプト」が起動し、このウィンドウは開いたままになる
(3) 元のバッチファイル実行のためのコマンドプロンプトのウィンドウは閉じる
という結果になります。
(2)の現象の意味がよく分からないのですが、これでは「メモ帳を起動できた」とは言えないと思います。
この「タイトルが変わっただけのコマンドプロンプト」が起動されるのはどういうことなのでしょうか?
もし、このコマンドプロンプトの代わりにメモ帳のウィンドウが普通に起動すれば確かに成功と言えますが、そうなるようにする方法が分かりません。
なお、対象プログラムをJoyToKeyに変えても同じ結果になるので、メモ帳で可能になればJoyToKeyでも解決ということになるとは思います。


回答1件
あなたの回答
tips
プレビュー