全国计算机等级考试资料下载
本程序分为两个部分:
第一:dll部分。
第二:程序部分。
本程序是主要获得任意窗口的标题。
第一部分代码如下:
#include
#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();
}