Как обнаружить минимизацию в неактивном приложении Win32? - PullRequest
1 голос
/ 20 января 2020

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

Для этого я обрабатываю WM_SYSCOMMAND / SC_MINIMIZE:

case WM_SYSCOMMAND:
    switch (wParam)
    {
        case SC_MINIMIZE:
            minimizeToTray();
            return FALSE;
        ...

Это однако не охватывает события, когда окно свернуто без WM_SYSCOMMAND.

Например: я могу свернуть окно, используя Win+D (показать рабочий стол).

Для покрытия в этом случае я обрабатываю WM_ACTIVATE / WA_INACTIVE:

case WM_ACTIVATE:
{
    if (LOWORD(wParam) == WA_INACTIVE && HIWORD(wParam) != 0)
    {
        minimizeToTray();
    }
    ...

, который, по-видимому, only работает, если окно активно перед отображением рабочего стола.


Проблемы:

Когда окно уже неактивно, WM_ACTIVATE не обнаруживает минимизацию. Какое сообщение говорит мне, что неактивное окно свернуто?

РЕДАКТИРОВАТЬ: Кажется, что WM_WINDOWPOSCHANGED является правильным местом, чтобы проверить, свернуто ли окно, когда оно не активно.

Кроме того, когда я активирую какое-то другое приложение, которое развернуто, полностью охватывающее мое собственное приложение, я также хочу свернуть в трей, но не знаю, есть ли сообщение для обработки в этом случае. Старшее слово wParam для WM_ACTIVATE в этом случае 0 (как и в случае, если окно было только что деактивировано, но все еще видно).

1 Ответ

0 голосов
/ 20 января 2020

Вызовите IsIconi c (hWnd), чтобы получить текущее состояние.

...