// ----------------------------------------
// Переключение состояния виртуальных
// клавиш
// ----------------------------------------

#define STRICT
#include <windows.h>

#pragma argsused
int PASCAL
WinMain(HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR     lpszCmdLine,
	int       nCmdShow)
{
  // Буфер для записи состояния клавиш
  BYTE aKBState[256];

  // Определяем состояние клавиш
  GetKeyboardState(aKBState);

  MessageBox(NULL, "Нажмите 'OK' для"
    " переключения клавиш <NumLock>, "
    "<ScrollLock>, <CapsLock>",
    "KBLED Application", MB_OK | MB_ICONINFORMATION);

  // Инвертируем текущее состояние клавиш
  // <NumLock>, <ScrollLock>, <CapsLock>
  aKBState[VK_NUMLOCK] ^= 1;
  aKBState[VK_SCROLL]  ^= 1;
  aKBState[VK_CAPITAL] ^= 1;

  // Устанавливаем новое состояние клавиш
  SetKeyboardState(aKBState);

  MessageBox(NULL, "Нажмите 'OK' для обратного"
    " переключения",
    "KBLED Application", MB_OK | MB_ICONINFORMATION);

  // Возвращаем исходное состояние клавиш
  // <NumLock>, <ScrollLock>, <CapsLock>
  aKBState[VK_NUMLOCK] ^= 1;
  aKBState[VK_SCROLL]  ^= 1;
  aKBState[VK_CAPITAL] ^= 1;

  // Устанавливаем новое состояние клавиш
  SetKeyboardState(aKBState);

  return 0;
}