我写了一个在游戏中渲染叠加的程序,显示了一些额外的信息。我可以通过使用GetKeyState来检测键盘和一些鼠标按键,但是没有用于向上和向下滚动的虚拟键代码,我也想使用它。
我知道滚动的处理方式更多的是事件,而不是按键,但这并没有真正帮助。 那么我的问题有什么解决方案吗?
我想到的事情:
我正在使用Visual Studio 2013 Express [C ++]
答案 0 :(得分:1)
检查SetWindowsHookEx: http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx 特别是WH_MOUSE。
答案 1 :(得分:1)
我使用以下代码解决了这个问题。
LRESULT CALLBACK mouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
using namespace MouseLog;
MSLLHOOKSTRUCT * pMouseStruct = (MSLLHOOKSTRUCT *)lParam;
if (pMouseStruct != NULL)
{
if (wParam == WM_MOUSEWHEEL)
{
if (HIWORD(pMouseStruct->mouseData) == 120) MScrollUp = 1;
else MScrollDown = 1;
}
if (wParam == WM_MBUTTONDOWN)
MScrollBtn = 1;
//printf("Mouse position X = %d Mouse Position Y = %d\n", pMouseStruct->pt.x, pMouseStruct->pt.y);
}
return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
}
DWORD WINAPI MouseLogger(LPVOID lpParm)
{
HINSTANCE hInstance = GetModuleHandle(NULL);
hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, mouseProc, hInstance, NULL);
MSG message;
while (GetMessage(&message, NULL, 0, 0)) {
TranslateMessage(&message);
DispatchMessage(&message);
}
UnhookWindowsHookEx(hMouseHook);
return 0;
}
要启动MouseLogger,请使用CreateThread()。
答案 2 :(得分:0)
我知道没有鼠标滚动的关键状态,但还有其他类似的东西 WM_MOUSEWHEEL
如果这回答了您的问题,您可能需要查看此
http://msdn.microsoft.com/en-us/library/windows/desktop/ms645617(v=vs.85).aspx
否则,如果这不帮助你,我很乐意帮助你,如果这个剂量帮助
答案 3 :(得分:0)
您可以使用旧版游戏API DirectInput。我知道当你使用DISCL_BACKGROUND标志时窗口在后台时肯定会有效。