Автор Тема: Как активировать окно программы при повторном запуске, если окно было скрыто  (Прочитано 3671 раз)

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

Оффлайн pvnn [?]

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

Код: AutoIt [Выделить]
 ; Предотвращение повторного запуска программы
    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
 


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


Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7762
  • Репутация: 2275
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2


Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7762
  • Репутация: 2275
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
Вообще похоже на баг (скрытый GUI не реагирует на события)...

Код: AutoIt [Выделить]
#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 [?]

  • Глобальный модератор
  • *
  • Сообщений: 7789
  • Репутация: 2312
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
У меня работает нормально, если добавить
Код: AutoIt [Выделить]
Opt('GUICloseOnESC', 0)



Добавлено: Июль 25, 2013, 07:51:22
CreatoR  [?]
Цитировать
Вообще похоже на баг (скрытый GUI не реагирует на события)...
Вроде, лечится это.
Код: AutoIt [Выделить]

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


Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7762
  • Репутация: 2275
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
madmasles  [?]
Цитировать
Вроде, лечится это
Это не лечение, это костыль :).

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7789
  • Репутация: 2312
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
CreatoR  [?]
Цитировать
Это не лечение, это костыль .
Согласен, но, главное, что работает. :)

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 7762
  • Репутация: 2275
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.10.2
madmasles  [?]
Цитировать
главное, что работает
Это получается, нужно будет всем приложениям работающим с GUI, прикручивать подобный костыль, чтобы можно было управлять элементами при скрытии окна.
Тяжело назвать подобное рабочим вариантом...

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

Оффлайн pvnn [?]

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

  • Автор темы
  • Репутация: 10
    • Награды
  • Версия AutoIt: 3.3.12.0
Сделал, как написал CreatoR
Заменил вместо
Код: AutoIt [Выделить]
это
Код: AutoIt [Выделить]
WinSetState($Form1, '', @SW_HIDE)


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

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

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

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


 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
6218 Просмотров
Последний ответ Май 04, 2010, 09:32:39
от AZJIO
4 Ответов
5300 Просмотров
Последний ответ Январь 19, 2012, 17:17:43
от AZJIO
13 Ответов
8113 Просмотров
Последний ответ Февраль 27, 2012, 14:06:48
от Kaster
3 Ответов
1635 Просмотров
Последний ответ Март 07, 2012, 23:01:18
от CreatoR
1 Ответов
2365 Просмотров
Последний ответ Сентябрь 19, 2012, 07:49:40
от Dm666
4 Ответов
2651 Просмотров
Последний ответ Декабрь 10, 2012, 14:05:33
от Voldemar
11 Ответов
3692 Просмотров
Последний ответ Май 07, 2013, 14:46:37
от Димон
0 Ответов
1240 Просмотров
Последний ответ Июль 25, 2013, 07:22:19
от madmasles
1 Ответов
1146 Просмотров
Последний ответ Ноябрь 05, 2013, 11:28:10
от InnI
7 Ответов
1299 Просмотров
Последний ответ Ноябрь 15, 2014, 13:01:01
от Suppir