Страница 3 из 4 Оконная процедура// Тут все довольно стандартно. Делаем switch (msg). // ... case WM_HOTKEY: if (HOTKEYSHOW == (int)wParam) // показываем все, что мы до этого прятали, а так же главное // окно программы ShowAll(), ShowWindow(hwnd,SW_SHOW);
if (HOTKEYHIDE == (int)wParam) // Скрываем наше главное окно и запускаем перебор всех окон в // системе - EnumWindows. Теперь будет вызываться функция // my_EnumWindowsProc для каждого обнаруженного в системе окна. ShowWindow(hwnd,SW_HIDE), EnumWindows((int (__stdcall *)(struct HWND__ *,long))my_EnumWindowsProc, 0); break; // ...
// Если программу пытаются минимизировать, просто скрываем ее // ......................... case WM_SYSCOMMAND: if(SC_MINIMIZE == wParam) { ShowWindow(hwnd,SW_HIDE); return 0; } break; // Внимание, после ShowWindow(hwnd,SW_HIDE) мы пишем return 0, // вместо break. Почему? Да потому что не хотим, чтобы это // сообщение пошло дальше в систему. Мы его уже обработали // по-своему. // ... // А затем обрабатываем нажатия на кнопки. case BN_CLICKED: if (hwndButtonHide==(HWND)lParam)ShowWindow(hwndMain,SW_HIDE); if (hwndButtonEditFilter==(HWND)lParam)ShellExecute(NULL,"open", szFilterStringsFile,NULL,NULL,SW_SHOWMAXIMIZED); break;
Рассмотрим функцию my_EnumWindowsProc Пропустим все невидимые окна if (!IsWindowVisible(hwnd)) return TRUE;
Получим TITLE очередного окна GetWindowText(hwnd, szWindowsTitle, SSZZ)
Затем перебираем все стоки из файла настроек for(i=0;i<MAXFIL;i++) if (FilterStrings[i]) // если это начало строки, то { if (Contain(szWindowsTitle, FilterStrings+i)) HideNext(hwnd); // скроем окно, если эта строка содержится в szWindowsTitle while(FilterStrings[i]) i++; // сместим указатель на следующий 0 }
Продолжаем дальнейший перебор окон return TRUE;
(Если бы было return FALSE, перебор бы закончился.) В остальных функциях особо описывать нечего. |