keybd_event непонятки

Тема в разделе "WASM.WIN32", создана пользователем punxer, 27 май 2010.

  1. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    Код (Text):
    1. #include <windows.h>
    2.  
    3.    void SetNumLock( BOOL bState )
    4.    {
    5.       BYTE keyState[256];
    6.  
    7.       GetKeyboardState((LPBYTE)&keyState);
    8.       if( (bState && !(keyState[VK_NUMLOCK] & 1)) ||
    9.           (!bState && (keyState[VK_NUMLOCK] & 1)) )
    10.       {
    11.       // Simulate a key press
    12.          keybd_event( VK_NUMLOCK,
    13.                       0x45,
    14.                       KEYEVENTF_EXTENDEDKEY | 0,
    15.                       0 );
    16.  
    17.       // Simulate a key release
    18.          keybd_event( VK_NUMLOCK,
    19.                       0x45,
    20.                       KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
    21.                       0);
    22.       }
    23.    }
    Вопрос: откуда там 0х45 если скан код нам лока 0х90
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    0x90 = VK_NUMLOCK - это виртуал-код, а 0х45 - это скан-код клавиши NumLock
    PS: А вообще задавать оба кода - это "масло масляное", поэтому в пред.версиях мсдн однозначно указывалось, что в keybd_event параметр bScan не используется. Почему в нынешней редакции тумана напустили - не понятно (если бы можно было как в SendInput задавать либо то, либо другое - тогда другое дело, но это не вяжется с требованием, что bVk д.б. > 0)
     
  3. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    а когда юзается KEYEVENTF_EXTENDEDKEY, что то не нашел в МСДН
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    см. раздельчик Extended-Key Flag в About Keyboard Input. Просто означает доп.клавишу расширенной клавиатуры, например, левые Ctrl и Alt - основные, а правые - extended, также и дублирующие Enter, Home и т.п. на цифровой клавиатуре являются extended - они имеют те же виртуальные и скан коды, что и основные, но для возможности их отличия от основных юзается extended-флаг
    PS: Вот только нафига для клавиши numlock нужен этот флаг не понятно, видимо просто потому, что в цифровой части клавы сидит