Что нового

Чтобы GUI сворачивался в трей, а при раскрытии требовал пароль

Suppir

Продвинутый
Сообщения
967
Репутация
62
Добрый день!

Прошу помочь. Кто сможет набросать такой GUI:

1. GUI Состоит из окна 800 * 600, содержит только один элемент - Editcontrol (поле для текста).
2. При запуске программа требует пароль ("1")
3. При сворачивании GUI, он сворачивается в трей
4. При разворачивании из трея, программа опять запрашивает пароль. При этом содержимое EditControl не отображается до тех пор, пока не введен пароль
5. При этом программа должна раз в секунду запускать функцию Func1().


Заранее спасибо!
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
OffTopic:
Suppir,
Самое сложное - реализовать третий пункт. ;D
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
madmasles
у меня загвоздка с четвертым :smile:
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Может так : (Сворачивается в трей при закрытии окна)
Код:
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#Include <GuiEdit.au3>
#include <ScrollBarConstants.au3>

Global $sText

If Not GetPassword() Then Exit

Opt("TrayMenuMode", 1)
$hForm = GUICreate('Test',460, 600, -1, -1, $WS_OVERLAPPEDWINDOW, $WS_EX_CLIENTEDGE)
GUISetBkColor(0xECE9D8)

$RestoreItem = TrayCreateItem("Restore")
$ExitItem = TrayCreateItem("Exit")
TraySetState(16)
TraySetClick(16)

$hEdit=GUICtrlCreateEdit ( '', 10, 5, 440, 500)
$ButSetData=GUICtrlCreateButton("Set Data",10,570, 60, 25)


GUISetState()

While 1
	$Msg = TrayGetMsg()
	Switch $Msg
		Case $ExitItem
			Exit
		Case $RestoreItem
			_RestoreFromTray_Proc($hForm)
			If  GetPassword() Then GUICtrlSetData($hEdit, $sText, 1)
	EndSwitch
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			$sText=GuiCtrlRead($hEdit)
			GUICtrlSetData($hEdit, "")
			GUISetState(@SW_HIDE)
			TraySetIcon ( "shell32.Dll",10)
			TraySetState(1)
		Case $ButSetData
			GUICtrlSetData($hEdit, ClipGet(), 1)
			ControlFocus ($hForm, "", $hEdit)
			_GUICtrlEdit_Scroll($hEdit, $SB_PAGEDOWN )
	EndSwitch
WEnd

Func _RestoreFromTray_Proc($hWnd)
	If BitAND(WinGetState($hWnd), 2) = 2 Then Return
	TraySetState(2)
	GUISetState(@SW_SHOW)
	GUISetState(@SW_RESTORE)
EndFunc

Func GetPassword()
	$passwd = InputBox("Security Check", "Enter your password.", "", "*")
	ConsoleWrite (".$passwd = " & $passwd & @LF)
	If $passwd=1 Then
		Return 1
	Else
		Return  0
	EndIf
EndFunc


Надо изменить : (Сворачивается в трей при закрытии окна)
Код:
;.......
Case $GUI_EVENT_CLOSE
 $sText=GuiCtrlRead($hEdit)
;.......

на : (Сворачивается в трей при сворачивании окна)
Код:
;...................
Case $GUI_EVENT_CLOSE
    Exit
Case $GUI_EVENT_minimize
   $sText=GuiCtrlRead($hEdit)
 ;......
 
Автор
S

Suppir

Продвинутый
Сообщения
967
Репутация
62
gregaz

прикольно, только не совсем так работает. Я развернул программу, она затребовала пароль. После чего я опять свернул ее, но она отображается на панели программ. А нужно, чтобы после сворачивания отображалась только в трее и нигде больше. Смысл программы, в том, чтобы постоянно в фоновом режиме собирать данные с помощью Func1(), а посмотреть эти данные может только пользователь, знающий пароль.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Suppir [?]
прикольно, только не совсем так работает. Я

Измени как я указал и отображения на панели программ не будет
В 1-м варианте я сдела сворачивание в трей при закрытии окна, а не при сворачивании(недочитал условие)
Во 2-м вроде то,что ты просишь



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

Suppir [?]
5. При этом программа должна раз в секунду запускать функцию Func1().


Код:
AdlibRegister("Func1", 1000)
 
Верх