Код (Text): #include <windows.h> void SetNumLock( BOOL bState ) { BYTE keyState[256]; GetKeyboardState((LPBYTE)&keyState); if( (bState && !(keyState[VK_NUMLOCK] & 1)) || (!bState && (keyState[VK_NUMLOCK] & 1)) ) { // Simulate a key press keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 ); // Simulate a key release keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); } } Вопрос: откуда там 0х45 если скан код нам лока 0х90
0x90 = VK_NUMLOCK - это виртуал-код, а 0х45 - это скан-код клавиши NumLock PS: А вообще задавать оба кода - это "масло масляное", поэтому в пред.версиях мсдн однозначно указывалось, что в keybd_event параметр bScan не используется. Почему в нынешней редакции тумана напустили - не понятно (если бы можно было как в SendInput задавать либо то, либо другое - тогда другое дело, но это не вяжется с требованием, что bVk д.б. > 0)
см. раздельчик Extended-Key Flag в About Keyboard Input. Просто означает доп.клавишу расширенной клавиатуры, например, левые Ctrl и Alt - основные, а правые - extended, также и дублирующие Enter, Home и т.п. на цифровой клавиатуре являются extended - они имеют те же виртуальные и скан коды, что и основные, но для возможности их отличия от основных юзается extended-флаг PS: Вот только нафига для клавиши numlock нужен этот флаг не понятно, видимо просто потому, что в цифровой части клавы сидит