Что нового

Как активировать окно программы при повторном запуске, если окно было скрыто

pvnn

Осваивающий
Сообщения
305
Репутация
32
Всем доброго времени суток!
Помогите пожалуйста разобраться в следующем.
Запущена программа, действие при закрытии окна ($GUI_EVENT_CLOSE) делает его скрытым @SW_HIDE.
Необходимо сделать так, чтобы при повторном запуске, окно сделалось видимым и активным.
Проблема в том, что после повторного запуска, перестают работать все контролы, например кнопка на форме не работает.

Код:
; Предотвращение повторного запуска программы
	If WinExists('[CLASS:AutoIt v3;TITLE:' & @ScriptName & ']') Then
      ; Активировать окно программы при повторном её запуске
		WinSetState('Main','',@SW_SHOW) 	; Сделать видимым окно
		WinActivate('Main')			; Сделать активным
		Exit
	EndIf
	AutoItWinSetTitle(@ScriptName)


#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

HotKeySet("{ESC}", "Show")

$Form1 = GUICreate("Main", 199, 149, 338, 319)
$Button1 = GUICtrlCreateButton("Button1", 56, 96, 75, 25)

GUISetState(@SW_SHOW)
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			GUISetState(@SW_HIDE,$Form1) ; Скрыть Окно
		Case $Button1
			MsgBox(64,'','Test')

	EndSwitch
WEnd


Func Show()
	GUISetState(@SW_SHOW,$Form1) ; Показать Окно
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Нужно заменить
Код:
GUISetState(@SW_HIDE,$Form1)

на
Код:
WinSetState($Form1, '', @SW_HIDE)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Вообще похоже на баг (скрытый GUI не реагирует на события)...

Код:
#include <GUIConstantsEx.au3>

$Form1 = GUICreate("Main", 199, 149, 338, 319)
$Button1 = GUICtrlCreateButton("Button1", 56, 96, 75, 25)

;GUISetState(@SW_SHOW)
ControlClick($Form1, '', $Button1)

While 1
	$nMsg = GUIGetMsg()
	
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			MsgBox(64, '', 'Test')
	EndSwitch
WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
У меня работает нормально, если добавить
Код:
Opt('GUICloseOnESC', 0)



Добавлено:
Сообщение автоматически объединено:

CreatoR [?]
Вообще похоже на баг (скрытый GUI не реагирует на события)...
Вроде, лечится это.
Код:
WinSetTrans($Form1, '', 0)
GUISetState(@SW_SHOW)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
CreatoR [?]
Это не лечение, это костыль
smiley.gif
.
Согласен, но, главное, что работает. :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
madmasles [?]
главное, что работает
Это получается, нужно будет всем приложениям работающим с GUI, прикручивать подобный костыль, чтобы можно было управлять элементами при скрытии окна.
Тяжело назвать подобное рабочим вариантом...

На мой взгляд это баг, и его нужно лечить на стороне AutoIt.
 
Автор
P

pvnn

Осваивающий
Сообщения
305
Репутация
32
Сделал, как написал CreatoR
Заменил вместо
Код:
GUISetState(@SW_HIDE,$Form1)
это
Код:
WinSetState($Form1, '', @SW_HIDE)


Так работает.

Интересный баг...

Ну будем считать что тема решена ;)
 
Верх