Функция RegisterHotKey (winuser.h)
Определяет горячий ключ на уровне системы.
Синтаксис
BOOL RegisterHotKey(
[in, optional] HWND hWnd,
[in] int id,
[in] UINT fsModifiers,
[in] UINT vk
);
Параметры
[in, optional] hWnd
Тип: HWND
Дескриптор окна, который получит WM_HOTKEY сообщения, созданные горячим ключом. Если этот параметр null, WM_HOTKEY сообщения отправляются в очередь сообщений вызывающего потока и должны обрабатываться в цикле сообщений.
[in] id
Тип: int
Идентификатор горячего ключа. Если параметр hWnd имеет значение NULL, горячий ключ связан с текущим потоком, а не с определенным окном. Если горячий ключ уже существует с теми же hWnd и идентификатором параметров, см. примечания для выполненных действий.
[in] fsModifiers
Тип: UINT
Клавиши, которые должны быть нажаты в сочетании с ключом, указанным параметром vk, чтобы создать сообщение WM_HOTKEY. Параметр
значение | значение |
---|---|
MOD_ALT 0x0001 |
Любой клавиши ALT должен быть удерживаем. |
MOD_CONTROL 0x0002 |
Любой клавиши CTRL должен быть удерживается вниз. |
MOD_NOREPEAT 0x4000 |
Изменяет поведение горячего ключа таким образом, чтобы автоматическая повторная клавиатура не давала нескольких уведомлений горячего ключа. Windows Vista: этот флаг не поддерживается. |
MOD_SHIFT 0x0004 |
Любой ключ SHIFT должен быть удерживаем вниз. |
MOD_WIN 0x0008 |
Любой ключ WINDOWS должен быть удерживаем. Эти ключи помечены логотипом Windows. Сочетания клавиш, связанные с ключом WINDOWS, зарезервированы для использования операционной системой. |
[in] vk
Тип: UINT
Код виртуального ключа горячего ключа. См. коды виртуальных ключей.
Возвращаемое значение
Тип: BOOL
Если функция выполнена успешно, возвращаемое значение ненулевое.
Если функция завершается ошибкой, возвращаемое значение равно нулю. Чтобы получить расширенные сведения об ошибке, вызовите GetLastError.
Эта функция завершается ошибкой, если вы пытаетесь связать горячий ключ с окном, созданным другим потоком.
Как правило, RegisterHotKey также завершается ошибкой, если нажатия клавиш, указанные для горячего ключа, уже зарегистрированы для другого горячего ключа. Однако некоторые предварительно существующие горячие ключи по умолчанию, зарегистрированные ОС (например, PrintScreen, которая запускает средство Snipping), могут быть переопределены другой регистрацией горячих ключей, когда одна из окон приложения находится на переднем плане.
Замечания
При нажатии клавиши система ищет совпадение со всеми горячими ключами. При поиске совпадения система отправляет сообщение WM_HOTKEY в очередь сообщений окна, с которым связан горячий ключ. Если горячий ключ не связан с окном, WM_HOTKEY сообщение публикуется в потоке, связанном с горячим ключом.
Если горячий ключ уже существует с тем же hWnd и параметров идентификатора, он сохраняется вместе с новым горячим ключом. Приложение должно явно вызывать unregisterHotKey, чтобы отменить регистрацию старого горячего ключа.
Ключ F12 зарезервирован для использования отладчиком в любое время, поэтому его не следует регистрировать как горячий ключ. Даже если вы не отладите приложение, F12 зарезервирован в случае, если отладчик в режиме ядра или JIT-отладчик является резидентным.
Приложение должно указать значение идентификатора в диапазоне 0x0000 через 0xBFFF. Общая библиотека DLL должна указывать значение в диапазоне 0xC000 через 0xFFFF (диапазон, возвращаемый функцией GlobalAddAtom). Чтобы избежать конфликтов с идентификаторами горячего ключа, определенными другими общими библиотеками DLL, библиотека DLL должна использовать функцию GlobalAddAtom для получения идентификатора горячего ключа.
**Windows Server 2003: **Если горячий ключ уже существует с тем же hWnd и идентификатором параметров, он заменяется новым горячим ключом.
Примеры
В следующем примере показано, как использовать функцию RegisterHotKey с флагом MOD_NOREPEAT.
В этом примере для основного потока регистрируется горячий ключ ALT+b. При нажатии горячего ключа поток получит сообщение WM_HOTKEY, которое будет выбрано в вызове GetMessage. Так как в этом примере используется MOD_ALT со значением MOD_NOREPEAT для fsModifiers, поток будет получать только другое сообщение WM_HOTKEY при освобождении клавиши B, а затем снова нажимается, пока клавишу ALT нажимается вниз.
#include "stdafx.h"
int _cdecl _tmain (
int argc,
TCHAR *argv[])
{
if (RegisterHotKey(
NULL,
1,
MOD_ALT | MOD_NOREPEAT,
0x42)) //0x42 is 'b'
{
_tprintf(_T("Hotkey 'ALT+b' registered, using MOD_NOREPEAT flag\n"));
}
MSG msg = {0};
while (GetMessage(&msg, NULL, 0, 0) != 0)
{
if (msg.message == WM_HOTKEY)
{
_tprintf(_T("WM_HOTKEY received\n"));
}
}
return 0;
}
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows Vista [только классические приложения] |
минимальный поддерживаемый сервер | Windows Server 2003 [только классические приложения] |
целевая платформа | Виндоус |
заголовка | winuser.h (включая Windows.h) |
библиотеки |
User32.lib |
DLL | User32.dll |
См. также
Зарегистрировать горячий ключ для текущего приложения (CSRegisterHotkey)
Зарегистрировать горячий ключ для текущего приложения (CppRegisterHotkey)