トップページ > 記事閲覧
多重起動について
名前:tatenoyu 日時: 2018/02/16 13:57

お世話になっております。 今回、ミニゲーム集のようなものを作ろうと考えています。 それで大本となるexeファイルから他のexeファイルを起動させるということは「 CreateProcess 」を使って一応できている状態です。 ですが問題として起動される側のexeファイルのほうで「 SetDoubleStartValidFlag(TRUE); 」を入れないと起動しない状態です。 いくつか対策案を考えたのですがどれも欠点があるものばかりで苦悩したので何かアドバイスを頂けたらと質問させていただきました。 私の考えた対策として 一つは、起動する側をdirectxで作成して他のexeファイルを起動させるというものでした。 ですがこれだと先の問題では起動される側を変更しないといけないため意味がありそうにないです。 二つ目は、DXライブラリ自体を弄って「 SetDoubleStartValidFlag 」のデフォルトを TRUE に変えるものでした。 ですが私一人の作成ではなく他チームも組み込むということになりこれを全員に渡さなくてはなりません。 またバージョンが変わるごとに弄らなければなりません。手間はかかりますができなくはなさそうです。 三つめは、ゲームを完成させたら個々のゲームでリリース前に「 SetDoubleStartValidFlag(TRUE); 」を入れてもらうといった方法です。 これも良さそうですが、作成者にこちらの都合でしょうもない手間をかけてしまうことになるのでどうにかそれもさせたくないと思いました。 今のところ以上です。 お時間あるときにでも返信いただけると幸いです。
メンテ

Page: 1 |

Re: 多重起動について ( No.1 )
名前:管理人 日時:2018/02/17 02:11

> 一つは、起動する側をdirectxで作成して他のexeファイルを起動させるというものでした。 > ですがこれだと先の問題では起動される側を変更しないといけないため意味がありそうにないです。 こちらは問題なさそうですが、『先の問題』とはなんでしょうか? ともあれ、DXライブラリを使用しないプログラムを自作しなくても、DxLib_Init の呼び出し前に SetWindowText でプログラム起動時のウィンドウに表示されるウィンドウタイトルが『DxLib』以外に なるようにしていれば他のDXライブラリを使用したプログラムが『多重起動禁止』にされることはなくなりますので、 よろしければお試しください // メインウインドウのウインドウタイトルを変更する int SetWindowText( const char *WindowText ) ; > 二つ目は、DXライブラリ自体を弄って「 SetDoubleStartValidFlag 」のデフォルトを TRUE に変えるものでした。 > ですが私一人の作成ではなく他チームも組み込むということになりこれを全員に渡さなくてはなりません。 > またバージョンが変わるごとに弄らなければなりません。手間はかかりますができなくはなさそうです。 tatenoyuさんがどのような立場にいられる方なのかによりますが、あまり現実的ではないように感じます > 三つめは、ゲームを完成させたら個々のゲームでリリース前に「 SetDoubleStartValidFlag(TRUE); 」を入れてもらうといった方法です。 > これも良さそうですが、作成者にこちらの都合でしょうもない手間をかけてしまうことになるのでどうにかそれもさせたくないと思いました。 SetDoubleStartValidFlag( TRUE ) ; を実行しなくても、前述の SetWindowText を DxLib_Init の前に呼び出すことで お互いのプログラムを『同じソフト』と判断されなくなり、同時に起動しても『多重起動』と判定されなくなりますので、 もし SetWindowText を DxLib_Init 呼び出しの後に実行してしまっていましたら、DxLib_Init 呼び出しの前に実行するようにしてください DXライブラリを使用したプログラムを作成される方もウィンドウのタイトルが『DxLib』のままなのは格好悪いと感じると思いますので 提案しやすいと思いますが如何でしょうか?
メンテ
Re: 多重起動について ( No.2 )
名前:tatenoyu 日時:2018/02/17 03:26

