SSブログ

電気いじり好きのための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)  トラックバック(0) 

コメント 0

コメントの受付は締め切りました

トラックバック 0