首页
社区
课程
招聘
[求助]关于WIN7 64位下的CallWindowProc()
发表于: 2014-2-8 05:04 5664

[求助]关于WIN7 64位下的CallWindowProc()

2014-2-8 05:04
5664
在写一个捕获目标窗口消息的程序。

思路:
     向目标窗口注入DLL,然后使用SetWindowLong()修改窗口过程函数。。

问题:
    在WP下, 能正常捕获。。 但是WIN 7 64位下,只能捕获部分消息。(WM_COMMAND消息(菜单)可以捕获),BUTTON 消息不能捕获。 WM_KEDOWND 消息可以捕获。

还是贴下代码。。求各位大神,指点。
LRESULT CALLBACK MyWindowProc(
                            HWND hwnd,      // handle to window
                            UINT uMsg,      // message identifier
                            WPARAM wParam,  // first message parameter
                            LPARAM lParam   // second message parameter
)
{
  if (uMsg == WM_KEYDOWN)
  {
    int nVirtKey = (int)wParam;
    if (nVirtKey == VK_HOME)
    {
        ::MessageBox(NULL, "响应了HOME消息", NULL, MB_OK);
      return FALSE;
    }
  }
  return CallWindowProc(g_OldProc,hwnd, uMsg, wParam, lParam);
}


//下面是DLL中调用SetWindowLong()代码

HWND hCalc = ::FindWindow(NULL, "计算器");
      g_hCalc = hCalc;

      g_OldProc = (FUNTYPE)::SetWindowLongPtr(hCalc, 
          GWLP_WNDPROC, 
          (LONG)MyWindowProc);



      if (g_OldProc == 0)
      { 
          ::MessageBox(NULL, "修改过程函数失败", NULL, MB_OK);
      }


使用的是计算器做的实验!

请大家指明下,实在是想不明白为什么呢!!!

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 503
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
系统环境是WIN 7 64位!
2014-2-8 05:15
0
雪    币: 209
活跃值: (138)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你把xp上的计算器程序拿到win7上去做同样的测试,得出的结果才能说明问题。
2014-2-8 08:39
0
雪    币: 319
活跃值: (951)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
看你的代码,查找计算器的窗口并设置消息处理过程在自己的进程空间,这样写应该是无效的。参考一下GetClassLong/SetClassLong函数看看。
2014-2-8 09:39
0
雪    币: 503
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
DLL是注入过的
2014-2-8 13:27
0
游客
登录 | 注册 方可回帖
返回
//