電気いじり好きのためのMS-20計画 [電気いじり好きのためのMS-20計画]
電気いじり好きのためのMS-20計画
キーボードのキーボード化計画(2)
今回の話の内容はOS(Windows)に依存してしまいます。
MS-20のウィンドウに直接メッセージを送る方法を試しました。まずは下準備として、自分のアプリケーションソフトからMS-20を起動させ、ウィンドウハンドルを取得し、終了させるようにしました。
ひとつ意外だったのは、起動直後のプロセスが稼動中のMS-20のウィンドウのプロセスとは別物だったことです。起動直後のプロセスはすぐに終了してしまいます。だから実際のMS-20のウィンドウは、ウィンドウネームを手がかりに見つけることになります。なお、ウィンドウネームは"MS-20"でした。
これでウィンドウハンドルは取得できたので、このウィンドウにMIDI関係のメッセージが来るかどうかを調べてみました。まずDLLをひとつ作って、あらゆるウィンドウに送られるメッセージをフックできるようにしておきます。
次に一種の動作テスト。自作のアプリケーションでMIDI INデバイスをオープンし、メッセージはウィンドウで受け取るように指定。この動作を先ほどのDLLで監視し、MM_MIM_で始まる名のメッセージが送られてくることを確認しました。もしもMS-20がメッセージをウィンドウで受け取るように指定しているなら、同様にメッセージが確認できるはずです。
MS-20にはMIDI INデバイスを設定済み。先ほどのDLLで監視しながら今度はMS-20を起動、終了。しかしMM_MIM_で始まる名のメッセージはMS-20のトップレベルウィンドウにも、その他のどのウィンドウにも送られませんでした。
結論。MS-20はMIDI INデバイスからのメッセージを受け取るのにウィンドウを使わない。コールバック関数を使っているか、スレッドを使っているかのどちらか。
その他に今回したことは、MMSYSTEMからドライバへメッセージが送られる時に何とか横取りできないかと調べたこと。残念ながら外部のアプリケーションソフトからは横取りできないみたいです。(コールバック関数と同様の仕組みなので。)
今回はここまでです。
コメント 0
コメントの受付は締め切りました