Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.196.211] |
|
Сообщ.
#1
,
|
|
|
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 |