我写了一个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);
}不知道那位大大可以帮忙看一下,谢谢!
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);
}不知道那位大大可以帮忙看一下,谢谢!
解决方案 »
- CListCtrl控件如何实现合并单元格
- 异常问题:Windows 已在 XXXX.exe 中触发一个断点
- MPEG-7 图像数据哪里能下载到??
- Create或者CreateEx参数怎么带
- 求VS2005的product key
- 一个设计为service的COM,如何在这个service启动的时候,自动运行COM中的一个方法?
- Null pointer in cvGetMat,line 2376
- 如何判断两个文件是不是相同的?(并不只限于txt格式,包括 exe 等其他格式)
- 请问哪里有介绍VC界面设计和程序的网站
- CTime CStartTime = CTime::GetCurrentTime(); 这个CStartTime减去一年是怎样操作呀?
- DATAGRID的问题
- 【求助】C语言_头引用文件无效
if(lpCoolDesktopOldProc)
return CallWindowProc(lpCoolDesktopOldProc,hwnd,msg,wParam,lParam );
else
return DefWindowProc(hwnd,msg,wParam,lParam); 还没有转发消息,调用是系统的原来的函数!