gpt4 book ai didi

c++ - WinAPI - GetRawInputBuffer

转载 作者:太空宇宙 更新时间:2023-11-04 13:37:58 24 4
gpt4 key购买 nike

我对 GetRawInputBuffer 有疑问。代码未返回错误,但检索到的响应中不存在任何数据。

我已经按照这个写了代码Using GetRawInputBuffer correctly

    UINT RawInputSize;
UINT Result;
Result = GetRawInputBuffer(NULL, &(RawInputSize), sizeof(RAWINPUTHEADER));
if (Result == -1)
{
DWORD ErrorCode = GetLastError();
return;
}

UINT AllocatedBufferByteCount = RawInputSize * 16;
RAWINPUT* RawInputBuffer = reinterpret_cast<RAWINPUT*>(malloc(AllocatedBufferByteCount));

UINT AllocatedBufferByteCountTwo = AllocatedBufferByteCount;
Result = GetRawInputBuffer(RawInputBuffer, &(AllocatedBufferByteCountTwo), sizeof(RAWINPUTHEADER));
if (Result == -1)
{
DWORD ErrorCode = GetLastError();
return;
}

UINT RawInputCount = Result;

RAWINPUT* RawInput = RawInputBuffer;
for (unsigned int i = 0; i < RawInputCount; ++i)
{
switch (RawInput->header.dwType)
{
case RIM_TYPEMOUSE:
{
this->UpdateMouse(RawInput->data.mouse);
break;
}
case RIM_TYPEKEYBOARD:
{
this->UpdateKeyboard(RawInput->data.keyboard);
break;
}
}


RawInput = NEXTRAWINPUTBLOCK(RawInput);
}

DefRawInputProc(&(RawInputBuffer), RawInputCount, sizeof(RAWINPUTHEADER));

此代码在 case WM_INPUT 之外调用。 RawInputCount 始终为零。如果我在 case WM_INPUT 中使用 GetRawInputData,我会正确接收数据。

这段代码有什么问题,为什么我的结果是空的?

最佳答案

回答有点晚了,不过最近遇到了同样的问题,所以还是来回答一下吧:GetRawInputBuffer 使用 WM_INPUT 消息来获取和缓冲消息。但是,您可能会使用诸如 while(PeekMessage(&Message, NULL, 0, 0, PM_REMOVE)) 之类的方法来处理您的窗口消息,这会在发送到您的应用程序后删除所有消息。这样,输入消息将不会发送到 GetRawInputBuffer 方法,并且该方法将始终返回大小为 0。要解决此问题,您需要使用类似这样的内容作为主循环:

//Process and remove all messages before WM_INPUT
while(PeekMessage(&Message, NULL, 0, WM_INPUT - 1, PM_REMOVE))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
//Process and remove all messages after WM_INPUT
while(PeekMessage(&Message, NULL, WM_INPUT + 1, (UINT)-1, PM_REMOVE))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}

这样,WM_INPUT 消息既不会被您的应用程序处理也不会被删除,因此会发送到 GetRawInputBuffer。显然,您也可以将 PM_REMOVE 标志与 PM_NOREMOVE 交换,但这可能会导致其他问题,因此我建议使用上述方法来处理和删除除 WM_INPUT 之外的所有内容 消息。

关于c++ - WinAPI - GetRawInputBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28879021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com