My Daily Programming Life...

Windowsキーを無効にする

今作っているソフトで、一時的にWindowsキーを無効にしたいときがあった。
普通だとスタートメニューが表示されたり、ショートカットがいくつか使えたりするけど、
Windowsキーを利用するアプリを作っていて、自分のウィンドウにフォーカスがあるときだけはWindowsキーを無効にしたかった。

とりあえずその方法

まずは単純に無効にする方法。キーボードフックを利用すればよいらしい。

hHook = SetWindowsHookEx( WH_KEYBOARD_LL , WinKeyHook , hInst , 0 );

以下のURLを見れば全体が書いてある。
http://www.programmersheaven.com/mb/windows/344596/344596/how-to-disable-the-start-menu-button/

で、そこから、自分のウィンドウにフォーカスがあるときだけという条件を付けるカスタマイズ
フック関数を以下のようにする

LRESULT CALLBACK WinKeyHook(int code, WPARAM wparam, LPARAM lparam)
{
PKBDLLHOOKSTRUCT key = (PKBDLLHOOKSTRUCT)lparam;
DWORD pid=0;

switch(wparam)
{
case WM_KEYDOWN:
case WiM_KEYUP:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
if(key->vkCode==VK_LWIN || key->vkCode==VK_RWIN){
GetWindowThreadProcessId( GetForegroundWindow() , &pid );
if( GetCurrentProcessId() == pid ){
return 1;
}
}
}
return CallNextHookEx(NULL, code, wparam, lparam);
}


これで自分がフォアグラウンドにいるときはWindowsキーが無効になる。
ただし、自分自身のウィンドウもWindowsキーのイベントを取得できなくなるので注意。
自分も必要な場合は・・・これからどうするか考えます。

0 コメント:

Post a Comment

feedSubscribe to my feed