Зарегистрировать уже используемую горячую клавишу

Фон:

Я хочу прослушать последовательность горячих клавиш(Ctrl+Alt+Left)глобально, поэтому я использую:

[DllImport("user32.dll")]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);

Это прекрасно работает со многими другими последовательностями горячих клавиш, такими как Ctrl+Alt+PageUp, Ctrl+Alt+PageDownи т. д. Но проблема возникает конкретно с Ctrl+Alt+Left.


Задача:

На одном компьютере работает нормально, как и любая другая последовательность горячих клавиш, а на другом компьютере, где Ctrl+Alt+Arrowиспользуется для поворота экрана, не удается зарегистрировать горячую клавишу (, т.е. возвращает ноль и не получить обратные вызовы дескриптору окна ).

MSDN говорит:Ошибка RegisterHotKey, если нажатия клавиш, указанные для горячей клавиши, уже зарегистрированы другой горячей клавишей.

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

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


Вопросы:

В чем разница между Ctrl+Alt+Leftв качестве горячей клавиши для поворота экрана -и Ctrl+Sв качестве горячей клавиши для сохранения, одна из которых вызывает сбой, а другая нет? (может быть, это потому, что одна глобальная горячая клавиша, а вторая контекстная?)

Можно ли полностью переопределить горячие клавиши? Это хорошая идея?

Самое главное, как я могу гарантировать, что моя горячая клавиша будет зарегистрирована?

6
задан SimpleVar 4 August 2012 в 16:48
поделиться