计算机二级C 技巧:C 鼠标全局钩子实现代码计算机二级考试
文章作者 100test 发表时间 2009:06:15 10:08:25
来源 100Test.Com百考试题网
编辑特别推荐:
全国计算机等级考试(等考)指定教材
全国计算机等级考试学习视频
全国计算机等级考试网上辅导招生
全国计算机等级考试时间及科目预告
百考试题教育全国计算机等级考试在线测试平台
全国计算机等级考试资料下载
全国计算机等级考试论坛
计算机等级考试四级应用题解析汇总
本程序分为两个部分:
第一:dll部分。
第二:程序部分。
本程序是主要获得任意窗口的标题。
第一部分代码如下:
#include <.windows.h>.
#pragma data_seg("mydata")
HWND g_hPrevTarWnd = NULL.
//上次鼠标所指的窗口句柄
HWND g_hDisplayWnd = NULL.
//显示目标窗口标题编辑框的句柄
HHOOK g_hHook = NULL. //安装的鼠标勾子句柄
#pragma data_seg()
#pragma comment(linker,"/section:mydata,rws")
//实现数据共享
//钩子函数的实现:
LRESULT CALLBACK MouseProc(int nCode,WPARAM wparam,LPARAM lparam)
{
LPMOUSEHOOKSTRUCT pMouseHook =
(MOUSEHOOKSTRUCT FAR *)lparam.
if (nCode >.= 0)
{
HWND glhTargetWnd =
::WindowFromPoint(pMouseHook->.pt).
if ((glhTargetWnd != g_hPrevTarWnd) &.&.
(NULL != glhTargetWnd))
{
char szCaption[256].
GetWindowText(glhTargetWnd,szCaption,100).
//取目标窗口标题
if(IsWindow(g_hDisplayWnd))
{
SendMessage(g_hDisplayWnd,WM_SETTEXT,0, (LPARAM)(LPCTSTR)szCaption).
}
g_hPrevTarWnd=glhTargetWnd.//保存目标窗口
}
}
return CallNextHookEx(g_hHook,nCode,wparam,lparam).
//继续传递消息
}
//启动钩子
_declspec(dllexport) void StartHook(HWND hWnd)
{
g_hHook = SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("Hook"),0).
//全局钩子最后一个函数要为零
g_hDisplayWnd = hWnd.
}
//卸载钩子
_declspec(dllexport) void StopHook()
{
BOOL bResult.
bResult = UnhookWindowsHookEx(g_hHook).
if(bResult)
{
g_hPrevTarWnd = NULL.
g_hDisplayWnd = NULL.
g_hHook = NULL.
}
}
第二部分主要代码:
建立一个基于对话框的应用程序,然后在OnInitDialog函数里面添加启动钩子函数,具体代码:
// TODO: Add extra initialization here
CWnd* pWnd=GetDlgItem(IDC_HOOkEDIT).
StartHook(pWnd->.GetSafeHwnd()).
分别添加卸载钩子和取消的按钮命令,代码如下:
void CHookTestDlg::OnStophook()
{
// TODO: Add your control notification handler code here
StopHook().
GetDlgItem(IDC_STOPHOOK)->.EnableWindow(FALSE).
}
void CHookTestDlg::OnCancel()
{
// TODO: Add extra cleanup here
StopHook().
CDialog::OnCancel().
}
2009年9月全国计算机等级考试时间及科目预告
2009年NCRE考试有新变化
2009年全国计算机等级考试-大纲
全国计算机等级考试历年真题及答案
2009年上半年全国计算机等级考试试题及答案