本人开发的动态库dll供别人使用;
使用dll只给我传了窗口句柄 在dll需要捕捉窗体改变大小消息有没有什么办法?????????
我网上查了下 ;钩子可以实现吗?
使用dll只给我传了窗口句柄 在dll需要捕捉窗体改变大小消息有没有什么办法?????????
我网上查了下 ;钩子可以实现吗?
解决方案 »
- InvalidateRect(NULL,TRUE)设置后的无效区域不是窗口的整个客户区域大小
- 紧急求助,关于HookAPI在系统服务模式下运行的问题。
- vc中,怎么创建一个没有窗体的工程?
- 问一个比较弱的问题,m_Ftpusername是与主窗体中的一个EDIT控件相连的,但是在CDialog的对话框中我想引用一下m_Ftpusername,该怎么引用
- 是不是微软的FtpFindFirstFile函数有问题啊?论坛中搜出来的帖子,都说此函数不能够得到正确的文件时间
- 如何将DDB位图转化为DIB位图?
- 关于在MFC扩展DLL中的资源输出问题
- 请问:怎样在对话框中加入自定义的菜单资源?
- softice 原码级调试的问题
- 不是我想灌水,实在是想贴一下!顺便问一下,搞VC的有几个是学日语的?
- CSDN博客的新功能请教
- 谁有那本 c++程序设计 谭浩强?
PretranslateMessageBOOL CtestDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg == WM_SIZE)
{ }
return CDialog::PreTranslateMessage(pMsg);
}不知道可以么,推荐楼主尝试啊
1. Subclass窗口
2. 让别人再改变窗口大小Move你的窗口,或是让他通知你
WNDPROC OLDWNDPROC;
LRESULT CALLBACK MyWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_SIZE:
{
}
break; default:
return ::CallWindowProc(OLDWNDPROC, hWnd, message, wParam, lParam);
}
return 0;
}//创建窗口函数
void CreateWnd()
{
HWND hWnd=CreateWindowEx(WS_EX_TOPMOST,_T("#32770"), _T("Hello"),
WS_OVERLAPPEDWINDOW|WS_VISIBLE,0,0,200,200,NULL,NULL,NULL,NULL); //把hWnd的默认窗口过程替换为kkWndProc,返回默认函数过程的函数指针
OLDWNDPROC=(WNDPROC)SetWindowLong(hWnd,GWL_WNDPROC, (LONG) (MyWndProc));
}
来子类化窗口。这样就可以处理hWnd的所有消息了。
如果hWnd和你不是一个进程,你必须写个dll,用CreateRemoteThread的方法,把你写的dll注入到对方进程,然后再按上面说的子类化hWnd.
::MoveWindow(窗口句柄,位置...)
超Easy
1、子类化窗口。使用SetWindowLong(GWL_WNDPROC, ...)将窗口过程改为自己的窗口过程,这其中拦截WM_SIZE消息。
2、进程内消息hook,使用SetWindowsHookEx(WH_CALLWNDPROC,...)来捕获窗口消息,在其中过滤WM_SIZE.
3、(楼下补充)
{
if (nCode >= 0)
{
CWPSTRUCT* data= (CWPSTRUCT*)lParam;
if (data->message == WM_SIZE)
{
//处理message
}
}
return CallNextHookEx(IEHook, nCode, wParam, lParam);
}IEHook = ::SetWindowsHookEx(WH_CALLWNDPROC,HookIECallBack,::GetModuleHandle(NULL),0);
//释放
UnhookWindowsHookEx(IEHook);