1

我想用 VC 打开 Microsoft Security Essential 程序并单击 Scan now 按钮。我可以找到窗口但找不到控件。这是我的代码,当我运行此代码时它显示 Control not found 。我尝试通过单击“运行”程序中的“浏览”按钮来测试此代码,它可以工作,但是当我尝试与 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++,它显示如下

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

但它没有找到控制。

4

1 回答 1

6

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

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

于 2013-02-15T18:29:55.373 回答