Как подключить только KeyboardFocus на Windows API - PullRequest
0 голосов
/ 04 декабря 2018

Я ищу в msdn обработчик Hook для Keyboard Focus, но не найден.

Я бы хотел обработчик для элемента, находящегося в фокусе с клавиатуры.

Пример:

Когда мы находимся на рабочем столе и нажимаем любую клавишу, которая является первой буквой программы, выбирается эта программа.

Example 1

Когда мы нажимаем клавишу TAB для навигационных ссылок, эти элементы выбираются.

Example 2

Я видел CBTProc для перехвата событий клавиатуры, но это не полезно, потому что мы можем выбрать элемент щелчком мыши.

Итак, я хотел бы, чтобы обработчик о фокусе мыши или клавиатуры, имя элемента.

1 Ответ

0 голосов
/ 05 декабря 2018

У меня был успех с этим кодом.

// Global variable.
HWINEVENTHOOK g_hook;

//
// Callback function that handles events.
//
void CALLBACK HandleWinEvent(HWINEVENTHOOK hook, DWORD event, HWND hwnd,
    LONG idObject, LONG idChild,
    DWORD dwEventThread, DWORD dwmsEventTime)
{
    std::cout << "Inside CB" << std::endl;
}

// Initializes COM and sets up the event hook.
void InitializeMSAA()
{
    CoInitialize(NULL);
    g_hook = SetWinEventHook(
        EVENT_OBJECT_FOCUS, EVENT_OBJECT_FOCUS,  // Range of events (4 to 5).
        NULL,                                          // Handle to DLL.
        HandleWinEvent,                                // The callback.
        0, 0,              // Process and thread IDs of interest (0 = all)
        WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS); // Flags.
}


// Unhooks the event and shuts down COM.
//
void ShutdownMSAA()
{
    UnhookWinEvent(g_hook);
    CoUninitialize();
}


int main()
{
    InitializeMSAA();

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}

Спасибо всем за ваш ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...