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


レオン  2003-12-29 22:32:41  No: 52953

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


0x77C3  2003-12-31 09:57:12  No: 52954

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


レオン  2004-01-02 19:35:26  No: 52955

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

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

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


かぁ  2004-01-05 12:34:30  No: 52956

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


レオン  2004-01-06 01:35:54  No: 52957

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

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


かぁ  2004-01-06 10:08:37  No: 52958

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


かぁ  2004-01-06 10:10:58  No: 52959

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加