-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


Проблема с регистрацией горячих клавиш

Понедельник, 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

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку