13 / 13 / 0
Регистрация: 14.04.2012
Сообщений: 158
1

Узнать состояние окна - FullScreen

12.06.2012, 15:12. Показов 5174. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите плз
моя программа в трее
надо узнать в опред. момент
фулл скрин ли(и тд,затрудняюсь описать полностью) верхнее окно

чтобы понятнее было вот пример того что мне надо сделать на картинке
Узнать состояние окна - FullScreen

подскажите об этом всё что сможете и кодом если можно
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2012, 15:12
Ответы с готовыми решениями:

Нужно перевести вкладку PageControl в состояние плавающего окна
Всем здравствуйте. У меня возникла небольшая проблема. В программе есть приемник (PageControl),...

CppWebBrowser - Узнать состояние страницы после выполнения команды Navigate
Доброе время суток! Проблема: Выполняю строку...

Web-формы: как узнать состояние CheckBox cheked/uncheked?
Здравствуйте! Подскажите пожалуйста. На форме нахожу кнопку, программно нажимаю ее. Все в порядке....

Медленный переход окна из состояния Fullscreen в состояние Default
Привет, реализую меню на SFML, в нем имеется функция "Полный экран", при переходе В полноэкранный...

15
LK
Заблокирован
12.06.2012, 15:33 2
Например, при нажатии на пункте поп-ап меню иконки в трее.
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::TrayN1Click(TObject *Sender)
{
  HWND hWnd = Form1->Handle;
  if (!IsWindowVisible(hWnd) || // если окно не видимо, а скрыто
      !IsIconic(hWnd) || // если окно не свернуто
      !IsZoomed) {  // если окно не развернуто
    Form1->Show(); // показ окна
  }
  else
    return;
}
картинка ваша ясности не внесла
1
13 / 13 / 0
Регистрация: 14.04.2012
Сообщений: 158
12.06.2012, 15:48  [ТС] 3
нет сори я имею ввиду узнать о другом приложении
чтобы у меня как у касперского например была возможность не выполнять что-либо если запущен фулл скрин(если есть идеи как ещё дополнительно убедиться что запущено что-то на весь экран и/или пользователь занят и не хочет никаких сообщений и тд то говорите =))
0
LK
Заблокирован
12.06.2012, 15:55 4
Тогда ищите это окно:
C++
1
hWnd = FindWindow("Класс_Искомого_Окна", NULL);
Добавлено через 1 минуту
или по имени
C++
1
hWnd = FindWindow(NULL,"Имя_Искомого_Окна");
или в комплексе
C++
1
hWnd = FindWindow("Класс_Искомого_Окна", "Имя_Искомого_Окна");
1
13 / 13 / 0
Регистрация: 14.04.2012
Сообщений: 158
12.06.2012, 16:02  [ТС] 5
Цитата Сообщение от niceonehere Посмотреть сообщение
фулл скрин ли(и тд,затрудняюсь описать полностью) верхнее окно
мм что там искать-то
C++
1
GetForegroundWindow();
и теперь вопрос фул скрин ли оно (и прочие атрибуты игры(например), возможно подскажите какие..)
0
LK
Заблокирован
12.06.2012, 16:08 6
читать умеете? читайте выше.
ну и hWnd у GetForegroundWindow(); узнавайте, коль всему обучены. как оказывается.
1
13 / 13 / 0
Регистрация: 14.04.2012
Сообщений: 158
12.06.2012, 17:18  [ТС] 7
LK, так хендл то понятно вопрос в том фуллскрин ли это окно как это узнать...............................

Добавлено через 47 минут
что-нибудь вроде такого: напишите код пожалуйста
C++
1
2
3
4
5
//узнаем верхнее окно(ясно слава богу..)
//проверяем убрана ли у него шапка(как?)
//проверяем на весь ли оно экран(как?)
//проверяем убрана ли панель задач(как?)
//и тд если что-то забыл
если вообще неправильно понимаю что делать подскажите что надо
спасибо
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
12.06.2012, 20:30 8
IsZoomed( HWND )
Внимательнее читать ответы надо, LK уже указал эту функцию.
2
LK
Заблокирован
12.06.2012, 22:47 9
Вот посмотришь на все это, и изобретешь порох...
(Дон Румата Эсторский)

