标题:钩子中的WH_MOUSE问题
只看楼主
cumtzdhlx
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-7-8
 问题点数:0 回复次数:1 
钩子中的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-08-06 19:05
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
得分:0 

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


2007-08-06 22:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-160774-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042491 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved