Win32 プラットフォームでタスク スイッチを無効にする方法

概要

この資料では、Ctrl + Esc や Alt + Tab などのキーの組み合わせを通じて利用される、タスク スイッチやその他のシステム機能を Win32 プラットフォーム上で無効にする方法について説明します。

Windows 95 および Windows 98

Alt + Tab や Ctrl + Esc による機能は、アプリケーションから有効および無効にすることができます。たとえば、SystemParametersInfo (SPI_SETSCREENSAVERRUNNING) を呼び出す方法があります。Alt + Tab や Ctrl + Esc の機能を無効にするには、uiParam パラメータに TRUE を設定します。有効にするには、パラメータに FALSE を設定します。
UINT nPreviousState;

// Disables task switching
SystemParametersInfo (SPI_SETSCREENSAVERRUNNING, TRUE, &nPreviousState, 0);

// Enables task switching
SystemParametersInfo (SPI_SETSCREENSAVERRUNNING, FALSE, &nPreviousState, 0);
: SystemParametersInfo (SPI_SETSCREENSAVERRUNNING) を使用してタスク スイッチを無効にしているアプリケーションは、終了前にタスク スイッチを有効にする必要があります。これを行わないと、プロセスが終了した後もタスク スイッチが無効のままとなります。

Windows NT 4.0 Service Pack 3 以降および Windows 2000

低レベルのキーボード フックをインストールすることにより、アプリケーションから Alt + Tab や Ctrl + Esc を無効にすることができます。低レベルのキーボード フック (WH_KEYBOARD_LL) は、SetWindowsHookEx を呼び出すことによりインストールされます。Windows のフックの詳細については、Platform SDK ドキュメントで「Hooks」の概要を参照してください。


次のコードは、Ctrl + Esc、Alt + Tab、および Alt + Esc を無効にする低レベルのキーボード フックを作るサンプルです。

LRESULT CALLBACK LowLevelKeyboardProc (INT nCode, WPARAM wParam, LPARAM lParam)
{
// By returning a non-zero value from the hook procedure, the
// message does not get passed to the target window
KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;
BOOL bControlKeyDown = 0;

switch (nCode)
{
case HC_ACTION:
{
// Check to see if the CTRL key is pressed
bControlKeyDown = GetAsyncKeyState (VK_CONTROL) >> ((sizeof(SHORT) * 8) - 1);

// Disable CTRL+ESC
if (pkbhs->vkCode == VK_ESCAPE && bControlKeyDown)
return 1;

// Disable ALT+TAB
if (pkbhs->vkCode == VK_TAB && pkbhs->flags & LLKHF_ALTDOWN)
return 1;

// Disable ALT+ESC
if (pkbhs->vkCode == VK_ESCAPE && pkbhs->flags & LLKHF_ALTDOWN)
return 1;

break;
}

default:
break;
}
return CallNextHookEx (hHook, nCode, wParam, lParam);
}

Windows NT 4.0 Service Pack 2 以前および Windows NT 3.51 以前

Windows NT タスク マネージャを置き換えることで、アプリケーションから Ctrl + Esc の機能をシステム全体として無効にできますが、この操作は推奨されません。


RegisterHotKey を呼び出すことにより Alt + Tab と Alt + Esc の組み合わせのホットキーを登録してアプリケーションが動作している場合は、アプリケーションから Alt + Tab と Alt + Esc を無効にできます。

詳細

Microsoft Visual C++ 5.0 以前などの古い開発ツールでは、低レベルのキーボード フックを使用したアプリケーションの構築に必要なヘッダー ファイルが含まれていない場合があります。最新のヘッダー ファイルを入手するには、次のマイクロソフト Web サイトから最新版の Platform SDK をダウンロードしてください。
低レベルのキーボード フックは、Windows NT 4.0 Service Pack 3 以降に固有の機能であるため、winuser.h (または windows.h) をインクルードする前に 0x0400 以上の値を _WIN32_WINNT に定義してください。
プロパティ

文書番号:226359 - 最終更新日: 2008/02/20 - リビジョン: 1

フィードバック