Там даже комментарий был:
!IsZoomed) { // если окно не развернуто
но это ж читать надо уметь...

Добавлено через 32 минуты
Цитата Сообщение от niceonehere Посмотреть сообщение
что-нибудь вроде такого: напишите код пожалуйста
C++
1
2
3
4
5
//узнаем верхнее окно(ясно слава богу..)
//проверяем убрана ли у него шапка(как?)
//проверяем на весь ли оно экран(как?)
//проверяем убрана ли панель задач(как?)
//и тд если что-то забыл
все это делает ненавистный вам FindWindow() , поскольку, как я понял, вы собираетесь пакостить в чужой программе.
1
13 / 13 / 0
Регистрация: 14.04.2012
Сообщений: 158
13.06.2012, 11:37  [ТС] 10
спасибо в любом случае всё это полезно =) но..вы меня не поняли
это окно maximized
я могу развернуть блокноть (на квадратик нажать) будет 1 а мне надо чтобы было 0 в этом случае
надо функцию чтобы она давала 1 когда окно(верхнее) как у игры например(без бордера,без шапки,закрывающее панель задач (итд?))
чтобы я мог понять запущена игра скажем или блокнот
и если блокнот я могу выдавать всплывающие сообщения и тд
а если игра(или видео на весь экран или..) то не могу чтобы юзер не матюгался на меня
как в настройках касперского на картинке есть...
извиняюсь что много букв =0 надеюсь всё понятно теперь что я хочу
fullscreen != maximized

Не по теме:

Цитата Сообщение от LK Посмотреть сообщение
пакостить в чужой программе.
лк проказник =))) всех по себе не суди =)



Добавлено через 2 минуты
Цитата Сообщение от LK Посмотреть сообщение
Сообщение от niceonehere
что-нибудь вроде такого: напишите код пожалуйста
Код C++
1
2
3
4
5
//узнаем верхнее окно(ясно слава богу..)
//проверяем убрана ли у него шапка(как?)
//проверяем на весь ли оно экран(как?)
//проверяем убрана ли панель задач(как?)
//и тд если что-то забыл
все это делает ненавистный вам FindWindow() , поскольку, как я понял, вы собираетесь пакостить в чужой программе.
если это поможет в моём случае то я не понял как помоги плз
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
13.06.2012, 17:13 11
C++
1
2
3
4
hWnd = GetForegroundWindow();
RECT appBounds;
RECT rc;
GetWindowRect(GetDesktopWindow(), &rc);
Then check if that windows isn't desktop or shell. Simple if instruction.

C++
1
2
3
4
5
if(hWnd =! GetDesktopWindow() && hWnd != GetShellWindow())
{
    GetWindowRect(hWnd, &appBounds);
    // Now you just have to compare rc to appBounds
}
This is written without testing.

answered Aug 10 '11 at 10:57 by Hooch
How to detect whether or not user is running a full-screen program

Recently I was asked how to detect whether or not user is runing a full screen program,here is the code snippet:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
bool IsFullScreenMode()
{
  int w = GetSystemMetrics(SM_CXSCREEN);
  int h = GetSystemMetrics(SM_CYSCREEN); 
 
  HWND hWnd = 0;
  while (hWnd = FindWindowEx(NULL, hWnd, NULL, NULL))
  {
    if (GetWindowLong(hWnd, GWL_EXSTYLE) & WS_EX_TOPMOST)
    {
      RECT rcWindow;
      GetWindowRect(hWnd, &rcWindow);
      if ((w == (rcWindow.right - rcWindow.left)) &&
         (h == (rcWindow.bottom - rcWindow.top)))
           return true;
     }
  }
  return false;
}
И сколько у меня ушло времени найти это в гугле? Пару минут. Стоило ли разводить тут все это...?
1
13 / 13 / 0
Регистрация: 14.04.2012
Сообщений: 158
13.06.2012, 23:33  [ТС] 12
у меня не получилось найти в гугле
а на форуме чисто по теме мб даже нету
и в конце концов я рак или нет??!
большое спасибо! =)

