从代码问题激活窗口

时间:2011-08-03 16:51:17

标签: c++ windows winapi autoit window-handles

我桌面上有一个名为“卡巴斯基反病毒软件配置向导”的窗口

以下是关于窗口的一些信息:

>>>> Window <<<<
Title:  Kaspersky Anti-Virus Configuration Wizard
Class:  AVP.ConfigureWizard
Position:   612, 247
Size:   499, 388
Style:  0x94CA0044
ExStyle:    0x00010100
Handle: 0x00081308

窗口没有出现在Windows任务管理器任务列表中(只有它的进程在进程列表中作为“avp.exe”存在,据我所知,这使我很难实现我的目标。首先我想知道有人会解释卡巴斯基如何在“Windows任务管理器”的“应用程序”选项卡中找不到该窗口。其次,如果你能帮助我解决我在这里详述的问题,我将非常感激:

我想从代码(C ++ \ Autoit)中激活窗口(在窗口上设置焦点)。

我尝试使用WinAPI的FindWindow函数但无法获取此窗口的句柄。

我得到了GetForegroundWindow函数的句柄,我发现当我使用EnumWindows函数时,kaspersky配置窗口的句柄不在列表中..

这是我的代码:

BOOL CALLBACK EnumWindowsProc(__in  HWND hwnd, __in  LPARAM lParam)
{
    if(g_hWnd == hwnd)
    {
        cout << "Found window";
        return FALSE;
    }
    return TRUE;
}
BOOL CALLBACK EnumDesktopProc(
    __in  LPTSTR lpszDesktop,
    __in  LPARAM lParam
    )
{
    EnumDesktopWindows(OpenDesktop(lpszDesktop,DF_ALLOWOTHERACCOUNTHOOK,FALSE,DESKTOP_ALL),EnumWindowsProc, NULL);
    return true;
}

BOOL CALLBACK EnumWindowStationProc(
    __in  LPTSTR lpszWindowStation,
    __in  LPARAM lParam
    )
{
    EnumDesktops(OpenWindowStation(lpszWindowStation,FALSE, WINSTA_ALL_ACCESS),EnumDesktopProc, NULL );
    return true;
}
int main()
{
    Sleep(3000);
    g_hWnd = GetForegroundWindow(); //Here i switch to kaspersky window to get it's handle
    EnumWindowStations(EnumWindowStationProc, NULL);    //I call EnumDesktopWindows in EnumDesktops in EnumWindowStations to search in all HWND of my Operation System.
}

cout&lt;&lt; “发现窗口”声明从未执行过。

如果你能帮助我解决这个问题并向我展示让这个窗口激活的能力,我将非常感激。

0 个答案:

没有答案