Что нового

[Окна, Диалоги] Ошибка при закрытии окон

erlik

Продвинутый
Сообщения
317
Репутация
84
Не могу понять какая ошибка в данном скрипте.
Код:
Global $aToggleWnd[100]

Func _ToggleAllWnd()
Local $sTitle, $aList,$State, $iCounter=0
$aList = WinList()
For $i = 1 to $aList[0][0]
  If $aList[$i][0] <> ""  Then
	$sTitle = $aList[$i][0]
	If $sTitle <>"Моя прога" Then
	 $State = WinGetState ($sTitle)
	    If BitAnd($State,2)=True  Then
		     WinSetState ( $sTitle, "", @SW_MINIMIZE )
		     $iCounter+=1
			 $aToggleWnd[$iCounter]=$sTitle 
			EndIf
        EndIf
	EndIf
Next
EndFunc

Вот на эту строчку $aToggleWnd[$iCounter]=$sTitle ругается:
Expected a "=" operator in assignment statement.: Ожидается оператор присваивания - но он ведь на месте?!
 

axlwor

Скриптер
Сообщения
657
Репутация
147
В выложенном варианте код работает, но попробуй так
Код:
$oShell = ObjCreate("shell.application")
;~ $oShell.MinimizeAll
$oShell.ToggleDesktop
 
Автор
E

erlik

Продвинутый
Сообщения
317
Репутация
84
axlwor
Я так и делал вначале, но такой вариант не подходит. Мне нужно, чтобы моя прога при этом оставалась не свернутой (вариант с последующим - через краткую паузу - восстановлением окна работает криво - окно то восстанавливается, то нет), и чтобы свернутые окна потом можно было - по клику кнопки - восстановить обратно.
А вот с чего вылезает ошибка в корректном коде (раз у тебя работает) - вот это загадка.
 

axlwor

Скриптер
Сообщения
657
Репутация
147
а зачем мучать все окна? может обойтись WinActivate
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
#Include <Constants.au3>
#Include <WindowsConstants.au3>
#Include <WinAPI.au3>

Opt("WinWaitDelay", 0)

Global $aToggleWnd[101] = [0]

_ToggleAllWnd()

Func _ToggleAllWnd()

	Local $sStyle = BitOR($WS_VISIBLE, $WS_MINIMIZEBOX)
	Local $aList = WinList()

	For $i = 1 To $aList[0][0]
		If ($aList[$i][0] <> "Моя прога") And (BitAND(_WinAPI_GetWindowLong($aList[$i][1], $GWL_STYLE), $sStyle) = $sStyle) Then
			WinSetState($aList[$i][1], "", @SW_MINIMIZE)
			$aToggleWnd[0] += 1
			If $aToggleWnd[0] > UBound($aToggleWnd) - 1 Then
				ReDim $aToggleWnd[$aToggleWnd[0] + 100]
			EndIf
			$aToggleWnd[$aToggleWnd[0]] = $aList[$i][1]
		EndIf
	Next
EndFunc   ;==>_ToggleAllWnd
 
Автор
E

erlik

Продвинутый
Сообщения
317
Репутация
84
axlwor
Ну вот нужно мне, чтобы именно так, а не иначе :smile:

Yashied
Больше спасибо за код - он безусловно рабочий, но... у меня какая то фигня творится с данной функцией. Опять та же ошибка - уже с твоим вариантом:
D:\Install\AutoIT3\Scripts\gui.au3 (3028) : ==> Expected a "=" operator in assignment statement.:
$aToggleWnd[0] += 1

Может интерпретатор глючит?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
erlik [?]
gui.au3 (3028) : ==> Expected a "=" operator in assignment statement
Откуда там 3028-ая строка?
Пример выше же не даёт этой ошибки?
Значит неправильно итспользуется пример. Скорее всего не указана строчка с Global $aToggleWnd[101] = [0], ну или указана после вызова функций.
 
Автор
E

erlik

Продвинутый
Сообщения
317
Репутация
84
CreatoR
У меня прога на данный момент состоит из 4 тысяч строк кода.
Отсюда и 3028 строчка. С расположением и инициацией переменных в этой функции там все верно - не первый день как никак коды пишу.
Отдельно от прочего кода функция то работает (и моя и от Yashied ) - но внутри программы - дает сбой. Я подозреваю, что где то в коде есть некорректная строка, обработка которой почему то дает сбой при вызове данной функции - но строка эта совсем не та на которую указывает интерпретатор - и вот как ее найти...
------------------------------------------------------------
Ошибку нашел - объявление массива Global $aToggleWnd[101] я меня стояло непосредственно перед функцией (как то я упустил из виду что функции (и их переменные) находящиеся после основного кода создания окна не были закэшированы из-за наличия цикла в коде окна). Стоило перенести массив в самое начало файла - ко всем прочим глобальным массивам - как ошибка исчезла. Всем спасибо - тема закрыта.:smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
erlik [?]
Ошибку нашел - объявление массива Global $aToggleWnd[101]
Я же указал на эту ошибку:
[?]
Скорее всего не указана строчка с Global $aToggleWnd[101] = [0], ну или указана после вызова функций.
Нужно сначала внимательно читать то что пишут, а не упрямиться и гордиться количеством дней кодинга.
OffTopic:
Я тоже не первый день пишу, и до сих пор допускаю мелкие и глупые ошибки, и в этом нет ничего стыдного, мы люди как никак ;)
 
Автор
E

erlik

Продвинутый
Сообщения
317
Репутация
84
CreatoR
Так я как раз после твоего поста и задумался над видимостью переменных :smile: Потому и отметил твой пост.
OffTopic:
А ошибок я особо не стыжусь - не профессиональный кодер как никак, а самоучка - но 4 языка таки освоил...
 
Верх