Что нового

[Мышь, клавиатура] Не срабатывают горячие клавиши

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Не уследил, какие именно изменения произошли в системе, но перестали срабатывать горячие клавиши, созданные скриптом AutoIt...
Уверен, что AutoIt непричем, так как этот скрипт нормально работает на другом компьютере...
Подскажите, пожалуйста, какие системные компоненты могли нарушить работу горячих клавиш?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 165
Репутация
2 329
snoitaleR [?]
перестали срабатывать горячие клавиши, созданные скриптом AutoIt
Возможно в системе запущено приложение, которое и перехватывает эти клавиши?
А пример всё же можно?
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
CreatoR
Код:
HotKeySet("#q","DATETIME")
 HotKeySet("#!f","FAR")
 HotKeySet("#x","HIBERNATE")
 HotKeySet("#c","HIBERNATE30")
 HotKeySet("#z","LOCK")
 HotKeySet("#d","NOTE")
 HotKeySet("#e","VIEWEVENT")

Я делал перезагрузку операционной системы, но скрипт все равно не установил горячие клавиши...
Например, [WIN]+[Q] просто выводит в редактор символ "Q" вместо запуска функции DATETIME...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 703
Значит какие-то программы уже используют эти горячие клавиши. Попробуй это, 100% должно работать, и плевать на другие программы.

Код:
#Include <HotKey.au3>
#Include <vkConstants.au3>

;HotKeySet("#q", "DATETIME")
;HotKeySet("#!f", "FAR")
;HotKeySet("#x", "HIBERNATE")
;HotKeySet("#c", "HIBERNATE30")
;HotKeySet("#z", "LOCK")
;HotKeySet("#d", "NOTE")
;HotKeySet("#e", "VIEWEVENT")

_HotKeyAssign(BitOR($CK_WIN, $VK_Q), 'DATETIME')
_HotKeyAssign(BitOR($CK_WIN, $CK_ALT, $VK_F), 'FAR')
_HotKeyAssign(BitOR($CK_WIN, $VK_X), 'HIBERNATE')
_HotKeyAssign(BitOR($CK_WIN, $VK_C), 'HIBERNATE30')
_HotKeyAssign(BitOR($CK_WIN, $VK_Z), 'LOCK')
_HotKeyAssign(BitOR($CK_WIN, $VK_D), 'NOTE')
_HotKeyAssign(BitOR($CK_WIN, $VK_E), 'VIEWEVENT')


HotKey.au3, vkConstants.au3
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Yashied
Спасибо, за альтернативный вариант...
Проверить смогу только в понедельник, за одно и тему закрою...
А пока +1...
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Yashied
По правде говоря, удивлен...
Но - работает...
Причина осталась неизвестной...
Но у меня еще будет время ее найти...
До следующей переустановки WINDOWS... :smile:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 703
А причина может быть только одна - сама система или другие программы уже используют эти горячие клавиши. Для моей UDF это не важно, т.к работает совершенно по другому принципу.
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Yashied
Мне кажется, что я нашел причину, хотя объяснить ее не могу...
Код:
$POL="HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies"
RegWrite($POL&"\Explorer","NoWinKeys","REG_DWORD","1")

Как только я добавил данный запрет в реестр, стандартная функция HotKeySet() стала нормально работать наравне с _HotKeyAssign()...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 703
Вот видишь, _HotKeyAssign() все по барабану. Классная однако функция получилась.

:smile:
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Интересный момент...
Перед тем как горячие клавиши перестали функционировать, я добавил последнюю горячую клавишу:
Код:
HotKeySet("#e","VIEWEVENT")

А комбинация [WIN]+[E] как раз является системной...
Возможно ли, что конфликт этой горячей клавиши с системной комбинацией повлиял на работу всех комбинаций, установленных в скрипте?


Добавлено:
Сообщение автоматически объединено:

Пришлось снять с данной темы пометку "Тема решена"...
Причина в том, что в WIN7 стандартная функция HotKeySet() не смогла зарегистрировать горячие клавиши...
Пользовался для проверки следующим скриптом:
Код:
; НАЧАЛО

 HotKeySet("+!d","DATETIME")

 while true
  Sleep(100)
 wend

 Func DATETIME()
  ClipPut(@YEAR&"-"&@MON&"-"&@MDAY&"-"&@HOUR&"-"&@MIN&"-"&@SEC)
  MsgBox(0,"Диагностика","Дата и время в буфере обмена")
 EndFunc

; КОНЕЦ

