Что нового

Как назначить группе окон - свойство "поверх всех окон" - в конкретных условиях

radioamator16

Новичок
Сообщения
39
Репутация
0
Версия AutoIt: 3.

Описание:
Здравствуйте.
Есть вопрос по окнам.

Есть открытый процесс Notepad.exe и несколько открытых процессов Calc.exe.

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

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

Имеющийся скрипт может выполнять эту операцию - только для одного процесса Calc.exe, но не для всех.
Возможно тут нужно использовать команду Winlist и как-то перебрать массив.
Код:
;~ 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
Примечания:
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
$Set = True

While Sleep(11)
  If WinActive("[class:Notepad]") Then
    If $Set Then
      SetOnTop(1)
      $Set = False
    EndIf
  Else
    If Not $Set Then
      SetOnTop(0)
      $Set = True
      DllCall("user32.dll", "bool", "BringWindowToTop", "hwnd", WinGetHandle(""))
    EndIf
  EndIf
WEnd

Func SetOnTop($OnTop)
  Local $aList = WinList("[class:CalcFrame]")
  For $i = 1 To $aList[0][0]
    WinSetOnTop($aList[$i][1], "", $OnTop)
  Next
EndFunc
 
Верх