アプリ版:「スタンプのみでお礼する」機能のリリースについて

ごく普通のウィンドウプロシージャでキーの判別を行っています
下記のように条件(1)が WM_KEYUP の際には(2)、(3)ともに検出します

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
switch (msg)
{
case WM_KEYUP: ............ (1)
switch(wp)
{
case VK_RETURN:
{ break; } ..... (2)
case VK_SNAPSHOT:
{ break; } ..... (3)
default:
{ break; }
}
break;
}
return;

ところが条件(1)を WM_KEYDOWN に変更すると(2)の Enter は検出しますが、(3)の PrtSc を検出してくれません

質問1 なぜ PrtSc を WM_KEYDOWN では検出しないのですか?
質問2 WM_KEYUP WM_KEYDOWN のいずれか一方にしか反応しないキーはまだありますか?
質問3 どのようにしたら PrtSc の WM_KEYDOWN を捕まえることが出来ますか?

自分でも調べてみましたが、どうも判然と致しません
宜しくご指導のほどお願い申し上げます

A 回答 (1件)

質問1 なぜ PrtSc を WM_KEYDOWN では検出しないのですか?



  理由はわかりませんがそういう仕様なのかも。

質問2 WM_KEYUP WM_KEYDOWN のいずれか一方にしか反応しないキーはまだありますか?

  テストプログラムで全てのVK_~でWM_KEYUPとWM_KEYDOWNを試せばわかります。

質問3 どのようにしたら PrtSc の WM_KEYDOWN を捕まえることが出来ますか?

  正当な手段かどうかは別にして、例えば
  RegisterHotKey()でVK_SNAPSHOTをホットキーに登録すれば
  キーを押下したタイミングでWM_HOTKEY発生します。
  
  #define ID_HOTKEY_SNAPSHOT 1
  
  BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  {
    hWnd = CreateWindow(…);
    RegisterHotKey(hWnd, ID_HOTKEY_SNAPSHOT, 0, VK_SNAPSHOT);
    …
  }
  LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  {
    switch (message)
    {
    case WM_HOTKEY:
      if( ID_HOTKEY_SNAPSHOT = wParam )
      {…}
      break;
    }
  }
    • good
    • 0
この回答へのお礼

ありがとうございます

お陰さまでPrtScを捕まえることが出来ました

今後も宜しくお願い申し上げます

お礼日時:2011/06/23 21:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!