Что нового

[Окна, Диалоги] Требуется развернуть собственный скрипт из трея

gberc

Новичок
Сообщения
6
Репутация
0
Помогите разобраться.
Мне требуется развернуть мой собственный скрипт из трея, при этом его работа не должна останавливаться ни в момент клика по значку скрипта в трее, ни когда он развернется.
Свернуть я смог, а развернуть не получается - не обрабатывается кнопка.
Читал http://autoit-script.ru/index.php?topic=1369.0
http://autoit-script.ru/index.php?topic=1435.0
http://autoit-script.ru/index.php?topic=1194.0 ответа не понял.

Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=C:\Program Files\AutoIt3\Icons\au3.ico
#AutoIt3Wrapper_UseUpx=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=c:\users\robotik\desktop\1\Форма для проверки файлов.kxf
$Form1_1 = GUICreate("Проверка наличия файлов и каталогов", 357, 174, 192, 124)
$Input1 = GUICtrlCreateInput("пример: C:\New_folder\*.txt", 8, 59, 337, 24)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Label1 = GUICtrlCreateLabel("Введите путь к каталогу для проверки", 8, 5, 338, 24)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$Button_open = GUICtrlCreateButton("Открыть каталог", 8, 91, 339, 25, $WS_GROUP)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Button_check = GUICtrlCreateButton("Начать проверку", 8, 123, 339, 25, $WS_GROUP)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Label3 = GUICtrlCreateLabel("Если не указывать расширение файла, то будет выполняться", 8, 24, 319, 17)
$Label4 = GUICtrlCreateLabel("проверка наличия указанного каталога", 9, 37, 206, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$Button_tray = TrayCreateItem ("Восстановить из трея") ; добавляет пункт меню в трее "Восстановить из трея"
AutoItSetOption ("TrayAutoPause", 0)
$TrayMsg = TrayGetMsg()

; главный цикл программы
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE ; обработка команды закрытия окна (работает, только до входа в цикл)
			Exit

    Switch $TrayMsg
        Case $Button_tray
            GUISetState(@SW_SHOW, $Form1_1)
            GUISetState(@SW_RESTORE, $Form1_1)
            TraySetState(2)
	EndSwitch


;################################################ кнопка ОТКРЫТЬ КАТАЛОГ
		Case $Button_open
$var_path = FileSelectFolder("Выберите каталог", "")
GUICtrlSetData($Input1, $var_path & '\')


;################################################ кнопка НАЧАТЬ ПРОВЕРКУ
		Case $Button_check ; обработка каманды кнопки "Начать проверку"
				While 1 ; бесконечный цикл проверки наличия файла, запускается по кнопке "Начать проверку"
$var_path = GUICtrlRead($Input1) ;функция для считывания введенных данных
If FileExists($var_path) Then ; если файл присутствует по указанному пути, то выдать сообщение и сделать задержку 30 секунд
    MsgBox(0, '', 'Появился файл!')
	Sleep(30000)
						Else
	Sleep(30000) ; если файл отсутствует по указанному пути, то сделать задержку 30 секунд , чтобы не просаживать ЦП
EndIf
				WEnd
;################################################

	EndSwitch
WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
gberc
Попробуйте так:
Код:
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>

Opt('TrayOnEventMode', 1)
Opt('TrayMenuMode', 1)

HotKeySet('{Esc}', '_Exit')

TraySetOnEvent($TRAY_EVENT_PRIMARYUP, '_HideShow')

$hGui = GUICreate('Test', 250, 200, -1, -1, BitOR($WS_POPUPWINDOW, $WS_THICKFRAME), _
		BitOR($WS_EX_CLIENTEDGE, $WS_EX_COMPOSITED))
GUISetBkColor(0xFFFFCC)
$nLabel = GUICtrlCreateLabel('', 50, 30, 150, 20, $SS_CENTER)
GUICtrlSetFont(-1, 11, 600, 0, 'Tahoma')
$nButton = GUICtrlCreateButton('Go', 75, 100, 100, 50)
$nButtonExit = GUICtrlCreateButton('X', 235, 0, 15, 15)
GUICtrlSetFont(-1, -1, 800)
GUICtrlSetCursor(-1, 0)
GUISetState()
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton
			For $i = 1 To 10000
				GUICtrlSetData($nLabel, StringFormat('%05d', $i))
				Sleep(100)
			Next
	EndSwitch
WEnd

Func _HideShow()
	If WinGetState($hGui) > 16 Then
		GUISetState(@SW_RESTORE)
	Else
		GUISetState(@SW_MINIMIZE)
	EndIf
#cs	
	Или так:
	If WinGetState($hGui) > 5 Then
		GUISetState(@SW_HIDE)
	Else
		GUISetState(@SW_SHOW)
	EndIf
#ce
EndFunc   ;==>_HideShow

Func _Exit()
	Exit
EndFunc   ;==>_Exit

Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
	Local $nNotifyCode = BitShift($wParam, 16)
	Local $nID = BitAND($wParam, 0x0000FFFF)
	Switch $nID
		Case $nButtonExit
			Switch $nNotifyCode
				Case $BN_CLICKED
					_Exit()
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND
 
Автор
G

gberc

Новичок
Сообщения
6
Репутация
0
madmasles, спасибо.
А как закрыть скрипт?
 
Автор
G

gberc

Новичок
Сообщения
6
Репутация
0
madmasles, :wacko:
у тебя в первом варианте тестовая программа сворачивается, но не закрывается.
а во втором - закрывается, но не сворачивается.
Ты, если можешь, то объясни, как сделать "разворачиваение" скрипта из трея или укажи где почитать.
Я пользуюсь актуальной русской справкой, но этот вопрос для меня не ясен.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
gberc [?]
во втором - закрывается, но не сворачивается.
В моем примере, на Windows XP и на 7-64, на 7 не проверял, окно сворачивается - разворачивается только при клике левой кнопкой мыши по иконке в трее.
или укажи где почитать
Так в справке и читайте описание функций, которые есть в моем скрипте. :smile:

Еще код изменил:
Код:
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>

Opt('TrayOnEventMode', 1)
Opt('TrayMenuMode', 1)

$fCancel = False

HotKeySet('{Esc}', '_Exit')

TraySetOnEvent($TRAY_EVENT_PRIMARYUP, '_HideShow')

$hGui = GUICreate('Test', 250, 200, -1, -1, BitOR($WS_POPUPWINDOW, $WS_THICKFRAME), _
        BitOR($WS_EX_CLIENTEDGE, $WS_EX_COMPOSITED))
GUISetBkColor(0xFFFFCC)
$nLabel = GUICtrlCreateLabel(StringFormat('%05d', 0), 50, 30, 150, 20, $SS_CENTER)
GUICtrlSetFont(-1, 11, 600, 0, 'Tahoma')
$nButtonStart = GUICtrlCreateButton('Start', 30, 100, 80, 50)
$nButtonStop = GUICtrlCreateButton('Stop', 140, 100, 80, 50)
$nButtonExit = GUICtrlCreateButton('X', 235, 0, 15, 15)
GUICtrlSetFont(-1, -1, 800)
GUICtrlSetCursor(-1, 0)
GUICtrlSetTip(-1, 'Выход')
$nButtonMin = GUICtrlCreateButton(Chr(151), 219, 0, 15, 15)
GUICtrlSetFont(-1, -1, 800)
GUICtrlSetCursor(-1, 0)
GUICtrlSetTip(-1, 'Минимизировать')
GUISetState()
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nButtonStart
            $fCancel = False
            GUICtrlSetState($nButtonStart, $GUI_DISABLE)
            GUICtrlSetState($nButtonStop, $GUI_ENABLE)
            For $i = 1 To 10000
                If $fCancel Then ExitLoop
                GUICtrlSetData($nLabel, StringFormat('%05d', $i))
                Sleep(100)
            Next
            GUICtrlSetState($nButtonStart, $GUI_ENABLE)
            GUICtrlSetState($nButtonStop, $GUI_DISABLE)
    EndSwitch
WEnd

Func _HideShow()
    If WinGetState($hGui) > 16 Then
        GUISetState(@SW_RESTORE)
    Else
        GUISetState(@SW_MINIMIZE)
    EndIf
    #cs
        Или так:
        If WinGetState($hGui) > 5 Then
        GUISetState(@SW_HIDE)
        Else
        GUISetState(@SW_SHOW)
        EndIf
    #ce
EndFunc   ;==>_HideShow

Func _Exit()
    Exit
EndFunc   ;==>_Exit

Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0x0000FFFF)
    Switch $nID
        Case $nButtonExit
            Switch $nNotifyCode
                Case $BN_CLICKED
                    _Exit()
            EndSwitch
        Case $nButtonMin
            Switch $nNotifyCode
                Case $BN_CLICKED
                    GUISetState(@SW_MINIMIZE)
                    ;GUISetState(@SW_HIDE)
            EndSwitch
        Case $nButtonStop
            Switch $nNotifyCode
                Case $BN_CLICKED
                    $fCancel = True
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND
 
Верх