关于如何在本程序中屏蔽鼠标的问题,求解答
在程序的某个步骤中,需要等待一段时间进行读取与下载,在此期间,我想要令鼠标在该程序内的点击无效,从网上找到全局hook函数,但是使用之后,变成了全局的鼠标不响应,无法细分是否是在该程序内时进行屏蔽,该如何进行解决?
以下是hook的主要代码
#pragma data_seg("MySec")HWND g_hWnd = NULL;#pragma data_seg()#pragma comment(linker,"/section:MySec,RWS")#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifHHOOK g_hMouse = NULL;HHOOK g_hKeyboard = NULL;LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam ){ return 1;}LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam ){ if (VK_F2 == wParam) { SendMessage(g_hWnd,WM_CLOSE,0,0); UnhookWindowsHookEx(g_hMouse); UnhookWindowsHookEx(g_hKeyboard); } return 1;}void SetHook(HWND hwnd){ g_hWnd = hwnd; g_hMouse = SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("Hook"),0);// g_hKeyboard = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook"),0);}void StopHook(){ if(g_hMouse != NULL) UnhookWindowsHookEx(g_hMouse); g_hMouse = NULL; if(g_hKeyboard!=NULL) UnhookWindowsHookEx(g_hKeyboard); g_hKeyboard = NULL;}BOOL CMainFrame::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { // TODO: Add your message handler code here and/or call default if (m_bBusy) { if(IsCursorIn()) { SetHook(m_hWnd); ::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT)); return TRUE; } else { StopHook(); return CMDIFrameWnd::OnSetCursor(pWnd, nHitTest, message); } } else { StopHook(); } return CMDIFrameWnd::OnSetCursor(pWnd, nHitTest, message);}bool CMainFrame::IsCursorIn(){ CRect rect; GetWindowRect(rect); CPoint pt; GetCursorPos(&pt); if (PtInRect(rect,pt)) { return true; } else return false;}