キー入力をどんな時でも有効にするには?


レオン  2003-12-29 13:32:41  No: 52953  IP: [192.*.*.*]

単刀直入にお伺い致します。何かの処理中でもキーイベントを起こす方法があれば教えてください。
何かの処理を行っている最中(私の場合はWAVEの再生)だとキーイベント(例:一時停止など)が起こせません。ボタンクリックイベントなら操作が起きるのですが、キーイベントだとダメでした。
再生をスレッドにしたんですが、再生がうまくいきません。
そこでボタンクリックのように操作を横取り(?)する方法がありましたら、教えてください。

編集 削除
0x77C3  2003-12-31 00:57:12  No: 52954  IP: [192.*.*.*]

ボタンクリックをどうにかするよりも、サウンドを非同期で再生するとか、なぜスレッドで再生するとうまく行かないかとか、そのへん考えるほうが先だと思われます。

編集 削除
レオン  2004-01-02 10:35:26  No: 52955  IP: [192.*.*.*]

返答して頂きありがとうございます。
なぜスレッドでうまく行かないのかいろいろ調べていたところ、スレッドには、
「インタフェーススレッド」と「ワーカースレッド」の2種類があるところまで調べました。
今まではワーカースレッドでやっていてダメだったので、インタフェーススレッドでやってみようと思っています。
ただ、インタフェーススレッドに関するホームページが検索しても出てきません・・・。
どなたかインタフェーススレッドを分かりやすく説明しているホームページをご存知でしたら教えてください。お願いします。

前回開発環境を書いて居なかったというマナー(?)違反をしていたので、遅れ馳せながら報告させていただきます。
OS->WinXP、VC++6.0、ダイアログベース、MFC使用
再生するのはActiveXコントロールです。

前回参考にしたページはこちらです。
ttp://www.alpha-net.ne.jp/users2/uk413/vc/VCT_MT.html

編集 削除
かぁ  2004-01-05 03:34:30  No: 52956  IP: [192.*.*.*]

>>再生するのはActiveXコントロールです。
コントロールで再生してるなら、そのコントロールに中断するメソッドが
無いとダメなんじゃない?
(どんな状況だか判らないので何とも言えないけど)
あと、スレッド使う時は、アパートメントも考える必要があるので。念の為。

編集 削除
レオン  2004-01-05 16:35:54  No: 52957  IP: [192.*.*.*]

>>コントロールで再生してるなら、そのコントロールに中断するメソッドが無いとダメなんじゃない?
説明不足だったようです。その中断メソッドを特定のキー入力で起こすのが目的なのです。
けど、そのコントロールが処理を独占していてその間、PreTranslateMessageイベントが起きなくて困っているのです。

アパートメントという言葉ははじめて聞きました。少し調べてみます。

編集 削除
かぁ  2004-01-06 01:08:37  No: 52958  IP: [192.*.*.*]

>>説明不足だったようです。その中断メソッドを特定のキー入力で起こすのが目的なのです。
なるほど。
それなら、そのコントロールとは別のスレッドを作り、そこでキーを監視して、
キーが押されたら、そのスレッドからコントロールの中断メソッドを呼び出す。
って感じにすればいいと思います。
その時の注意点としては、そのコントールがMTAに属してるなら、
そのスレッドで使うインターフェイスは生でもいいけど、
STAならマーシャシングが必要って事で。

編集 削除
かぁ  2004-01-06 01:10:58  No: 52959  IP: [192.*.*.*]

追記
もちろん、その作ったスレッドにも CoInitializeEx で
アパートメントを与えてやる必要がありますよ。

編集 削除