Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > THotKey + Windows 7


Автор: pomogite 28.2.2011, 20:17
Здравствуйте, 
Есть программа которая посылает нажатие клавиши другому окну, просле нажатия комбинации ctrl +1,  через хук
Код

PostMessage(hook, WM_keydown, vk_f1+ComboBox1.ItemIndex, 0);

В Win XP всё прекрасно работает, а вот на Win 7x64 Максимальная, нехочет работать =(  Подскажите почему так?

Автор: kami 28.2.2011, 23:26
Цитата(pomogite @  28.2.2011,  20:17 Найти цитируемый пост)
 Подскажите почему так?

Потому что где анализ, отработала ли PostMessage? И если не отработала - что вернул GetLastError?

Небольшое дополнение: 90%, что это из-за User Interface Privilege Isolation (UIPI) (гугл и MSDN в помощь)

Автор: pomogite 1.3.2011, 06:21
В том то и дело что - 
Код

RegisterHotKey(Handle,25,MOD_ALT or MOD_CONTROL,8); // - Возвращает спрятанное окно (Работает)
RegisterHotKey(Handle,26,MOD_CONTROL,49); // - При нажатии ctrl +1 (Уже не воспринимает)
...
procedure TForm1.WMHotKey(var a:TWMHotKey); // Так вот обрабатываются сочетания
begin
if (a.HotKey=25) then
   begin
   ShowWindow(Handle,SW_NORMAL);
   ShowWindow(Application.Handle,SW_NORMAL);
   end;
if (a.HotKey=26) then
   begin
     PostMessage(hook, WM_keydown, vk_f1+ComboBox1.ItemIndex, 0);
   end;


Плюс ещё, при нажатии кнопки - 
Код

procedure TForm1.Button2Click(Sender: TObject);
begin
  PostMessage(hook, WM_keydown, vk_f1+ComboBox1.ItemIndex, 0);
end;

Всё нормально работает, а по сочетанию ctrl +1 нет. Запускаю от администратора. Никаких ошибок и прочего не выдаёт, вообще ничего не происходит, как будто программе неудалось зарезервировать сочетание ctrl +1...

Автор: CodeMonkey 1.3.2011, 08:36
Цитата(pomogite @  1.3.2011,  07:21 Найти цитируемый пост)
как будто программе неудалось зарезервировать сочетание ctrl +1... 


Ну таки может ты это проверишь?

Код
if not RegisterHotKey(...) then
  RaiseLastOSError;

Автор: pomogite 3.3.2011, 11:02
Пишет 'System error. code: 1409 Назначенная клавиша уже зарегистрирована' и так для ctrl+цифра/буква, так-же ctrl+alt+цифра/буква неработает, тоже самое пишет.

Автор: CodeMonkey 3.3.2011, 20:59
И какой из этого можно сделать вывод? Что какая-то другая программа уже заняла эти клавиши.

Добавлено через 3 минуты и 5 секунд
http://techie-buzz.com/softwares/display-registered-active-hotkeys-in-windows.html

Автор: pomogite 4.3.2011, 00:06
Программа пишет что ctrl+q не занята, а делфи пишет что занята...

Автор: CodeMonkey 4.3.2011, 00:15
Ну а услышать-то ты чего хочешь? Ищи кто занял кнопки. Прога не помогла - ищи ещё как-то. К Delphi только это отношения не имеет никакого.

В абстрактном вакууме на Win7 они биндятся без проблем. Что Ctrl + 1, что Ctrl + Q, что ещё кто угодно (ну, почти).

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