На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
  
> Проблема с регистрацией горячих клавиш
    Win10. В проге 13 действий, подвешенных на HotKey. Регистрирую так (код упрощён):

    ExpandedWrap disabled
      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


    Освобождаю так:

    ExpandedWrap disabled
      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 не выдаёт. Не понимаю, в чём проблема...

    ExpandedWrap disabled
      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
    Сообщение отредактировано: BlackSun -
    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0182 ]   [ 15 queries used ]   [ Generated: 29.07.21, 21:37 GMT ]