今作っているソフトで、一時的にWindowsキーを無効にしたいときがあった。
普通だとスタートメニューが表示されたり、ショートカットがいくつか使えたりするけど、
Windowsキーを利用するアプリを作っていて、自分のウィンドウにフォーカスがあるときだけはWindowsキーを無効にしたかった。
とりあえずその方法
まずは単純に無効にする方法。キーボードフックを利用すればよいらしい。
<code><br>hHook = SetWindowsHookEx( WH_KEYBOARD_LL , WinKeyHook , hInst , 0 );<br></code>
以下のURLを見れば全体が書いてある。
http://www.programmersheaven.com/mb/windows/344596/344596/how-to-disable-the-start-menu-button/
で、そこから、自分のウィンドウにフォーカスがあるときだけという条件を付けるカスタマイズ
フック関数を以下のようにする
<code><br>LRESULT CALLBACK WinKeyHook(int code, WPARAM wparam, LPARAM lparam)<br>{<br>PKBDLLHOOKSTRUCT key = (PKBDLLHOOKSTRUCT)lparam;<br>DWORD pid=0;<br><br>switch(wparam)<br>{<br>case WM_KEYDOWN:<br>case WiM_KEYUP:<br>case WM_SYSKEYDOWN:<br>case WM_SYSKEYUP:<br>if(key->vkCode==VK_LWIN || key->vkCode==VK_RWIN){<br>GetWindowThreadProcessId( GetForegroundWindow() , &pid );<br>if( GetCurrentProcessId() == pid ){<br>return 1;<br>}<br>}<br>}<br>return CallNextHookEx(NULL, code, wparam, lparam);<br>}<br></code>
これで自分がフォアグラウンドにいるときはWindowsキーが無効になる。
ただし、自分自身のウィンドウもWindowsキーのイベントを取得できなくなるので注意。
自分も必要な場合は・・・これからどうするか考えます。