Как получить окно переднего плана на Windows? - PullRequest
0 голосов
/ 01 марта 2011

В Windows API есть метод с именем GetForegroundWindow. Но он рассматривает рабочий стол как окно переднего плана, когда вы нажимаете на него. Мы все знаем, что когда это происходит, предыдущее переднее окно им не накладывается. Как получить реальную ручку окна переднего плана?

Ответы [ 2 ]

3 голосов
/ 02 марта 2011

Я думаю, вы переоцениваете свое решение.Если ваше приложение не является окном переднего плана, когда вы получаете обновление, то прошейте окно.Точка мигания состоит в том, чтобы привлечь внимание пользователя, и у вас нет возможности определить, обращаете ли вы его внимание программным способом.

Кажется, что вы действительно хотите знать: «Является ли часть моего окна тем, чтоизменения, видимые в данный момент для пользователя? "Это довольно сложный вопрос, и даже если вы ответите правильно, у вас нет возможности узнать, заметит ли пользователь изменение.

1 голос
/ 02 марта 2011

И «рабочий стол» (просмотр списка рабочих столов в обозревателе поверх реального окна рабочего стола) и панель задач являются реальными окнами, в которых пользователь может «работать» (вкладки вокруг, использование меню и т. Д.)

Если вы хотите найти «реальное» окно переднего плана таким плохим, как вы сами, его лучше всего выбрать для окна в верхней части z-порядка, возможно, что-то вроде:

... enumfunc(hwnd,...) 
{
    if (GetClassName(hwnd)!= "Shell_TrayWnd")
    {
        if (IsWindowEnabled(hwnd) && IsWindowVisible(hwnd) && GetWindow(hwnd,GW_OWNER)==NULL)
        {
            DoSomethingWithRealForegroundWindow(hwnd)
            return FALSE
        }
    }
}

EnumWindows(enumfunc,0)

TaskSwitchXP - это замена alt-tab с открытым исходным кодом, вероятно, он имеет лучший алгоритм, который вы можете использовать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...