在其他进程中SetWindowLong,导致界面不能显示?

stone4774 2009-09-16 10:37:30
我写了一个DLL,使用SetWindowsHookEx注入到了另一个进程,成功后,使用SetWindowLong替换掉了另一进程的窗口消息循环函数,我想在该窗口上创建一个子窗口,在该函数中函数如下:
LRESULT CALLBACK DesktopNewProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_CREATE_WND:
if(g_hDesktopWnd == NULL)
{
g_hDesktopWnd = ::CreateWindow("BUTTON","测试测试",WS_VISIBLE|WS_CHILD,0,0,200,200,g_hParentWnd,NULL,hDll,NULL);
}
break;

}
return CallWindowProc( lpDesktopOldProc,hwnd,uMsg,wParam,lParam );
}


执行代码之后,在另一个进程的窗口上,创建了一个BUTTON,但是,一旦我在创建该BUTTON时,为该BUTTON设置钩子,该BUTTON就不能显示了:代码如下:

LRESULT CALLBACK DesktopNewProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_CREATE_WND:
if(g_hDesktopWnd == NULL)
{
g_hDesktopWnd = ::CreateWindow("BUTTON","测试测试",WS_VISIBLE|WS_CHILD,0,0,200,200,g_hParentWnd,NULL,hDll,NULL);
//相对上面,仅增加了下面一句代码:
lpCoolDesktopOldProc = (WNDPROC)::SetWindowLong(g_hDesktopWnd, GWL_WNDPROC , (long)CoolDesktopWndProc);

}
break;

}
return CallWindowProc( lpDesktopOldProc,hwnd,uMsg,wParam,lParam );
}
CoolDesktopWndProc函数的原型如下:
LRESULT CALLBACK CoolDesktopWndProc( HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{

if(lpCoolDesktopOldProc)
return CallWindowProc(lpCoolDesktopOldProc,hwnd,msg,wParam,lParam );
else
return DefWindowProc(hwnd,msg,wParam,lParam);
}

不知道那位大大可以帮忙看一下,谢谢!
...全文
216 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
stone4774 2009-09-17
  • 打赏
  • 举报
回复
目前是还没有转发任何消息~就不显示了!
if(lpCoolDesktopOldProc)
return CallWindowProc(lpCoolDesktopOldProc,hwnd,msg,wParam,lParam );
else
return DefWindowProc(hwnd,msg,wParam,lParam);

还没有转发消息,调用是系统的原来的函数!
MoXiaoRab 2009-09-17
  • 打赏
  • 举报
回复
你需要过滤消息,如果你全部都进行消息转发就完蛋了,至少WM_PAINT不要转发,不然你的新按钮自然无法显示
stone4774 2009-09-17
  • 打赏
  • 举报
回复
我想屏蔽掉另一个进程的某个界面,使用自己的界面!所以,准备使用钩子,在另一个进程的那个HWND上创建一个子窗口,把他覆盖,这个应该是可行的!问题是,我需要控制我创建的这个窗口的行为,限于该窗口是在另一进程创建,所以,准备在本进程使用SendMessage发送自定义消息该窗口,这样该窗口就可以实现我所要求的任意功能,但这个前提是,我能够在该窗口中截取并执行消息!使用上面的钩子,导致创建的BUTTON不能显示,但是其可以收到本进程所发送的消息并执行成功!就是不知为何BUTTON不显示了?
CoderOfVC 2009-09-17
  • 打赏
  • 举报
回复
第一次听说这种想法。。。帮顶。。
MoXiaoRab 2009-09-17
  • 打赏
  • 举报
回复
奇了,你这种写法是第一次看到。你想做的是把自己创建出来的那个按钮的所有消息都拦截下来转发给原来的自己?你自己创建了一个按钮,又不让它今后得到消息?

java__king 2009-09-17
  • 打赏
  • 举报
回复
这问题好象放错地方啦。
flyfranker 2009-09-17
  • 打赏
  • 举报
回复
建议转到开发分区去提问,或者请版主帮忙把帖转过去。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