
我希望鼠标光标分别locking在X或Y轴的指定点上。 我设法用低级别的鼠标proc和键盘proc来完成这个任务(需要键盘proc作为用户希望鼠标跟随的运动的input – 垂直或水平)。 然而,我的问题是,在locking的运动,与F7水平 – 当我点击鼠标button或使用鼠标滚轮,locking的运动释放一些奇怪的原因,我无法理解,我显然不希望它将被释放,除非用户这么说(即按F6)。 这里是你可以检查它的代码,看看我正在谈论的问题:
#define _WIN32_WINNT 0x0501 #include <iostream> #include <windows.h> using namespace std; bool block = false; POINT p; HHOOK hHook,hHook2; unsigned int status = 0; LRESulT CALLBACK LowLevelKeyboardProc(int nCode,WParaM wParam,LParaM lParam) { KBDLLHOOKSTRUCT key; memcpy(&key,(voID*)lParam,sizeof(KBDLLHOOKSTRUCT)); if( wParam == WM_KEYDOWN) { if(key.vkCode == VK_F7) { //Horizontal only if (GetCursorPos(&p)) status = 1; } else if(key.vkCode == VK_F8) { //Vertical only if (GetCursorPos(&p)) status = 2; } else if(key.vkCode == VK_F6) { //normal status = 0; } } return CallNextHookEx(hHook,nCode,wParam,lParam); } LRESulT CALLBACK LowLevelMouseProc(int nCode,LParaM lParam) { MsllHOOKSTRUCT key; memcpy(&key,sizeof(MsllHOOKSTRUCT)); if(wParam == WM_MOUSEMOVE) { if(status == 1) { SetCursorPos(key.pt.x,py); } else if(status == 2) { SetCursorPos(px,key.pt.y); } else { return CallNextHookEx(hHook2,lParam); } } else { return CallNextHookEx(hHook2,lParam); } } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdline,int nCmdshow) { cout<<"F7 to allow Horizontal moving ONLY"<<endl; cout<<"F8 to allow Vertical moving ONLY"<<endl; cout<<"F6 to move freely"<<endl; hHook = SetwindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,hInstance,0); hHook2 = SetwindowsHookEx(WH_MOUSE_LL,LowLevelMouseProc,0); MSG msg; while(GetMessage(&msg,NulL,0)) { TranslateMessage(&msg); dispatchMessage(&msg); } return msg.wParam; }
如何获得窗口蝙蝠整个svn提交信息?
禁用在linux和windows中运行程序
如何使用C#禁用鼠标点击事件系统?
在windows上,如何安装最低级别的全局键盘钩子?
64位DLL入口点覆盖
你可能在你的应用程序中有一个低级别的钩子,比我认为的200ms需要更长的时间,或者你在调试器中设置了一个断点; 这将导致windows注销你的窗口钩子。
总结以上是内存溢出为你收集整理的鼠标locking水平/垂直移动全部内容,希望文章能够帮你解决鼠标locking水平/垂直移动所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)