我不能使用FindWindowEx()来查找控件

时间:2013-02-15 09:22:13

标签: c++ c visual-c++ mfc spy++

我想打开Microsoft Security Essential程序,然后单击VC立即扫描按钮。我可以找到窗口,但找不到控制权。这是我的代码,当我运行此代码时显示控件未找到。我尝试在运行程序中单击“浏览”按钮测试此代码,但是当我尝试使用Microsoft Security Essential时,它找不到控件。我不知道为什么这个控件可能在Tab中。如何使用FindWindowEx()单击Microsoft Security Essential中的立即扫描按钮?

int run_ms(){   

    ShellExecute(NULL, L"open", L"C:/Program Files/Microsoft Security Client/msseces.exe", NULL, NULL, SW_SHOWNORMAL);

        HWND w;
    w=FindWindow(NULL, L"Microsoft Security Essentials");

        if(w==NULL)
                MessageBox(NULL,L"Not found",L"",MB_OK);

        else{
                HWND cb;
                cb = FindWindowEx(w,NULL,NULL,_T("&Scan now"));     

            if(cb!=NULL)
            {
                SendMessage(cb,WM_LBUTTONDOWN, NULL,NULL);
                SendMessage(cb,WM_LBUTTONUP, NULL,NULL);
            }
            else
                MessageBox(NULL,L"Control not found",L"",MB_OK);
        }

            return 0;
}

我在Microsoft Security Essential中使用Spy ++ with button,它显示如下

Caption : &Scan now
Class : ALT:BUTTON
I use FindWindowEx() like this cb = FindWindowEx(w,NULL,NULL,_T("&Scan now")); 

但未找到Control。

1 个答案:

答案 0 :(得分:6)

FindWindowEx函数不会“向下钻取”到窗口层次结构中 - 它只会查看您要求它搜索的子窗口。话虽如此,并且从快速查看Microsoft Security Essentials用户界面的屏幕截图,我99%肯定您正在寻找的“立即扫描”按钮不是直接子窗口主要的Microsoft Security Essentials窗口。这就是你的FindWindowEx电话失败的原因。

我无权访问Microsoft Security Essentials软件,但有权访问Spy++,应该很容易找到“立即扫描”按钮的父级是谁:Microsoft Security Essentials窗口或其他窗口,它本身就是Microsoft Security Essentials窗口的子窗口。