> こちらは問題なさそうですが、『先の問題』とはなんでしょうか? すみません、先の問題ではなく前の問題でした。 起動する側は関係なしに、起動される側が多重起動を可能にしなければ起動できないのでdirectxで作成しても意味がないように思ってました。 > SetWindowText でプログラム起動時のウィンドウに表示されるウィンドウタイトルが『DxLib』以外に > なるようにしていれば他のDXライブラリを使用したプログラムが『多重起動禁止』にされることはなくなりますので、 > SetDoubleStartValidFlag( TRUE ) ; を実行しなくても、前述の SetWindowText を DxLib_Init の前に呼び出すことで > お互いのプログラムを『同じソフト』と判断されなくなり、同時に起動しても『多重起動』と判定されなくなりますので、 ということはウィンドウタイトルさえ変えていれば多重起動ということにはならないということでしょうか。 それは全く考えてませんでした・・・。 他のexeファイルと違う名前を起動する側で付けさえすれば大丈夫ということですね。 ちなみにフルスクリーンでも大丈夫でしょうか? リリース時にはフルスクリーンで提出していたためウィンドウタイトルは特に関与したことなかったんですよね・・・。 > tatenoyuさんがどのような立場にいられる方なのかによりますが、あまり現実的ではないように感じます > DXライブラリを使用したプログラムを作成される方もウィンドウのタイトルが『DxLib』のままなのは格好悪いと感じると思いますので > 提案しやすいと思いますが如何でしょうか? こんなんですがC言語の学習とDxLibを使ってゲーム作成などを教えている立場になってます。 確かにそれなら良さそうです。
メンテ
Re: 多重起動について ( No.3 )
名前:管理人 日時:2018/02/18 01:55

> ということはウィンドウタイトルさえ変えていれば多重起動ということにはならないということでしょうか。 はい、その通りです > 他のexeファイルと違う名前を起動する側で付けさえすれば大丈夫ということですね。 > ちなみにフルスクリーンでも大丈夫でしょうか? はい、フルスクリーンでも大丈夫です
メンテ
Re: 多重起動について ( No.4 )
名前:tatenoyu(解決) 日時:2018/02/18 15:34

実行してみたところ意図したとおりに動いてくれました! ありがとうございます。
メンテ
Re: 多重起動について ( No.5 )
名前:tatenoyu 日時:2018/03/21 23:47

進めたのですがまた詰まってしまったので質問させてください。 あれから作業を進めて、起動する側のexeの階層から他のゲームを保持するディレクトリを調べて起動するっていうのを一応完成はしました。 それから予定していたゲームを起動させたりいろいろしたのですが、どうやら描画が出来ないみたいです。 ちゃんと起動が確認できたのは、DrawBoxのみで作ったブロック崩しと他のエンジンで作ったゲームでした。 DxLibでDrawGraph等を使ったゲームは、起動してるみたいで操作は受けるのですが音や描画がされてない状態です。 SetScreenFlipTargetWindowやCreateWindowなどいろいろ試したのですがうまく言ってない状態です。 何かアドバイスお願いします。
メンテ
Re: 多重起動について ( No.6 )
名前:管理人 日時:2018/03/21 23:59

うーん、ランチャーを作成したことが無いので実際に音や画像が表示されない状況を 見てみないと分かりそうもありません・・・ 画像や音が出ないとなるとカレントディレクトリが原因かとも思ったのですが・・・・ CreateProcess には引数 lpCurrentDirectory でカレントディレクトリを指定する必要がありますが、 こちらに実行される側の exe ファイルがあるフォルダは指定されていますでしょうか? ( NULL を指定した場合、実行する側のディレクトリがカレントディレクトリとして使用されるので、正常に  動作しないと思います・・・ )
メンテ
Re: 多重起動について ( No.7 )
名前:tatenoyu 日時:2018/03/22 20:05

> CreateProcess には引数 lpCurrentDirectory でカレントディレクトリを指定する必要がありますが、 > こちらに実行される側の exe ファイルがあるフォルダは指定されていますでしょうか? > ( NULL を指定した場合、実行する側のディレクトリがカレントディレクトリとして使用されるので、正常に > 動作しないと思います・・・ ) そうやってないですね…。引数 lpApplicationNameで.exeまで指定して起動してる状態です。 引数 lpCurrentDirectoryで指定するよう作り直してみます。
メンテ
Re: 多重起動について ( No.8 )
名前:tatenoyu 日時:2018/03/22 20:10

答えになってなかったので付け加えますと、 引数 lpCommandLine、lpProcessAttributes、lpThreadAttributes、lpEnvironment、lpCurrentDirectory はNULLを指定している状態です。
メンテ
Re: 多重起動について ( No.9 )
名前:tatenoyu(解決) 日時:2018/03/23 17:31

引数 lpApplicationNameをNULLに変えて、引数 lpCommandLineとlpCurrentDirectoryをNULLから変えて指定したらうまくいきました! ありがとうございます!
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存