注册鼠标全局钩子SetWindowsHookEx 注册全局钩子是病毒吗

在winxp+ vc6,sp5环境下,用SetWindowsHookEx注册鼠标钩子时,使用WH_MOUSE参数,只能捕获到本窗口的鼠标事件。
后改用WH_MOUSE_LL方可捕捉全局事件。

相关代码组织:
1.首先建立一个DLL,可以直接选择win32 dynamic-link library建立相应的工程。代码大致如下

#include "stdafx.h"
#include "msgh.h"

#pragma data_seg("ShareData")
HHOOK g_Hook= NULL;
HWNDg_Hwnd = NULL;
DWORD g_dwMsg= 0;
HINSTANCE g_hHINS = NULL;
#pragma data_seg()

//
//SECTIONS
// ShareDataREAD WRITE SHARED
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
g_hHINS =(HINSTANCE)hModule;

switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
注册鼠标全局钩子SetWindowsHookEx 注册全局钩子是病毒吗
}
returnTRUE;
}


LRESULT CALLBACK MouseProc(
intnCode,// hook code
WPARAM wParam, // messageidentifier
LPARAMlParam // mousecoordinates
)
{
// if(HC_ACTION == nCode)
{
//if (WM_MOUSEMOVE == wParam)
{
SendMessage(g_Hwnd, g_dwMsg, wParam,lParam);
//return 1;
}
}
returnCallNextHookEx(g_Hook, nCode, wParam, lParam);

}

extern "C" MSGH_API void installHook(HWND hWnd, DWORD dwMsg)
{
g_Hwnd =hWnd;
g_dwMsg =dwMsg;
g_Hook =SetWindowsHookEx(WH_MOUSE_LL, MouseProc, g_hHINS, 0);

DWORD dwE =GetLastError();

DWORD k =dwE;
}


注:
1. 此工程不需要def文件
2. 网上其它例子中, 有如下形式之一
#pragmacomment(linker,"/section:ShareData,RWS")
或在DEF文件中加入下面的内容
SECTIONS
ShareDataREAD WRITE SHARED
经过在我的WINXP,SP2+VC6,SP5测试,如果加入了上面的二者之一,那么程序在运行时,会引起系统停止响应以及程序崩溃。故不采用!!!!

接下来,在你的应用工程插入下面的代码,以安装HOOK并使其将收到的消息用指定消息ID(WM_MM)传到你的相应处理WM_MM的窗口(m_hWnd),由其进行处理。注意使用时WH_MOUSE_LL,其收到的hook消息结构是MSLLHOOKSTRUCT类型。这一点通过查阅MSDN的SetWindowsHookEx可知!
应用示例代码
typedef void (*installHook)(HWND,DWORD);
#define WM_MM (WM_USER + 2)

HINSTANCEhIN = LoadLibrary("msgh.dll");————
if (NULL ==hIN) return;
installHookkk = (installHook)GetProcAddress(hIN, "installHook");
kk(m_hWnd,WM_MM);

而处理WM_MM的示例代码节选如下
LRESULT CTestDlg::OnMm(WPARAM wParam, LPARAM lParam)
{
CStringobjTip;
MSLLHOOKSTRUCT* pp = (MSLLHOOKSTRUCT*)lParam;
objTip.Format("%d, %d", pp->pt.x,pp->pt.y);
SetWindowText(objTip);
}


2011.10.11 在VS2008上面,测试发现,要以下列的方式
#pragma data_seg("ShareData")
HHOOK g_Hook= NULL;
HWNDg_Hwnd = NULL;
DWORD g_dwMsg= 0;
HINSTANCE g_hHINS = NULL;
#pragma data_seg()
#pragmacomment(linker,"/SECTION:ShareData,RWS")
进行使用,才能进行数据共享。

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/258364.html

更多阅读

QQ怎样绑定手机 手机注册qq绑定手机吗

QQ怎样绑定手机——简介QQ绑定手机可以增加QQ的安全性,以下分享我QQ如何绑定手机的方法。QQ怎样绑定手机——工具/原料QQ号码手机号码QQ怎样绑定手机——方法/步骤QQ怎样绑定手机 1、登陆需要绑定的QQ后,在它窗口左下角点开那企鹅

skype账号怎么注册 skype账号是什么

skype账号怎么注册——简介Skype怎么注册账号,前两天刚注册用过和外地朋友视频聊天,圈里有朋友问现在还可以注册吗,所以整理下供大家参考,过程也不复杂skype账号怎么注册——工具/原料可上网的电脑skype账号怎么注册——skype账号怎么

在Ebay香港站注册能销往全球吗? ebay香港

如果我打算在 eBay 美国、英国及澳洲出售货品,我是否需要分别在这3个网站註册成為会员,并使用3个不同的会员帐号?不需要。你只要在你居住地的 eBay网站登记成為卖家,你的帐户便可以在全球 eBay网站通用。所以,作為中国卖家,你只需要在eB

国家注册会计师考试好考吗 国家一级注册会计师

全国最难的考试。发点经验给你(本人原创的。)能考,一门一门的准备,今年才考完,现在是备考2010年注册会计师的最好时间。我跟你说说所需要的底子,可能会对你好一些。会计,需要有中级会计实务

声明:《注册鼠标全局钩子SetWindowsHookEx 注册全局钩子是病毒吗》为网友花落花葬花作土分享!如侵犯到您的合法权益请联系我们删除