Prüfen ob Anwendung minimiert ist geht nicht
-
Hallo zusammen,
ich versuche gerade rauszubekommen, ob meine Anwendung minimiert ist.
Aber die zwei gängigen Möglichkeiten, die ich gefunden habe, funktionieren nicht.Der Window-Handle meiner Anwendung ist korrekt, da ein "ShowWindow(hwnd)" funktioniert.
Was mache ich falsch?Folgender Quellcode:
//ShowWindow(g_hwndMain, SW_NORMAL);// HP: - debug only - Das Haupt-Fenster auf normale Grösse und in Vordergrund bringen. long result = GetWindowLong(g_hwndMain, GWL_STYLE); bool isVisible = ((result & WS_VISIBLE) != 0); if (!IsWindowVisible(g_hwndMain)) { //if(!isVisible){ DoSomething(); }
Also beides, "isVisible" und "IsWindowVisible(..)" ergeben immer TRUE.
Die "ShowWindow(..)" verwende ich, um zu prüfen, ob mein Handle OK ist. Und das ist er
-
probiers mal mit isiconic.
-
@Wade1234 sagte in Prüfen ob Anwendung minimiert ist geht nicht:
isiconic
Vielen Dank Wade1234.
Das funktioniert.
Aber was ist der Unterschied?
-
du kannst fenster als "unsichtbar" erstellen, d.h. diese werden dann gar nicht angezeigt; trojaner und sonstige hintergrundprogramme sind ein schönes beispiel. und diesen status hast du dann eben abgefragt. mit isiconic fragst du ab, ob das fenster minimiert ist. https://docs.microsoft.com/de-de/windows/win32/api/winuser/nf-winuser-isiconic?redirectedfrom=MSDN bzw. https://docs.microsoft.com/de-de/windows/win32/winmsg/windows
-
@Wade1234
Nochmals danke!
Das wurde aus den anderen Artikeln und den MS-Docs leider nicht klar.
Oder zumindest nicht so eindeutig.
-
IsIconic prüft auch nur den Fensterstil... Der eigentliche Stil den Du auch prüfen kannst ist WS_MINIMIZE. Und WS_VISIBLE ist eben nicht WS_MINIMIZE.
https://docs.microsoft.com/en-us/windows/win32/winmsg/window-styles
-
void CPatControlDlg::OnSysCommand(UINT nID, LPARAM lParam)
{switch(nID) { case SC_MINIMIZE: ShowWindow(SW_HIDE | SW_MINIMIZE | SW_SHOWMINIMIZED); m_gdiobj.SetTaskIcon(this,m_hIcon,1,m_Log.GetFile().GetBuffer()); return; break; case SC_RESTORE: if(IsIconic()) { ShowWindow(SW_SHOW|SW_MAXIMIZE|SW_SHOWMAXIMIZED); UpdateWindow(); m_gdiobj.SetTaskIcon(this,m_hIcon,0,m_Log.GetFile().GetBuffer()); return; } break; } CWnd::OnSysCommand(nID, lParam);
}
void CGdiObj::SetTaskIcon(CWnd *pWnd,HICON hIcon,short stat,char *pTitle /*=0*/) { if(pWnd) { if(stat) { memset(&m_iconize,0,sizeof(m_iconize)); m_iconize.cbSize = sizeof(m_iconize); m_iconize.hIcon = (HICON)hIcon; m_iconize.uID = WM_USER + (GetTickCount()%100);//more then one with same id dont work with tooltip m_iconize.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE; m_iconize.hWnd = pWnd->m_hWnd; m_iconize.uCallbackMessage = ICONIZED; if(pTitle) strcpy(m_iconize.szTip,pTitle); Shell_NotifyIcon(NIM_ADD, &m_iconize); pWnd->ShowWindow(SW_HIDE); } else { Shell_NotifyIcon(NIM_DELETE, &m_iconize); pWnd->ShowWindow(SW_RESTORE); } } m_trayed = stat; } ```cpp void CGdiObj::UpdateTaskIcon(char *pTitle) { if (m_trayed && pTitle) { m_iconize.uFlags = NIF_TIP | NIF_MESSAGE; strcpy(m_iconize.szTip, pTitle); Shell_NotifyIcon(NIM_MODIFY, &m_iconize); } }