HHOOK hMouseHook=NULL;
HINSTANCE MyInst=NULL;
..........
MyInst=::AfxGetApp()->m_hInstance; //我自己写的,不知对不对!
hMouseHook= SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseProc,MyInst, NULL);
结果不是全局钩子,只有当鼠标位于程序窗口内时,MouseProc函数才响应.这是为什么?(这些代码是在一个具有全局鼠标钩子功能的程序中拷贝过来的)
谢谢
HINSTANCE MyInst=NULL;
..........
MyInst=::AfxGetApp()->m_hInstance; //我自己写的,不知对不对!
hMouseHook= SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseProc,MyInst, NULL);
结果不是全局钩子,只有当鼠标位于程序窗口内时,MouseProc函数才响应.这是为什么?(这些代码是在一个具有全局鼠标钩子功能的程序中拷贝过来的)
谢谢
HHOOK hMouseHook=NULL;
HINSTANCE MyInst=NULL;
#pragma data_seg()
HHOOK hMouseHook=NULL;
HINSTANCE MyInst=NULL;
#pragma data_seg()
http://www.codeguru.com/system/Hookwww.html
#pragma data_seg("Shared")
HHOOK hMouseHook=NULL;
HINSTANCE MyInst=NULL;
#pragma data_seg()
然后在.DEF文件中导出
保护起来。然后在钩子函数里判断是不是鼠标消息就可以了。
HHOOK hMouseHook=NULL;
HINSTANCE MyInst=NULL;
#pragma data_seg()
// Instruct the linker to make the Shared section
// readable, writtable and shared
#pragma comment(linker, "/section:Shared,rws")
我的程序:取色工具
我现在正在完成第一步,就是作一个全局钩子捕获鼠标消息,即鼠标每移动一下,都进行一次取色,但是就这个第一步却进展不下去,具体情况如下:
dll为MFC规则DLL,然后将下面的代码都写在了dll的cpp文件中了,exe为对话框形式:
#pragma data_seg("Shared")
HHOOK hMouseHook=NULL;
HINSTANCE MyInst=NULL;
#pragma data_seg()
// Instruct the linker to make the Shared section
// readable, writtable and shared
#pragma comment(linker, "/section:Shared,rws")
..........
MyInst=::AfxGetApp()->m_hInstance; hMouseHook= SetWindowsHookEx(WH_MOUSE, (HOOKPROC)MouseProc,MyInst, NULL);但是运行后,只有当鼠标在程序窗口内时,MouseProc函数才响应.
HHOOK hHook=NULL;
HINSTANCE MyInst=NULL;
LRESULT CALLBACK JournalProc(int code, WPARAM wParam, LPARAM lParam)
{
HDC hDC;
POINT Pos;
char buf[33];
COLORREF Color; EVENTMSG* pMsg = (EVENTMSG*)lParam;
if (code==HC_ACTION && pMsg->message==
WM_MOUSEMOVE) {
GetCursorPos(&Pos);
hDC = GetWindowDC(NULL);
Color = GetPixel(hDC, Pos.x, Pos.y);
ReleaseDC(NULL, hDC);
wsprintf(buf, "R=%d G=%d B=%d", (int)
GetRValue(Color), (int)GetGValue(
Color), (int)GetBValue(Color));
SetWindowText(hWnd, buf);
}
return CallNextHookEx(hHook, code, wParam, lParam);
}__declspec(dllexport) void EnableHook(HWND hwnd)
{
hWnd = hwnd;
if (hHook != NULL) {
MyInst = ::AfxGetApp()->m_hInstance;
hHook = SetWindowsHookEx(WH_JOURNALRECORD,
(HOOKPROC)JournalProc, MyInst, NULL);
}
}