質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

1回答

763閲覧

Windows10でJoyToKeyを簡単に再起動できるようにしたい

kamozaka

総合スコア12

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2022/11/12 02:27

編集2022/11/12 04:36

前提

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)のウィンドウ:
イメージ説明

(2)の現象の意味がよく分からないのですが、これでは「メモ帳を起動できた」とは言えないと思います。
この「タイトルが変わっただけのコマンドプロンプト」が起動されるのはどういうことなのでしょうか?

もし、このコマンドプロンプトの代わりにメモ帳のウィンドウが普通に起動すれば確かに成功と言えますが、そうなるようにする方法が分かりません。

なお、対象プログラムをJoyToKeyに変えても同じ結果になるので、メモ帳で可能になればJoyToKeyでも解決ということになるとは思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/11/12 02:43 編集

「ならば「メモ帳を再起動するバッチファイル」なら作れるのか?と思い、callやstartでnotepad.exeを起動する方法を検討しましたが、それも成功しませんでした。」 → 少なくともNotePad.exeの場合であれば、startで起動し、かつ、pauseの行を削除したら、再起動したうえでコマンドプロンプトが残らないような形で成功しましたよ? pauseを削除していないせいで、ウィンドウが残り続けていると勘違いしているだけでは?
kamozaka

2022/11/12 04:39

回答ありがとうございます。 > pauseを削除していないせいで、ウィンドウが残り続けていると勘違いしているだけでは? まず、この勘違いではないことを確認しました。 頂いた回答を踏まえての「補足」を本文に追記しましたので、ご確認ください。 (ここには画像を添付できないようなので)
guest

回答1

0

ベストアンサー

「start "C:\Data\Tools\JoyToKey\JoyToKey.exe"」とした時、"C:\Data\Tools\JoyToKey\JoyToKey.exe"というタイトルの付いたコマンドプロンプトが起動しませんでしたか?

bat

1start "" "C:\Data\Tools\JoyToKey\JoyToKey.exe"

としてみてください。

投稿2022/11/12 04:22

Crimson_Tide

総合スコア509

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kamozaka

2022/11/12 04:49

ご指摘の方法で解決しました。 startの第一引数は「ウィンドウのタイトルバーに表示するタイトル」だとヘルプにもしっかり書いてあったのですね…。 よく読んでいなかったことが分かり、お恥ずかしい限りです。 startは以前も使ったことがあり、 「第一引数を実行したいファイルのパスにして問題なかったはずだ」と認識していたのですが、 どうもcall(こちらは第一引数がファイルパスで問題ない)の仕様と混同して覚えていたようです。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問