win32api.GetAsyncKeyState (0x01) возвращает -32768 вместо 1 при нажатии - PullRequest
0 голосов
/ 21 мая 2019

Я попытался использовать win32api сегодня, и он сказал только, что GetAsyncKeyState вернет 1, если клавиша нажата, или 0, если нет.

Но когда я запустил его левой кнопкой мыши, он вернул значение -32768? Я узнал об этом, напечатав указанную команду. Это ничего не нарушает, потому что я могу просто сказать, что если левая мышь == - 32768, но это все равно немного смутило меня. Не могли бы вы сказать мне, почему?

Ответы [ 2 ]

2 голосов
/ 21 мая 2019

Документация гласит:

Если установлен старший значащий бит, клавиша нажата.

Наиболее значимым битом в целом числе со знаком является знаковый бит. Таким образом, вы можете прочитать это как утверждение, что функция возвращает отрицательное значение, если клавиша не нажата.

Вы не должны проверять == -32768, а скорее проверять < 0.

0 голосов
/ 22 мая 2019

Как указано в документации :

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

-32768 равен 0x8000, что означает, что установлен старший бит.Это соответствует вашему описанию «я запустил его левой кнопкой мыши».Вы держали кнопку нажатой, и это то, о чем сообщил GetAsyncKeyState().Все, что вы читаете, говорит, что «GetAsyncKeyState вернет 1, если клавиша нажата, или 0, если нет» неправильно.

...