VBA F9 Кнопка распознана Левая кнопка мыши не распознана - PullRequest
0 голосов
/ 15 марта 2019

Код VBA «WaitUntilF9Key» обнаруживает нажатие клавиши «F9» при ее нажатии, а не до тех пор, пока она не будет нажата. «WaitUntilLButton» срабатывает сразу, а не при нажатии левой кнопки клавиатуры. С чего бы это? Tkx

Option Compare Database
Option Explicit
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Public Const VK_LBUTTON = &H1
Public Const VK_RBUTTON = &H2
Private Const VK_F9 = &H78

Sub WaitUntilF9Key()
    Do Until GetAsyncKeyState(VK_F9)
        DoEvents
    Loop
    MsgBox ("Ta Da")
End Sub

Sub WaitUntilLButton()
    Do Until GetAsyncKeyState(VK_LBUTTON)
        DoEvents
    Loop
    MsgBox ("Ta Da")
End Sub

1 Ответ

2 голосов
/ 15 марта 2019

GetAsyncKeyState возвращает байт, а не логическое значение.Вам нужно «И» это с битом, который вы ищете, чтобы получить значимый результат.

В вашем случае вам нужен бит & H8000.Из документов Microsoft для GetAsyncKeyState:

Если установлен бит & H8000 возвращаемого значения, клавиша была нажата как минимум один раз, так как последний раз поток вызывал GetAsyncKeyState

Sub WaitUntilF9Key()
    Do Until GetAsyncKeyState(VK_F9) And &H8000
        DoEvents
    Loop
    MsgBox ("Ta Da")
End Sub

Sub WaitUntilLButton()
    Do Until GetAsyncKeyState(VK_LBUTTON) And &H8000
        DoEvents
    Loop
    MsgBox ("Ta Da")
End Sub

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

...