Автор Тема: Реакция неактивного окна на загораживание  (Прочитано 215 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн SergVrn [?]

  • Новичок
  • *
  • Сообщений: 22
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Добрый день.
Подскажите, кто знает - решение.

Есть окно программы, к примеру документ блокнота с названием титла : "Документ-1"
Это окно находится поверх всех окон и неактивно.

Как реализовать скриптом - реакцию этого неактивного окна - на загораживание его любым другим окном ?
(Чтобы окно блокнота с названием "Документ-1" тут же расположилось опять поверх всех окон, но при этом не становилось бы активным.)

Русское сообщество AutoIt

Реакция неактивного окна на загораживание
« Отправлен: Ноябрь 09, 2018, 14:59:57 »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0

Оффлайн SergVrn [?]

  • Новичок
  • *
  • Сообщений: 22

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
InnI
Не совсем так.
Окно не должно иметь такой аттрибут постоянно.
Оно только должно получить этот атрибут кратковременно, в тот момент, когда это окно - загораживают.
То есть оно должно среагировать именно на ЗАГОРАЖИВАНИЕ. (загораживание имеется ввиду - полное, а не частичное)

WinSetOnTop() - это не спасение. Это окно можно запросто загородить другим окном с тем же аттрибутом (где тоже установлен параметр "поверх всех окон").

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0
SergVrn  [?]
Цитировать
Оно только должно получить этот атрибут кратковременно
Цитировать
Это окно можно запросто загородить другим окном с тем же аттрибутом
Но если окну временно установить атрибут "поверх всех", то при снятии этого атрибута оно будет сразу же перекрыто другим окном с атрибутом "поверх всех".
Другими словами, окном с атрибутом "поверх всех" можно будет всегда перекрыть ваше окно независимо от того, есть у вашего окна этот атрибут или нет.

Русское сообщество AutoIt

Re: Реакция неактивного окна на загораживание
« Ответ #3 Отправлен: Ноябрь 09, 2018, 16:58:07 »

Оффлайн SergVrn [?]

  • Новичок
  • *
  • Сообщений: 22

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
InnI
Нет, в этом случае я вообще не буду использовать окон у которых есть свойство "поверх всех".

Речь идет о реакции окна - на загораживание его другим окном.

Помечен как лучший ответ пользователем SergVrn Отправлен Ноябрь 12, 2018, 17:10:47

Оффлайн xXx [?]

  • Новичок
  • *
  • Сообщений: 30
  • Репутация: 8
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Код: AutoIt [Выделить]
Run('notepad.exe')
Local $k, $hWnd = WinWaitActive('[CLASS:Notepad]')

While WinExists($hWnd)
    If Not WinActive($hWnd) Then
        $aPos = WinGetPos($hWnd)
        If @error Then ExitLoop
        $aPos_2 = WinGetPos('')
        If @error Then ContinueLoop
        If ($aPos_2[0] + $aPos_2[2]) >= ($aPos[0] + $aPos[2]) And _
                ($aPos_2[1] + $aPos_2[3]) >= ($aPos[1] + $aPos[3]) And _
                $aPos_2[0] <= $aPos[0] And $aPos_2[1] <= $aPos[1] Then
            WinSetOnTop($hWnd, '', 1)
            Sleep(100)
            WinSetOnTop($hWnd, '', 0)
        EndIf
    EndIf
    Sleep(200)
WEnd
 

« Последнее редактирование: Ноябрь 10, 2018, 01:47:05 от xXx »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0
xXx
По вашему алгоритму, если активное окно превышает окно блокнота по ширине И высоте, то, для выполнения условия, достаточно накрыть правым нижним углом активного окна левый верхний угол блокнота. Но это легко поправить.
Другой вопрос в том, что окно блокнота можно накрыть несколькими окнами. Вот тут алгоритм будет посложнее.

Оффлайн xXx [?]

  • Новичок
  • *
  • Сообщений: 30
  • Репутация: 8
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
это легко поправить.
Поправил.

можно накрыть несколькими окнами.
При этом активным будет всегда одно. При необходимости можно уменьшить Sleep().

Косяк проявляется если какое-нибудь контекстное меню попадает на подконтрольное окно.
OffTopicА вообще - изврат это полный.


Русское сообщество AutoIt

Re: Реакция неактивного окна на загораживание
« Ответ #7 Отправлен: Ноябрь 10, 2018, 01:52:02 »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3973
  • Репутация: 1055
    • Награды
  • Версия AutoIt: 3.3.14.0
xXx  [?]
Цитировать
При этом активным будет всегда одно.
Верно. Но я имел в виду несколько окон рядом. Когда каждое закрывает только часть блокнота, а вместе они накрывают окно блокнота целиком.

OffTopic
Цитировать
А вообще - изврат это полный.
Согласен :beer:

Оффлайн SergVrn [?]

  • Новичок
  • *
  • Сообщений: 22

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
xXx ну понятно.
Вроде подходит.

Русское сообщество AutoIt

Re: Реакция неактивного окна на загораживание
« Ответ #9 Отправлен: Ноябрь 12, 2018, 17:11:12 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
3 Ответов
7062 Просмотров
Последний ответ Февраль 22, 2013, 17:45:33
от Mstislaw
3 Ответов
3847 Просмотров
Последний ответ Октябрь 25, 2011, 02:41:33
от Trans
4 Ответов
6108 Просмотров
Последний ответ Октябрь 23, 2011, 20:43:12
от r35p3ct
0 Ответов
1924 Просмотров
Последний ответ Декабрь 15, 2011, 18:13:41
от overhand
19 Ответов
5001 Просмотров
Последний ответ Февраль 20, 2012, 13:38:25
от pashkovka
0 Ответов
1570 Просмотров
Последний ответ Февраль 15, 2012, 10:48:40
от Kaster
9 Ответов
5670 Просмотров
Последний ответ Август 04, 2018, 18:27:43
от eysh
2 Ответов
2827 Просмотров
Последний ответ Август 25, 2012, 17:16:58
от Dimmak
4 Ответов
772 Просмотров
Последний ответ Октябрь 03, 2017, 20:08:03
от cerber412
0 Ответов
271 Просмотров
Последний ответ Январь 26, 2018, 09:31:18
от pvnn