Windowsキーを無効にする


今作っているソフトで、一時的に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キーのイベントを取得できなくなるので注意。
自分も必要な場合は・・・これからどうするか考えます。

コメント投稿は締め切りました。