- ベストアンサー
Win32 APIでのVirtual-Key Codesの疑問
Win32 APIでのVirtual-Key Codesの疑問 開発環境はVS.NET2003です。 WinAPIでプログラミングをやっているのですが、Virtual-Key Codes(VK_○○)というやつで ALT+F4キーで終了するVKコードが無いのでここで質問させて頂きました。 ALT+F4で終わるコードなんてないんでしょうか? よろしくお願いします。
- みんなの回答 (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); }
その他の回答 (2)
- tsukasa-12r
- ベストアンサー率65% (358/549)
「Alt+F4で終わるコード」 というのは、単純に「Alt+F4に相当するVK_〇〇〇」のことで、「通常、Alt+F4でプロセスが終了します」、という意味であると理解してよいですか? 質問の意図(Alt+F4で終了するようにしたいのか、逆にAlt+F4で終了しないようにしたいのか)がわからないのですが、Alt+F4で終了させるのであれば、Alt+F4が自動的にWM_CLOSE(記憶が定かではあるませんが、WM_CLOSEだったと思います)に変換されたと思いますので、単純にWM_CLOSEに対して処理を記述すればよいと思います。 ちなみにAltキー単独ではVK_MENUになるようです。
お礼
ALT+F4だとWM_CLOSEで処理ができるんですね。 参考になりました。
- sha-girl
- ベストアンサー率52% (430/816)
恐らく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; }
お礼
OS側が勝手にやってくれる処理のようですね。 フック処理とかが関わってくるんですね。 参考になりました。
お礼
WM_SYSKEYDWON内で処理をすれば可能なことなんですね。 Alt+F4なんてVKにはないよなーと考えていたんですが そういうことだったんですね。 回答、ありがとうございます。