Что нового

Сворачивается окно при клике по рабочему столу

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
AutoIT 3.3.12.0
система - семерка
код
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
Global $flag
Opt("TrayMenuMode", 1)
$Form1 = GUICreate("Form1", 392, 108, 192, 124,-1,$WS_EX_TOOLWINDOW)
GUISetState(@SW_SHOW)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
	Switch TrayGetMsg()
		Case $TRAY_EVENT_PRIMARYUP
			If $flag = 1 Then
				$flag = 0
				GUISetState(@SW_RESTORE)
			ElseIf $flag = 0 Then
				GUISetState(@SW_MINIMIZE)
				$flag = 1
			EndIf
	EndSwitch
WEnd
при клике по иконке в трее окно сворачивается, при повторном клике восстанавливается(можно использовать @SW_HIDE не важно)
запустить скрипт, потом кликнуть на панели "свернуть все окна"
наше окно свернется. потом кликаем на иконку в трее - окно восстанавливается . но если кликнуть на рабочем столе, то окно исчезает. не пойму как победить
это происходит если применять именно стиль $WS_EX_TOOLWINDOW
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
TOOLWINDOW не сворачивается в панель задач, а уменьшается до размеров заголовка и располагается в левом нижнем углу. Если в таком состоянии его переместить, то в следующий раз оно окажется за пределами экрана.
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
то есть , бороться бесполезно
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
joiner сказал(а):
то есть , бороться бесполезно

Смотря, что вы хотите сделать. Можно просто скрывать окно, а не сворачивать, или же отказаться от TOOLWINDOW.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
joiner
При помощи Spy++ найдены "магические числа", которые решают проблему на Win7 x86
Код:
...
                GUISetState(@SW_RESTORE)
                _WinAPI_PostMessage(WinGetHandle("[class:Progman]"), $WM_USER + 83, 0x00040132, 1)
            ElseIf $flag = 0 Then
...
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
все просто отлично.
видимо другие программы отсылают такое же сообщение?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
joiner [?]
другие программы отсылают
Не думаю. Скорее всего, это сообщение посылает система, т.к. оно появляется при повторном нажатии кнопки "свернуть все окна" (т.е. при восстановлении всех свёрнутых окон), а также при восстановлении одного из окон после сворачивания всех окон. Но, если у окна нет кнопки на панели задач, то это сообщение отсутствует (как в вашем случае). Кстати, при сворачивании всех окон посылается это же сообщение с lParam = 0
Код:
_WinAPI_PostMessage(WinGetHandle("[class:Progman]"), $WM_USER + 83, 0x00040132, 0)
 
Верх