none
スレッドによるキーの監視 RRS feed

  • 質問

  •  

    Visual Studio 2005
    MFC

     

    教えて頂きたいのですが

     

    スレッドでキーの監視は可能なのでしょうか。

     

    例えばAのキーが押された場合、メッセージボックスを出力するといった

     

    処理をスレッド内で行なうことは可能なのでしょうか。

     

    例)

    void CTestDlg::OnBnClickedButton1()
    {
     hThread = CreateThread( 0, 0, testhread, 0, 0, 0);
    }

    unsigned long __cdecl testhread(LPVOID pParam)
    {
     if(keydown == 'A')
     {
      MessageBox(NULL,_T("Aのキーが押下されました。"),_T(""),MB_OK);
     }
     
     return 0;
    }

    申し訳ございませんが、よろしくお願い致します。
    2007年10月1日 8:21

回答

  • なぜ? スレッドでやりたいんでしょう?

    普通にメインスレッドで判定する方が簡単だと思うのですが。

    前提条件がきちんと書かれていませんが、そのアプリケーションのウインドウにフォーカスがある場合で

    良いのですよね。もしそうならウインドウを持っているメインスレッドにウインドウメッセージが来ると思うので

    そこで処理してしまった方が良いと思うのです。

    ワーカースレッド(ですよね)はウインドウを持っていないのでメッセージは飛んできませんので

    ワーカースレッドにわざわざ入力されたキー情報を通知して表示しなくてはならなくなると思います。

    これだとわざわざワーカースレッドにする意味がいないように思うのでスレッドでやりたいと言う理由を

    書いてもらった方が良いと思います。

    もしかしたら他のアプローチが見つかるかもしれません。

     

    2007年10月2日 7:51
  • キーの監視をWin32 APIで実現する場合はSetWindowsHookExを使って

    Windowsのメッセージをフック方法があります。

    処理をスレッドで行うにはフックしたウィンドウプロシージャから処理用のスレッドに

    データを渡す感じでしょうか。

    2007年10月2日 12:17

すべての返信

  • なぜ? スレッドでやりたいんでしょう?

    普通にメインスレッドで判定する方が簡単だと思うのですが。

    前提条件がきちんと書かれていませんが、そのアプリケーションのウインドウにフォーカスがある場合で

    良いのですよね。もしそうならウインドウを持っているメインスレッドにウインドウメッセージが来ると思うので

    そこで処理してしまった方が良いと思うのです。

    ワーカースレッド(ですよね)はウインドウを持っていないのでメッセージは飛んできませんので

    ワーカースレッドにわざわざ入力されたキー情報を通知して表示しなくてはならなくなると思います。

    これだとわざわざワーカースレッドにする意味がいないように思うのでスレッドでやりたいと言う理由を

    書いてもらった方が良いと思います。

    もしかしたら他のアプローチが見つかるかもしれません。

     

    2007年10月2日 7:51
  • キーの監視をWin32 APIで実現する場合はSetWindowsHookExを使って

    Windowsのメッセージをフック方法があります。

    処理をスレッドで行うにはフックしたウィンドウプロシージャから処理用のスレッドに

    データを渡す感じでしょうか。

    2007年10月2日 12:17