GetKeyState не работает в Windows 2000 (C ++) - PullRequest
0 голосов
/ 19 октября 2010

Я только что протестировал свою игру DirectX в системе Windows 2000 SP4, но она не получит любых щелчков мышью!

Вот как я проверяю щелчки мышью:

    unsigned int mButtons = 0;
    if (GetKeyState(VK_LBUTTON) < 0) mButtons |= HIDBoss::MOUSE_LEFT;
    if (GetKeyState(VK_RBUTTON) < 0) mButtons |= HIDBoss::MOUSE_RIGHT;
    if (GetKeyState(VK_MBUTTON) < 0) mButtons |= HIDBoss::MOUSE_MIDDLE;
    if (GetKeyState(VK_XBUTTON1) < 0) mButtons |= HIDBoss::MOUSE_4;
    if (GetKeyState(VK_XBUTTON2) < 0) mButtons |= HIDBoss::MOUSE_5;

и т.д ...

Этот код прекрасно работает в Windows 7 и XP 32 / 64bit.

Проблема исправлена ​​, если я использую OIS библиотека, которая использует входные данные DirectX, но содержит несколько ошибок, поэтому я бы предпочел ее избежать.

Кто-нибудь может подсказать, почему GetKeyState не будет работать на W2K?Может ли это быть из-за того, что система не обновлялась - через Центр обновления Windows - в течение последних двух лет? ..

Спасибо за потраченное время,

Билл

1 Ответ

1 голос
/ 19 октября 2010

Я не уверен, почему это не работает, но я бы рекомендовал использовать GetAsyncKeyState .

Редактировать : В ответ на ваш комментарий.Это всего лишь предложение, но его также довольно легко выяснить, если кнопки поменялись местами с помощью вызова:

GetSystemMetrics(SM_SWAPBUTTON)

Ваша большая проблема связана с тем, что GetKeyState не должен возвращать значение для мышикнопки только кнопки клавиатуры.тот факт, что он работает в некоторых ОС, - это не то, на что вы должны полагаться во всех ОС.

Приложение вызывает GetKeyState в ответ на сообщение ввода с клавиатуры.Эта функция извлекает состояние клавиши, когда было сгенерировано входное сообщение.

Стоит отметить, что она особо упоминает о вызове ее в ответ на сообщение ввода с клавиатуры (т.е. WM_KEY [UP / DOWN]).Точно так же нет упоминания, что это должно работать для мышей.Таким образом, вам действительно лучше использовать GetAsyncKeyState ...

...