| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 344 人关注过本帖
标题:钩子中的WH_MOUSE问题
收藏  订阅  推荐  打印 
cumtzdhlx
Rank: 2
等级:注册会员
帖子:53
积分:662
注册:2007-7-8
钩子中的WH_MOUSE问题

目的是用钩子获得鼠标所在进程中的标题栏
Cap.h文件
#ifdef DLL1_API
#else
#define DLL1_API _declspec(dllimport)
#endif
#include <Windows.h>


DLL1_API bool CaptionHookStart(HWND hwnd);
DLL1_API bool CaptionHookEnd();
Cap.cpp文件
#define DLL1_API _declspec(dllexport)

#include "Cap.h"

HINSTANCE hinst;
HWND wndParent=NULL;
HWND wnd=NULL;

#pragma data_seg("mydata")


HWND m_hwnd=NULL;
char str[100]="wo";

#pragma data_seg()
#pragma comment(linker,"/section:mydata,RWS")

HHOOK hMouse;

BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to the DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpvReserved // reserved
)
{
hinst=hinstDLL;
return true;

}
LRESULT CALLBACK MouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
)
{
wnd=((MOUSEHOOKSTRUCT FAR *) lParam)->hwnd;
wndParent=wnd;
while(NULL!=GetParent(wnd))
{



wndParent=GetParent(wnd);
wnd=wndParent;

}

GetWindowText(wndParent,str,100);
// SetWindowText(m_hwnd,str); //这里出问题

SendMessage(m_hwnd,WM_SETTEXT,0,(LPARAM)(LPCTSTR)str);

return CallNextHookEx(hMouse,nCode,wParam,lParam) ;
}


bool CaptionHookStart(HWND hwnd)
{
m_hwnd=hwnd;
hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,hinst,0);
return true;
}

上述代码中,兰色代码段中,如果我采用注释掉的SetWindowText就得不到其余进程的标题栏,但为什么采用SendMessage就可以,非常的不解啊

搜索更多相关主题的帖子: MOUSE  钩子  API  鼠标  Cap  
2007-8-6 19:05
余来
Rank: 12Rank: 12Rank: 12
等级:版主
威望:25
帖子:954
积分:10248
注册:2006-8-13

一个进程的程序不能访问另外一个进程的数据,
你可以打开对应的进程句丙,然后再调用SetWindowText,不过这样比较麻烦,还是用消息方式比较容易


2007-8-6 22:35
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.063195 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved