C++ GetKeyState不';不能在Windows 2000(C+;+;)中工作

C++ GetKeyState不';不能在Windows 2000(C+;+;)中工作,c++,windows,directx,mouse,C++,Windows,Directx,Mouse,我刚刚在Windows2000SP4系统上测试了我的DirectX游戏,但它不会收到任何鼠标点击 这是我检查鼠标点击的方式: unsigned int mButtons = 0; if (GetKeyState(VK_LBUTTON) < 0) mButtons |= HIDBoss::MOUSE_LEFT; if (GetKeyState(VK_RBUTTON) < 0) mButtons |= HIDBoss::MOUSE_RIGHT; if (G

我刚刚在Windows2000SP4系统上测试了我的DirectX游戏,但它不会收到任何鼠标点击

这是我检查鼠标点击的方式:

    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;
unsigned int mButtons=0;
if(GetKeyState(VK_LBUTTON)<0)mButtons |=HIDBoss::鼠标左键;
if(GetKeyState(VK_RBUTTON)<0)mButtons |=HIDBoss::鼠标右键;
如果(GetKeyState(VK_MBUTTON)<0)mButtons |=HIDBoss::鼠标中键;
if(GetKeyState(VK_XBUTTON1)<0)mButtons |=HIDBoss::MOUSE_4;
如果(GetKeyState(VK_XBUTTON2)<0)mButtons |=HIDBoss::MOUSE_5;
等等

此代码在Windows 7和XP 32/64位上运行良好

如果我改用OIS库(它使用DirectX输入),问题已经解决了,但是它包含一些bug,所以我宁愿避免它

有人能提出为什么GetKeyState不能在W2K上工作吗?这可能是因为系统在过去几年中没有通过Windows Update进行更新吗

谢谢你抽出时间


比尔

我不确定为什么它不起作用,但我建议改用它

编辑:回答您的评论。这只是一个建议,但同样很容易通过调用以下命令来确定按钮是否互换:

GetSystemMetrics(SM_SWAPBUTTON)
您的大问题来自这样一个事实,即GetKeyState不应该只返回鼠标按钮和键盘按钮的值。事实上,它在某些操作系统中确实有效,这并不是所有操作系统都应该依赖的

应用程序在中调用GetKeyState 对键盘输入消息的响应。 此函数用于检索 输入消息被激活时的键 生成


值得注意的是,它特别提到调用它以响应键盘输入消息(即WM_键[UP/DOWN])。同样,也没有提到这对老鼠有效。因此,您最好只使用GetAsyncKeyState…

您能详细说明一下吗?文档说它返回的是物理按钮事件,而不是逻辑上的“映射”事件。有没有一个很好的理由让我“迷惑”那些习惯于点击另一个方向的用户?当然,我会尝试,如果它真的有效,那就是一个足够好的理由!但我还有什么需要注意的吗?谢谢