Я думаю, что эту проблему должно быть легко решить, и я приношу ее здесь, потому что я действительно чувствую, что везде искал решение.
Мой код написан в C# и если просто по записи горячая клавиша Alt-Tab. Эта строка работы в XP, но возвращает false в 7:
RegisterHotKey(handle, ID__ALT_TAB, MOD_ALT, VK_TAB));
Я знаю, что Windows 7 теперь требует, чтобы я не зарегистрировал горячую клавишу, прежде чем я смогу зарегистрировать свой новый, и это - то, где проблема заключается. Когда я проверяю последний код ошибки, я получаю код 1409, подразумевая, что горячая клавиша уже существует. Однако, если я называю эту строку перед той выше:
UnregisterHotKey(handle, ID__ALT_TAB));
Та строка сбои и последний код ошибки установлены на 1419, не означая такой горячей клавиши, существует. Эти строки действительно работают в XP, и я могу зарегистрировать горячую клавишу и затем не зарегистрировать ее. Я полагаю, что это - потому что я пытаюсь не зарегистрировать горячую клавишу в неправильном идентификаторе, поскольку ID_ALT_TAB сам определен. Я не смог найти корректный идентификатор уровня Alt-Tab HotKey Windows. Любая справка или общие указатели значительно ценились бы.
Я не думаю, что есть способ сделать это. Не говоря уже о том, что даже если вам удастся каким-то образом зарегистрировать горячую клавишу поверх существующей, что произойдет, когда ваше приложение завершится? Вдруг вообще нет Alt-Tab.
Я бы предпочел другой ярлык, чтобы вызвать вашу замену. Может быть, Ctrl-Alt-Tab?
Вы также запускали программу как администратор (а не просто входили в систему как администратор)? После того, как программы XP не обязательно получают права администратора только потому, что пользователь является администратором, вы можете попробовать щелкнуть правой кнопкой мыши Запуск от имени администратора (или аналогичный).
Не уверены, видели ли вы это ? Возможно, здесь придется немного поработать с C. Я бы подумал, что вы сможете перехватить нажатие Alt + Tab с помощью этого кода, а затем сделать на нем все, что захотите, но я не уверен.
РЕДАКТИРОВАТЬ: Также см. this для некоторых старых работ VB, которые вам, возможно, придется перевести на C #.