Автор Тема: Реагирование на активность-неактивность конкретного окна  (Прочитано 209 раз)

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

Оффлайн radioamator16 [?]

  • Новичок
  • *
  • Сообщений: 5
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Версия AutoIt: 3.3.14

Описание:
Здравствуйте.
У меня возник вопрос по окнам.

Есть два открытых процесса Notepad.exe и Calc.exe.
Calc.exe - имеет свойство - поверх всех окон.
Посоветуйте - как скриптом назначать окну процесса Calc - данное свойство (поверх всех окон) - только при условии, что окно Notepad.exe - в настоящий момент активно и не свернуто ?

А во всех остальных случаях - чтобы окно процесса Calc.exe - было позади всех окон (или невидимым).

Примечания:

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


Помечен как лучший ответ пользователем radioamator16 Отправлен Январь 11, 2019, 06:28:47

Оффлайн xXx [?]

  • Новичок
  • *
  • Сообщений: 46
  • Репутация: 14
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Код: AutoIt [Выделить]
;~ If Not ProcessExists('win32calc.exe') Then Run('calc.exe')
;~ If Not ProcessExists('Notepad.exe') Then Run('Notepad.exe')

Global $iOnTop_Calc, $hWnd_Calc, $hWnd_Notepad
Do ; Ждем актививации окон Calc и Notepad
    If Not $hWnd_Calc Then $hWnd_Calc = WinActive('[CLASS:CalcFrame]')
    If Not $hWnd_Notepad Then $hWnd_Notepad = WinActive('[CLASS:Notepad]')
    Sleep(50)
Until ($hWnd_Calc And $hWnd_Notepad)

While WinExists($hWnd_Notepad)
    If WinActive($hWnd_Notepad) Then
        If Not $iOnTop_Calc Then $iOnTop_Calc = WinSetOnTop($hWnd_Calc, '', 1)
    Else
        If $iOnTop_Calc And WinSetOnTop($hWnd_Calc, '', 0) Then $iOnTop_Calc = 0
    EndIf
    Sleep(50)
WEnd


Оффлайн radioamator16 [?]

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

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

Этот код работает только на одном окне класса CLASS:CalcFrame
Если калькуляторов открыто несколько - то код не воспринимает другие окна калькуляторов, только одно из них.
Хотя по идее - эти окна тоже имеют класс CLASS:CalcFrame
Почему же код не срабатывает на них ?

Оффлайн xXx [?]

  • Новичок
  • *
  • Сообщений: 46
  • Репутация: 14
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Этот код работает только на одном окне класса CLASS:CalcFrame
Так и задумано.  И я вам больше скажу:  он работает только с одним экземпляром Notepad,  как бы привязывает одно окно к другому.
А если открыта куча блокнотов и куча калькуляторов,  то какое окно к какому "привязывать"? Вы не запутаетесь?

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

Re: Реагирование на активность-неактивность конкретного окна
« Ответ #3 Отправлен: Январь 05, 2019, 20:44:14 »

Оффлайн radioamator16 [?]

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

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

А как же сделать так, чтобы все без исключения окна - с классом [CLASS:CalcFrame] - учитывались в этом скрипте ?

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

Re: Реагирование на активность-неактивность конкретного окна
« Ответ #4 Отправлен: Январь 06, 2019, 21:06:28 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
2233 Просмотров
Последний ответ Ноябрь 13, 2011, 02:14:42
от running-frag
1 Ответов
1116 Просмотров
Последний ответ Март 12, 2015, 12:32:20
от InnI
15 Ответов
4455 Просмотров
Последний ответ Май 30, 2015, 00:59:48
от InnI
3 Ответов
1687 Просмотров
Последний ответ Июль 31, 2015, 15:07:36
от alex33
2 Ответов
580 Просмотров
Последний ответ Октябрь 13, 2017, 19:25:28
от SergVrn
0 Ответов
352 Просмотров
Последний ответ Октябрь 14, 2017, 12:28:44
от yl3d
1 Ответов
473 Просмотров
Последний ответ Ноябрь 21, 2017, 17:05:59
от sergioz
2 Ответов
588 Просмотров
Последний ответ Ноябрь 22, 2017, 06:32:13
от SergVrn
3 Ответов
524 Просмотров
Последний ответ Январь 27, 2018, 22:57:17
от Alofa
2 Ответов
167 Просмотров
Последний ответ Ноябрь 22, 2018, 01:57:19
от АлексейАльтман