Следующий код работает отлично:RegisterHotKey не работает MediaPlayPause
public class HotKeys
{
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
public enum KeyModifier
{
None = 0,
Alt = 1,
Control = 2,
Shift = 4,
WinKey = 8
}
}
...
RegisterHotKey(this.Handle, id, (int)HotKeys.KeyModifier.None, (int)Keys.Add)
Я могу слушать сообщения WndProc для Msg 0x312, и я вижу, что горячая клавиша «Добавить» была нажата, даже если мое окно не имеет фокус. Я не могу видеть это сообщение прибывает в моем приложении:
msg=0x312 (WM_HOTKEY) hwnd=0x4c19ee wparam=0x0 lparam=0x6b0000 result=0x0
Если я просто изменить это зарегистрировать Keys.MediaPlayPause, он больше не работает из любого приложения. Когда я нажимаю клавишу, сообщения не получаются вообще. Но я думаю, что это правильный ключ, потому что если я ставлю фокус на окно и нажмите его, я вхожу следующее сообщение:
msg=0x319 hwnd=0x4c19ee wparam=0x0 lparam=0xe0000 result=0x0
Таким образом, вопрос, почему я не могу зарегистрировать этот конкретный ключ в качестве глобальной горячей клавиши ? Я уже проверял, что он не используется, и звонок в RegisterHotKey был успешным.
IIRC медиа-ключи отправляются как wm_appcommands (0x319), а не как ключевые сообщения, вы можете проверить это, ища ключевые сообщения, если вы затормозите кнопку на вашем сфокусированном окне и сравниваете ее с тем, что вы видите, мультимедийный ключ –