もう少しでページが繰り下がって題名がコピペできなくなるところでした・・・。というのは置いておいて。久しぶりの更新です。今回は主に古いゲームに関する互換性向上です。コメントに関してはプログラムが分からないとたぶん意味を取ることができないと思います。ま、何となく何が問題だったのかは分かる様に。
ヘルプに書いていない仕様を持ち出さないでよ・・・
こちらは画面の描画に関して一瞬起動して即座に落ちてしまう問題に関してです。とある部分の処理について本来であれば「必ず一つ以上のフラグをとる」と書いてあったのでそれを踏まえてフラグがない場合はパラメータエラーとしていた部分なのですが、なんとフラグがなくても動作すると言うことが発覚。その場合は「ある既定の動作を行う」ということだったのでこちらも動作を合わせることでこの問題を修正しました。古いプログラムだと特にこの手の問題が多い様な気がするのですがなぜなのでしょうかね。
いくらフルスクリーンだからといっても入力はフック経由なのか?
で、次の問題は「ある処理方法をしているとマウス入力などが受け付けられない」という問題です。通常マウスに関する処理はウィンドウプロシージャと呼ばれるウィンドウに対する各種イベントを処理するためのルーチンで一括に処理するのですがそれがなぜか分割していて、さらにはWin9x時代の名残として「OS全体に影響を及ぼすやり方で入力を確認していた」というものです。WinVista以降だと管理者権限の関係で「OS全体に影響を及ぼす」ためには権限が必要となるためこんな動作をされるとそりゃ入力が検知できなくなるよね、という感想でした。
ちなみに、初めはDirectInputを使った入力の絡みか?と思ってDirectInput8のみ対応となっていた内部コードを全バージョン対応に書きかえたのですが、意味が無かったので再封印することになりました。一応リソースとして含まれてはいますので意味が完全に無いわけではない、という状態に。
Windows8になってさらにひどくなったMIDIの扱い
これに関しては確認していなかったので知らなかったのですね・・・。Windows7でもデバイスを設定できなくなっていたのにWindows8以降だとMIDIデバイスの汎用出力であるMIDI Mapperが削除されてしまっているのでデバイスを直接指定しない限りMIDIは基本的には再生できません。この「基本的には」にはMIDIを再生できるのはそのPCにおいて「一番最初にインストールされたデバイスだけは再生対象のデバイスとなり得る」というものであり、以降どうやってもこのデバイスを変えることができないそうで、一度ドライバを削除してしまったこのマシンではMIDIの出力先を指定しないゲームでMIDIの再生はできない=BGMが再生されない、というかな~りやっかいな状態であることが分かりました。
というわけで、WindowModePatchを組み込んだ上でMIDIを直接再生することでBGM等を再生しているゲームに関してデバイス名を直接指定することでMIDI再生が可能になるようにしてみました。一応Windows8以降が目安ですが、それ以前でも使える場面はある様な気がします。こちらについては設定ファイルを直接書きかえるタイプでのみの提供です。デバイス名についてはMIDI出力を設定する別のプログラムなどを使って調べてくださいね。
やっぱり要望があると張り合いがある
今回の更新についてもとある要望からです。いろいろと忙しかったのですが、なんか別のことがやりたいな~と思っていたところだったので一気に調べきって公開できるところまで持って行けたのでまあよしとします。そう考えるとやっぱりどこかに動作報告のサイトでも作らないとおもしろくないですね。