Проблема с регистрацией горячих клавиш
|
|
Понедельник, 17 Мая 2021 г. 23:17
+ в цитатник
BlackSun: Win10. В проге 13 действий, подвешенных на HotKey. Регистрирую так (код упрощён):
Private Sub Form_Load()
Dim i as Long, lRet as Long, lMod as Long, lVK as Long
For i = 0 To UBound(aHotKey)
lRet = RegisterHotKey(Me.hwnd, i, lMod, lVK)
Next
End Sub
Освобождаю так:
Private Sub Form_Unload(Cancel As Integer)
Dim hMainWnd As Long, lRet as Long
hMainWnd = Me.hwnd
For i = 0 To UBound(aHotKey)
lRet = UnregisterHotKey(hMainWnd, i)
Sleep 300 'задержка для завершения работы UnregisterHotKey
Next
End Sub
Проблема: иногда при старте проги шесть первых записей успешно регистрируются, остальные(хвост) регистрируются с ошибкой "клавиши уже зарегистрированы", иногда регистрация проходит успешно для всех записей aHotKey - при этом существуют только эти два исхода работы программы. Делал сдвиг массива на 1 запись - та же песня, 6 первых успешны, остальные с возможным Error. Т.к. работа кода не постоянна, думаю что Винда делает фокусы. Похоже, что первый старт проги после загрузки Винды всегда успешен. Последующие запуски могут привести к ошибкам (или нет). Значит, проблема в UnregisterHotKey при первой сессии проги. Сначала думал, что затирается Me.hwnd и работа UnregisterHotKey в фоновом режиме даёт такой эффект. Сделал так: hMainWnd = Me.hwnd. Не помогло (да и не должно, когда подумал ;)). Затем повесил выгрузку окна на таймер после проходки по UnregisterHotKey (чтобы окно существовало) и дал 2-3 сек на работу UnregisterHotKey. Не помогло. Похоже, тут надо было оставить в коде так:
lRet = UnregisterHotKey(Me.hwnd, i)
Вчера морочился, не помню тонкостей.
Наконец, поставил Sleep 300. Не помогло.
Ошибок UnregisterHotKey не выдаёт. Не понимаю, в чём проблема...
Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal ID As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal ID As Long) As Long
https://forum.sources.ru/index.php?showtopic=421463&view=findpost&p=3847523
Метки:
Visual Basic:
Общие вопросы
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-