Добавлено через 4 часа 22 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
HWND hWnd=0;
      hWnd = GetForegroundWindow();
      RECT appBounds;
      LONG w = GetSystemMetrics(SM_CXSCREEN);
      LONG h = GetSystemMetrics(SM_CYSCREEN);
      if(hWnd != GetDesktopWindow())
      {
       GetWindowRect(hWnd, &appBounds);
       if ((w == (appBounds.right - appBounds.left)) &&
         (h == (appBounds.bottom - appBounds.top)))
       {
        //блабла действия
        //проблема
       }
       return;
      }
правильно всё поределяет игры и фильмы
но когда рабочий стол
после нажатия Win+D например
какой-то мусор находит который по его мнению фуллскрин...
где что забыл подскажите плз
у меня вин хп если это важно
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
13.06.2012, 23:43 13
GetShellWindow() забыл.
1
13 / 13 / 0
Регистрация: 14.04.2012
Сообщений: 158
14.06.2012, 11:58  [ТС] 14
у меня его не знает билдер
что делать
инклюды есть

Добавлено через 12 часов 7 минут
к тому же даже если я пишу
FindWindow("Progman",0);
вместо него
то не помогает
мусор ловит
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
14.06.2012, 17:09 15
Не знает функцию, так можно, наверно, попробовать ему подсказать.
C++
1
2
3
4
5
6
7
8
//...
typedef HWND (WINAPI *get_shell_wnd_type)(void);
get_shell_wnd_type get_shell_wnd;
get_shell_wnd = (get_shell_wnd_type) GetProcAddress( GetModuleHandle(TEXT("User32.dll")), "GetShellWindow" );
 
if( ( get_shell_wnd == NULL ? false: hWnd != get_shell_wnd() ) && hWnd != GetDesktopWindow() ) {
//...
}
1
13 / 13 / 0
Регистрация: 14.04.2012
Сообщений: 158
14.06.2012, 20:23  [ТС] 16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
typedef HWND (WINAPI *get_shell_wnd_type)(void);
      get_shell_wnd_type get_shell_wnd;
      get_shell_wnd = (get_shell_wnd_type) GetProcAddress( GetModuleHandle(TEXT("User32.dll")), "GetShellWindow" );
HWND hWnd=0;
hWnd = GetForegroundWindow();
RECT appBounds;
LONG w = GetSystemMetrics(SM_CXSCREEN);
LONG h = GetSystemMetrics(SM_CYSCREEN);
if(( get_shell_wnd == NULL ? false: hWnd != get_shell_wnd() ) && hWnd != GetDesktopWindow() )
 {
       GetWindowRect(hWnd, &appBounds);
       if ((w == (appBounds.right - appBounds.left)) &&
         (h == (appBounds.bottom - appBounds.top)))
       {
         ShowMessage("FS!");
        }
 }
вот так сделал
win+d, я на рабочем столе..
привет FS!

мб я что-то не так сделал?
вообще ладно на всех остальных окнах кроме раб стола и то после вин д работает
но исправить конечно хотелось бы =(

Добавлено через 1 час 1 минуту
короче ладно муорный рабочий стол появляется только после вин д походу
так что редко и не мешает спасибо большое =)
0
14.06.2012, 20:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.06.2012, 20:23
Помогаю со студенческими работами здесь

QMessageBox из FullScreen окна
Доброго времени суток! Мое приложение работает в fullscreen режиме, но при открытии всех диалоговых...

Узнать состояние Wi-Fi
Доброго времени суток :) Требуется написать несложное фоновое приложение, которое при подключении...

Узнать состояние принтера
Доброго времени суток. Подскажите, как определить включен или отключен дефолтный принтер в винде...

Узнать состояние службы
Всем привет! Как можно узнать состояние службы? имя службы взять из текстового файла (1строка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru