Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > RegisterHotKey PrintScreen


Автор: Sahab 23.4.2013, 12:09
Необходимо установить хот-кей на кнопку (необязательный мод+) принтскрин. 

Код

#include <windows.h>
#include <Winuser.h>
#include <cstdio>

int main (
    int argc, 
    char *argv[])
{           
    if (RegisterHotKey(
        NULL,
        1,
        MOD_ALT | 0x4000,
        VK_PRINT))  
    {
        printf("Hotkey 'ALT+VK_PRINT' registered, using MOD_NOREPEAT flag\n");
    }
 
    MSG msg = {0};
    while (GetMessage(&msg, NULL, 0, 0) != 0)
    {
        if (msg.message == WM_HOTKEY)
        {
            printf("WM_HOTKEY received\n");            
        }
    } 
 
    return 0;
}

Перехват не происходит, хотя RegisterHotKey возвращает true.  В чем проблема/куда копать?
Спасибо.

Автор: feodorv 23.4.2013, 15:29
http://stackoverflow.com/questions/5815471/whats-the-purpose-of-vk-print можно прочесть, что клавиша не та - вместо VK_PRINT (0x2a) нужно использовать VK_SNAPSHOT (0x2c). Проверил, работает))))

Автор: Sahab 23.4.2013, 16:50
Большое благодарю. 
У меня попутно другой вопрос, спрошу уже здесь.
При попытке использовать VK_SNAPSHOT RegisterHotKey возвращает false, 
как показала GetLastError = ERROR_HOTKEY_ALREADY_REGISTERED 1409 (0x581) Hot key is already registered.
Я могу переназначить хоткей на свое приложение?

Автор: feodorv 23.4.2013, 18:06
Боюсь, здесь можно только грохнуть другое приложение, зарегистрировавшее этот хоткей... Или сменить сам хоткей...

PS Попытался сделать MOD_CONTROL или MOD_SHIFT (вместо MOD_ALT) с VK_SNAPSHOT, регистрирует, но реагирует всё равно на Alt-PrintScreen smile 

Автор: feodorv 23.4.2013, 18:24
Можно ещё использовать локальные (по отношению к процессу) акселераторы: LoadAccelerators вместо RegisterHotKey.

Автор: xvr 24.4.2013, 10:15
Помнится, когда мне понадобилось сделать hot key во что бы то ни стало, я сначала регистрировал его как HotKey, а если не получалось, ставил low level hook на клавиатуру.

Автор: Sahab 26.4.2013, 11:52
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)