Горячих клавиш перебрал достаточно много...
Вряд ли все они заняты другими программами...
Может, OUTPOST не позволяет AUTOIT сгенерировать событие...
Прошу помощи в данном исследовании...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 703
Вот это у тебя будет работать? В принципе, это тоже самое, что и HotKeySet().

Код:
$VK_D = 0x44

$MOD_ALT = 0x0001
$MOD_CONTROL = 0x0002
$MOD_SHIFT = 0x0004
$MOD_WIN = 0x0008

$hWnd = GUICreate('')
GUIRegisterMsg(0x0312, "MY_WM_HOTKEY") ; WM_HOTKEY

; Set ALT-SHIT-D
DllCall('user32.dll', 'int', 'RegisterHotKey', 'hwnd', $hWnd, 'int', '0', 'uint', BitOR($MOD_ALT, $MOD_SHIFT), 'uint', $VK_D)

While 1
	Sleep(100)
WEnd

Func MY_WM_HOTKEY($hWnd, $Msg, $wParam, $lParam)
	MsgBox(0, '', 'You pressed ALT-SHIFT-D')
EndFunc   ;==>MY_WM_HOTKEY
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Yashied
Твой скрипт опять работает...
Стандартная функция - нет...
Проверял и на своей WIN7, и на посторонней (которая не страдала от последствий научных экспериментов :smile:)...

В чем отличие твоего скрипта от стандартной функции?
Может в стандартной функции бага?
Но тогда почему никто не жалуется?

И еще важная информация:
на посторонней WIN7 проверил только твой скрипт - он работает...
Не додумался еще и стандартную функцию проверить... :(
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Yashied
Проверил мой скрипт на посторонней WIN7 - работает...
Получается, виновата моя WIN7 или комплект программ...
Смущает только одно - любая комбинация клавиш игнорируется...
 

Guezt

Продвинутый
Сообщения
335
Репутация
81
Код:
; НАЧАЛО

 HotKeySet("+!d","DATETIME")
 HotKeySet("+!в","DATETIME")

 while true
  Sleep(100)
 wend

 Func DATETIME()
  ClipPut(@YEAR&"-"&@MON&"-"&@MDAY&"-"&@HOUR&"-"&@MIN&"-"&@SEC)
  MsgBox(0,"Диагностика","Дата и время в буфере обмена")
 EndFunc

; КОНЕЦ


я просто дублирую сочетания клавиш RU и EN шрифтами на одну функцию и сразу все хоткеи работают у меня во всех системах проверил даже в WIN 7 когда было только в EN сочетание то не работало... попробуй :smile:
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Guezt
Очень возможно...
Я в WIN7 забыл включить английский по умолчанию...
Хотя в WINXP всегда включал...
Проверить пока возможности нет...
Это теперь поздно вечером смогу проверить...

Попробовал в WINXP - действительно, такой эффект проявляется...
То есть, функциональность HotKeySet зависит от раскладки клавиатуры по умолчанию...

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

Я предлагаю оформить это явление как багу...
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
Guezt
Твоя ситуация подтвердилась на моей WIN7...
Воспроизводимость - 100%...
Я даже искать бы в этом направлении не стал...
Спасибо...
+1...

Прошу администрацию форума и модераторов высказаться в этой теме, чтобы не создавать "курьезную" тему :smile: в разделе "Баг-репорты и запросы на новые функции"...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 165
Репутация
2 329
snoitaleR [?]
Прошу администрацию форума и модераторов высказаться в этой теме, чтобы не создавать "курьезную" тему
в разделе "Баг-репорты и запросы на новые функции"...
Если это и бага, то системы, полагаю таким же будет и ответ разработчиков.
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
CreatoR
А почему вариант, предложенный Yashied в ответе №10, работает при любой раскладке клавиатуры по умолчанию?
Мне кажется, разработчики, использующие (вероятно) только одну раскладку клавиатуры, не догадываются об этой проблеме, которая возникает при использовании нескольких раскладок клавиатуры...
Есть предложение составить баг-репорт по функции HotKeySet()...
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
963
Guezt сказал(а):
Попробовал в WINXP - действительно, такой эффект проявляется...
То есть, функциональность HotKeySet зависит от раскладки клавиатуры по умолчанию...
Да, этот факт известен давно, HotKeySet в WinXP зависима от раскладки!
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 165
Репутация
2 329
snoitaleR [?]
Есть предложение составить баг-репорт по функции HotKeySet()
Составь в соответствующем разделе, и укажи как воспроизвести багу.
 
Верх