• ベストアンサー

 Win32 APIでのVirtual-Key Codesの疑問

 Win32 APIでのVirtual-Key Codesの疑問 開発環境はVS.NET2003です。 WinAPIでプログラミングをやっているのですが、Virtual-Key Codes(VK_○○)というやつで ALT+F4キーで終了するVKコードが無いのでここで質問させて頂きました。 ALT+F4で終わるコードなんてないんでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

 こんばんは。  WM_SYSKEYDOWNメッセージの「wParam == VK_F4」で判断出来るのでは。  http://msdn.microsoft.com/en-us/library/ms646286(VS.85).aspx LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_SYSKEYDOWN: if(wParam == VK_F4) { ::MessageBox(hWnd, TEXT("test"), TEXT("test"), IDOK); } break; case WM_CLOSE: ::DestroyWindow(hWnd); return 0; case WM_NCDESTROY: ::PostQuitMessage(0); return 0; } return ::DefWindowProc(hWnd, message, wParam, lParam); }

dotneer
質問者

お礼

  WM_SYSKEYDWON内で処理をすれば可能なことなんですね。 Alt+F4なんてVKにはないよなーと考えていたんですが そういうことだったんですね。 回答、ありがとうございます。

その他の回答 (2)

回答No.2

「Alt+F4で終わるコード」 というのは、単純に「Alt+F4に相当するVK_〇〇〇」のことで、「通常、Alt+F4でプロセスが終了します」、という意味であると理解してよいですか? 質問の意図(Alt+F4で終了するようにしたいのか、逆にAlt+F4で終了しないようにしたいのか)がわからないのですが、Alt+F4で終了させるのであれば、Alt+F4が自動的にWM_CLOSE(記憶が定かではあるませんが、WM_CLOSEだったと思います)に変換されたと思いますので、単純にWM_CLOSEに対して処理を記述すればよいと思います。 ちなみにAltキー単独ではVK_MENUになるようです。

dotneer
質問者

お礼

ALT+F4だとWM_CLOSEで処理ができるんですね。 参考になりました。

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

恐らくALT+F4を押したときに WM_KEYDOWN等のメッセージが来ないということですよね? ALT+F4はOS側で消化してしまうので、WM_KEYDOWNが来ないと思います。 ALT+F4時に何かアプリに動作をさせたいのなら、 SetWindowHookExか、RegisterHotKeyで調べてみてください。 アプリをどう挙動させたいかによりますが、 GetKeyboardStateでも望みの動作が可能かもしれません。 RegisterHotKeyを使った例ですが、WndProc内で以下の処理をすればALT+F4が押されたときに メッセージボックスを表示します。 case WM_CREATE:  ::RegisterHotKey( hWnd , 1234 , MOD_ALT , VK_F4 );  break; case WM_HOTKEY: {  int hotkey_id = wParam;  if (1234 == hotkey_id)  {   ::MessageBox( hWnd , TEXT("ALT+F4が押された") , TEXT("") , MB_OK );  }  break; }

dotneer
質問者

お礼

OS側が勝手にやってくれる処理のようですね。 フック処理とかが関わってくるんですね。 参考になりました。

関連するQ&A