首页 新闻 会员 周边

C++全局钩子里添加了通过控件句柄获取控件标题的代码,在获取时程序死机

0
悬赏园豆:20 [已解决问题] 解决于 2013-05-18 14:03

我添加了一段通过某一控件的句柄,获取应用程序中某一窗口中的该控件标题,可是当程序运行到获取标题时程序就死机了,而且貌似不能取到控件的标题,请大家帮忙看看
代码如下:

LRESULT CALLBACK ShellHookProc(int nCode,WPARAM wParam,LPARAM lParam)
{
    if (nCode>=0)// Windows Created
    {
        const int MyMaxParentWinCount = 2;
        // 父窗口类名数组
        char *A_szClassName[MyMaxParentWinCount] =
        {
            "#32770","Button"
        };
        // 父窗口标题数组
        char *A_szWinName[MyMaxParentWinCount] =
        {
            "询问","是(&Y)"
        };

        // 首先求得顶级父窗口
        HWND hLastWins =FindWindow(A_szClassName[0], A_szWinName[0]);
        HWND hLastWinss = FindWindowEx(hLastWins, 0,
            "Static", NULL);
        char title[200];
        GetWindowText(hLastWinss, title, 200);//运行到这里死机
        char *t=title;
        char *pattern="小于成本";
        char *patter="小于最低销售价";
        char *isMatch1= strstr(t,pattern);
        char *isMatch2= strstr(t,patter); 
        if(title!=NULL)
        {
            if (isMatch1!=NULL||isMatch2!=NULL)
            {
                /*MessageBox((HWND)isMatch1,NULL,NULL,NULL);*/

                // 逐次用FindWindowEx函数求出各级子窗口
                for(int i=1; i<MyMaxParentWinCount; i++)
                {
                    hLastWins = FindWindowEx(hLastWins, 0,
                        "Button", "是(&Y)");
                }        
                EnableWindow(hLastWins, false);
            }            
        }
    }

    return CallNextHookEx(g_hHookShell,nCode,wParam,lParam);
}

BOOL CQJHook1::SetHook()
{

    g_hHookShell = SetWindowsHookEx(WH_CALLWNDPROC, ShellHookProc,glhInstance,0);

    return g_hHookShell ? TRUE : FALSE;

}

BOOL CQJHook1::DestroyHook()
{
    if (g_hHookShell == NULL)
    {
        return FALSE;
    }

    UnhookWindowsHookEx(g_hHookShell);
    return TRUE;
}
CQJHook1::CQJHook1() //类构造函数 
{ 
} 

CQJHook1::~CQJHook1()
{
    DestroyHook();
}
肥肚皮的主页 肥肚皮 | 初学一级 | 园豆:167
提问于:2013-05-08 10:14
< >
分享
最佳答案
0

用GetLastError看看

收获园豆:20
2012 | 高人七级 |园豆:21230 | 2013-05-08 12:32

这个要怎么用,我没学过C++是个小白

肥肚皮 | 园豆:167 (初学一级) | 2013-05-08 13:48

@肥肚皮: http://msdn.microsoft.com/en-us/library/ms679360(VS.85).aspx 看看系统的错误码

2012 | 园豆:21230 (高人七级) | 2013-05-09 08:24

@2012: 谢谢你我知道是怎么回事了,因为钩子的消息和GetWindowText的消息冲突,我已经解决了冲突的问题。现在还剩下的问题是用GetWindowText获取标题时,获取不到我想要的控件的标题

肥肚皮 | 园豆:167 (初学一级) | 2013-05-10 11:15

@肥肚皮: 估计是句柄不对,或者窗口使用的是不是句柄的机制实现的

VS带的spy++工具可以看看

2012 | 园豆:21230 (高人七级) | 2013-05-10 17:48

@2012: 你好。我要写一个程序你给以帮我吗,有赏RMB求助。我q305876546

771216 | 园豆:138 (初学一级) | 2015-07-01 13:19
其他回答(1)
0

感谢2012你的回答我已经解决所有问题了

肥肚皮 | 园豆:167 (初学一级) | 2013-05-13 13:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册