Что нового

[Элементы GUI] Оптимизация программы "Launcher System For DynDns"

oneDmitry

Чайник
Сообщения
55
Репутация
3
У меня такая проблема, в программе есть 4 цикла которые постоянно работают, то есть While 1, я никак не могу сделать что бы они работали вместе:
1 цикл - открытие дочернего окна
2 цикл - запуск *.exe
3 цикл - 2 горячих клавиши которые устанавливаются в дочернем окне, но работать должны глобально
4 цикл - запись данных в реестр и закрытие дочернего окна

я нажимаю на кнопку к примеру запуска и он не запускает *.exe, или приходится по 10 раз нажимать на горячею клавишу что бы свернуть приложение.

Код:
While 1
    $msg = GUIGetMsg(1)
    Select
        case $msg[0] = $Button2
            GUISetState(@SW_SHOW, $Form2)
        Case $msg[0] = $GUI_EVENT_CLOSE
            If $msg[1] = $Form2 Then
                GUISetState(@SW_HIDE, $Form2)
            ElseIf $msg[1] = $Form1 Then
                Exit
            EndIf

    EndSelect
WEnd	
While 1
$nMsg = GUIGetMsg()
Switch $msg
	Case $GUI_EVENT_CLOSE
		ExitLoop
	Case $Button1
		Run("prog.exe")
		
	EndSwitch
WEnd
;------------------------------------------ установка гоячих клавиш на Show & Hide -----------------------	
while 1
$msg = GUIGetMsg()
HotKeySet('{' & GUICtrlRead($Combo2) & '}', '_Show')
	Switch $msg
		Case $GUI_EVENT_CLOSE
			GUIDelete($Form2)
		ExitLoop
	EndSwitch
					
;$msg = GUIGetMsg()
HotKeySet('{' & GUICtrlRead($Combo3) & '}', '_Hide')
	Switch $msg
		Case $GUI_EVENT_CLOSE
			GUIDelete($Form2)
			ExitLoop
	EndSwitch
    $Msg = GUIGetMsg(1)
    Switch $Msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $ButtonSave
            $cParam1 = (GUICtrlRead($Checkbox1) = $GUI_CHECKED)
            $cParam2 = (GUICtrlRead($Checkbox2) = $GUI_CHECKED)
            $cParam3 = (GUICtrlRead($Checkbox3) = $GUI_CHECKED)
            $cParam4 = (GUICtrlRead($Checkbox4) = $GUI_CHECKED)
            $cParam5 = BitOR((GUICtrlRead($Radio2) = $GUI_CHECKED) * 1, (GUICtrlRead($Radio3) = $GUI_CHECKED) * 2)
            $cParam6 = GUICtrlRead($Input)
            _WriteRegistry()
            ExitLoop
    EndSwitch
WEnd


можно как нибуть все эти циклы объединить что ли ?
или сделать что бы
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 517
Репутация
321
Re: [Процессы] Оптимизация программы

Что то код вообще непонятно запутанный да еще вдобавок обрезан. Отправте весь код программы.

Update

Из - за неимения полного кода программы смог сделать только это:
Код:
While 1
HotKeySet('{' & GUICtrlRead($Combo2) & '}', '_Show')
HotKeySet('{' & GUICtrlRead($Combo3) & '}', '_Hide')
   $msg = GUIGetMsg(1)
    Select
        Case $msg[0] = $Button2
            GUISetState(@SW_SHOW, $Form2)
        Case $msg[0] = $GUI_EVENT_CLOSE
            If $msg[1] = $Form2 Then
                GUISetState(@SW_HIDE, $Form2)
            ElseIf $msg[1] = $Form1 Then
                Exit
            EndIf
		Case $msg[0] = $Button1
			Run("prog.exe")
		Case $msg[0] = $ButtonSave
            $cParam1 = (GUICtrlRead($Checkbox1) = $GUI_CHECKED)
            $cParam2 = (GUICtrlRead($Checkbox2) = $GUI_CHECKED)
            $cParam3 = (GUICtrlRead($Checkbox3) = $GUI_CHECKED)
            $cParam4 = (GUICtrlRead($Checkbox4) = $GUI_CHECKED)
            $cParam5 = BitOR((GUICtrlRead($Radio2) = $GUI_CHECKED) * 1, (GUICtrlRead($Radio3) = $GUI_CHECKED) * 2)
            $cParam6 = GUICtrlRead($Input)
            _WriteRegistry()
            ExitLoop
    EndSelect
WEnd


Запомните! Опрос окна на события должен быть один, а не три!!!
 
Автор
O

oneDmitry

Чайник
Сообщения
55
Репутация
3
Re: [Процессы] Оптимизация программы

вот весь код
Код:
#NoTrayIcon
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <MouseSetOnEvent_UDF.au3>
#include <Misc.au3>
Global Const $REG_KEY_NAME = 'HKEY_CURRENT_USER\Software\Webzen\Mu\Config'

$cParam1 = 0 ; Checkbox1 MusicOnOff
$cParam2 = 0 ; Checkbox2 SoundOnOff
$cParam3 = 0 ; Checkbox3 WindowMode
$cParam4 = 0 ; Checkbox4 Login On/Off
$cParam5 = 0 ; 0 - Radio1; 1 - Radio2; 2 - Radio3; Resolution
$cParam6 = 'Login Name' ; Input ID

_ReadRegistry()
#Region ### START Koda GUI section ### Form=C:\Documents and Settings\Loner\Рабочий стол\Лаунчер.kxf
$Form1 = GUICreate("Launcher System For DynDns", 310, 428, 404, 126)
$Button1 = GUICtrlCreateButton("Connect", 3, 392, 147, 33)
GUICtrlSetFont(-1, 10, 800, 0, "Comic Sans MS")
$Button2 = GUICtrlCreateButton("Option", 160, 392, 147, 33)
GUICtrlSetFont(-1, 10, 800, 0, "Comic Sans MS")
$Pic1 = GUICtrlCreatePic("C:\Documents and Settings\Loner\Рабочий стол\_2__.JPG", 3, 3, 303, 385, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
GUISetState(@SW_SHOW)
;------------------------------------------ Окно Options --------------------------------------------
#Region ### START Koda GUI section ### Form=c:\documents and settings\loner\Рабочий стол\options.kxf
$Form2 = GUICreate("Options", 274, 373, 352, 201)
$Group1 = GUICtrlCreateGroup("Resolution", 8, 288, 125, 47)
$Combo1 = GUICtrlCreateCombo("Combo1", 16, 304, 109, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Other", 8, 8, 257, 65)
$Checkbox1 = GUICtrlCreateCheckbox("Sound On/Off", 16, 24, 89, 17)
GUICtrlSetState(-1, BitOR($GUI_CHECKED * $cParam1, $GUI_UNCHECKED * (Not $cParam1)))
$Checkbox2 = GUICtrlCreateCheckbox("Music On/Off", 16, 48, 89, 17)
GUICtrlSetState(-1, BitOR($GUI_CHECKED * $cParam2, $GUI_UNCHECKED * (Not $cParam2)))
$Checkbox3 = GUICtrlCreateCheckbox("Window Mode", 160, 24, 89, 17)
GUICtrlSetState(-1, BitOR($GUI_CHECKED * $cParam3, $GUI_UNCHECKED * (Not $cParam3)))
$Checkbox4 = GUICtrlCreateCheckbox("AutoLogin", 160, 48, 89, 17, BitOR($BS_CHECKBOX,$WS_TABSTOP))
GUICtrlSetState(-1, BitOR($GUI_CHECKED * $cParam4, $GUI_UNCHECKED * (Not $cParam4)))
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup("Name", 8, 240, 125, 47)
$Input = GUICtrlCreateInput($cParam6, 16, 256, 109, 21)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("Password", 140, 240, 125, 47)
$Input2 = GUICtrlCreateInput("Input1", 148, 256, 109, 21, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL,$ES_READONLY))
GUICtrlCreateGroup("", -99, -99, 1, 1)
$ButtonSave = GUICtrlCreateButton("Accept", 140, 292, 125, 43)
GUICtrlSetFont(-1, 12, 800, 0, "Comic Sans MS")
$Pic1 = GUICtrlCreatePic("C:\Documents and Settings\Loner\Рабочий стол\DynDns.jpg", 8, 150, 257, 89, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
$Group5 = GUICtrlCreateGroup("Resolution", 8, 80, 257, 65)
$Radio1 = GUICtrlCreateRadio("640x480", 16, 96, 81, 17)
GUICtrlSetState(-1, BitOR($GUI_CHECKED * ($cParam5 = 0), $GUI_UNCHECKED * ($cParam5 <> 0)))
$Radio2 = GUICtrlCreateRadio("1024x768", 160, 96, 73, 17)
GUICtrlSetState(-1, BitOR($GUI_CHECKED * ($cParam5 = 1), $GUI_UNCHECKED * ($cParam5 <> 1)))
$Radio3 = GUICtrlCreateRadio("800x600", 16, 120, 81, 17)
GUICtrlSetState(-1, BitOR($GUI_CHECKED * ($cParam5 = 2), $GUI_UNCHECKED * ($cParam5 <> 2)))
$Radio4 = GUICtrlCreateRadio("1280x1024", 160, 120, 81, 17)
GUICtrlSetState(-1, BitOR($GUI_CHECKED * ($cParam5 = 3), $GUI_UNCHECKED * ($cParam5 <> 3)))
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Combo2 = GUICtrlCreateCombo("Show", 8, 344, 125, 25)
GUICtrlSetData($Combo2, 'F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12');, 'F5')
$Combo3 = GUICtrlCreateCombo("Hide", 140, 344, 125, 25)
GUICtrlSetData($Combo3, 'F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12');, 'F6')
GUISetState(@SW_HIDE, $Form2)
#EndRegion ### END Koda GUI section ###
;------------------------------------------ показать окно Options при нажатии Button2 -----------------------
While 1
    $msg = GUIGetMsg(1)
    Select
        case $msg[0] = $Button2
            GUISetState(@SW_SHOW, $Form2)
        Case $msg[0] = $GUI_EVENT_CLOSE
            If $msg[1] = $Form2 Then
                GUISetState(@SW_HIDE, $Form2)
            ElseIf $msg[1] = $Form1 Then
                Exit
            EndIf

    EndSelect
WEnd

While 1
    $Msg = GUIGetMsg()
    Switch $Msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $ButtonSave
            $cParam1 = (GUICtrlRead($Checkbox1) = $GUI_CHECKED)
            $cParam2 = (GUICtrlRead($Checkbox2) = $GUI_CHECKED)
            $cParam3 = (GUICtrlRead($Checkbox3) = $GUI_CHECKED)
            $cParam4 = (GUICtrlRead($Checkbox4) = $GUI_CHECKED)
            $cParam5 = BitOR((GUICtrlRead($Radio2) = $GUI_CHECKED) * 0, (GUICtrlRead($Radio3) = $GUI_CHECKED) * 3)
            $cParam6 = GUICtrlRead($Input)
            _WriteRegistry()
            ExitLoop
    EndSwitch
WEnd
#EndRegion ### END Koda GUI section ###


;------------------------------------------ запуск main.exe при нажатии на Button1 -----------------------
While 1
$nMsg = GUIGetMsg()
Switch $nmsg
	Case $GUI_EVENT_CLOSE
		ExitLoop
		;Sleep(20000)
	Case $Button1
		Run("main.exe /end /LUA:OFF", "")
		;Run("main.exe /end /LUA:OFF", "", @ScriptDir, "open")
		;ShellExecute("main.exe /end /LUA:OFF", "", @ScriptDir, "open")
	EndSwitch
;------------------------------------------ установка гоячих клавиш на Show & Hide -----------------------	
$msg = GUIGetMsg()
HotKeySet('{' & GUICtrlRead($Combo2) & '}', '_Show')
	Switch $msg
		Case $GUI_EVENT_CLOSE
			GUIDelete($Form2)
		ExitLoop
	EndSwitch
					
$msg = GUIGetMsg()
HotKeySet('{' & GUICtrlRead($Combo3) & '}', '_Hide')
	Switch $msg
		Case $GUI_EVENT_CLOSE
			GUIDelete($Form2)
			ExitLoop
	EndSwitch
WEnd
;------------------------------------------ функции Show & Hide -----------------------	
Func _Hide()
	WinSetState("MU", "", @SW_HIDE)
EndFunc
Func _Show()
	WinSetState("MU", "", @SW_SHOW)
EndFunc
Func _ReadRegistry()
    $cParam1 = _ValueCheck(_RegRead($REG_KEY_NAME, 'MusicOnOff', 'REG_DWORD', $cParam1), 0, 1)
    $cParam2 = _ValueCheck(_RegRead($REG_KEY_NAME, 'SoundOnOff', 'REG_DWORD', $cParam2), 0, 1)
    $cParam3 = _ValueCheck(_RegRead($REG_KEY_NAME, 'WindowMode', 'REG_DWORD', $cParam3), 0, 1)
    $cParam4 = _ValueCheck(_RegRead($REG_KEY_NAME, 'Login', 'REG_DWORD', $cParam4), 0, 1)
    $cParam5 = _ValueCheck(_RegRead($REG_KEY_NAME, 'Resolution', 'REG_DWORD', $cParam5), 1, 3)
    $cParam6 = _RegRead($REG_KEY_NAME, 'ID', 'REG_SZ', $cParam6)
EndFunc   ;==>_ReadRegistry

Func _RegRead($Key, $Value, $Type, $Default)

    Local $Val = RegRead($Key, $Value)

    If @error Then
        RegWrite($Key, $Value, $Type, $Default)
        Return $Default
    EndIf

    Switch StringUpper($Type)
        Case 'REG_SZ', 'REG_MULTI_SZ', 'REG_EXPAND_SZ'
            If Not IsString($Val) Then
                Return SetError(1, 0, $Default)
            EndIf
        Case 'REG_BINARY'
            If Not IsBinary($Val) Then
                Return SetError(1, 0, $Default)
            EndIf
        Case 'REG_DWORD'
            If Not IsInt($Val) Then
                Return SetError(1, 0, $Default)
            EndIf
        Case Else
            Return SetError(1, 0, $Default)
    EndSwitch
    Return $Val
EndFunc   ;==>_RegRead

Func _ValueCheck($iValue, $iMin, $iMax)
    If $iValue < $iMin Then
        Return $iMin
    EndIf
    If $iValue > $iMax Then
        Return $iMax
    EndIf
    Return $iValue
EndFunc   ;==>_ValueCheck

Func _WriteRegistry()
    RegWrite($REG_KEY_NAME, 'MusicOnOff', 'REG_DWORD', $cParam1)
    RegWrite($REG_KEY_NAME, 'SoundOnOff', 'REG_DWORD', $cParam2)
    RegWrite($REG_KEY_NAME, 'WindowMode', 'REG_DWORD', $cParam3)
    RegWrite($REG_KEY_NAME, 'Login', 'REG_DWORD', $cParam4)
    RegWrite($REG_KEY_NAME, 'Resolution', 'REG_DWORD', $cParam5)
    RegWrite($REG_KEY_NAME, 'ID', 'REG_SZ', $cParam6)
EndFunc   ;==>_WriteRegistry

;------------------------------------------ Защита от повторгного запуска программы -----------------------
if _Singleton("Start.exe",1) = 0 Then
    Msgbox(0,"Предупреждение","Одна копия уже запущена.")
    Exit
EndIf
;Msgbox(0,"Предупреждение","Тестовая версия программы")
Local $arrWinList = WinList("[CLASS:AutoIt v3;TITLE:AutoIt v3]")
Local $i, $strHwnd

; Перебираем их все
For $i = 1 to $arrWinList[0][0]
	; Строим хэндл очередного окна
	$strHwnd = "[HANDLE:" & Hex($arrWinList[$i][1]) & "]"
	
	; Если это окно не текущего процесса…
	If WinGetProcess($strHwnd) <> @AutoItPID Then
		; Пробуем закрыть его
		WinClose($strHwnd)
	EndIf
Next
While 1
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exitloop
EndSwitch
WEnd

:laugh:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
Re: [Процессы] Оптимизация программы

Зачем в цикле HotKeySet?! :laugh:

Код:
;.тут начало, построение GUI и т.п.

HotKeySet('{' & GUICtrlRead($Combo2) & '}', '_Show')
HotKeySet('{' & GUICtrlRead($Combo3) & '}', '_Hide')

While 1
    $nMsg = GUIGetMsg(1)

    Switch $nMsg[0]
        Case $Button2
            GUISetState(@SW_SHOW, $Form2)
        Case $GUI_EVENT_CLOSE
            If $nMsg[1] = $Form1 Then Exit
            If $nMsg[1] = $Form2 Then GUISetState(@SW_HIDE, $Form2)
        Case $Button1
            Run("prog.exe")
        Case $ButtonSave
            $cParam1 = (GUICtrlRead($Checkbox1) = $GUI_CHECKED)
            $cParam2 = (GUICtrlRead($Checkbox2) = $GUI_CHECKED)
            $cParam3 = (GUICtrlRead($Checkbox3) = $GUI_CHECKED)
            $cParam4 = (GUICtrlRead($Checkbox4) = $GUI_CHECKED)
            $cParam5 = BitOR((GUICtrlRead($Radio2) = $GUI_CHECKED) * 1, (GUICtrlRead($Radio3) = $GUI_CHECKED) * 2)
            $cParam6 = GUICtrlRead($Input)
            _WriteRegistry()
            ExitLoop
        Case $Combo2
            HotKeySet('{' & GUICtrlRead($Combo2) & '}', '_Show')
        Case $Combo3
            HotKeySet('{' & GUICtrlRead($Combo3) & '}', '_Show')
    EndSwitch
WEnd


P.S
И при чём тут [Процессы]? это GUI.
 
Автор
O

oneDmitry

Чайник
Сообщения
55
Репутация
3
процесс выполнения программы я имел в виду, вставил код, после того как нажимаю кнопку Accept то окно не закрывается никак, только через диспетчер, как исправить ?

подправил код вот так
Код:
While 1
    $nMsg = GUIGetMsg(1)

    Switch $nMsg[0]
		Case $Button2
			GUISetState(@SW_HIDE, $Form1)
            GUISetState(@SW_SHOW, $Form2)
        Case $GUI_EVENT_CLOSE
            ;GUISetState(@SW_SHOW, $Form1)
            ;If $nMsg[1] = $Form2 Then GUISetState(@SW_HIDE, $Form2)
        Case $Button1
            Run("prog.exe")
        Case $ButtonSave
            $cParam1 = (GUICtrlRead($Checkbox1) = $GUI_CHECKED)
            $cParam2 = (GUICtrlRead($Checkbox2) = $GUI_CHECKED)
            $cParam3 = (GUICtrlRead($Checkbox3) = $GUI_CHECKED)
            $cParam4 = (GUICtrlRead($Checkbox4) = $GUI_CHECKED)
            $cParam5 = BitOR((GUICtrlRead($Radio2) = $GUI_CHECKED) * 1, (GUICtrlRead($Radio3) = $GUI_CHECKED) * 2)
            $cParam6 = GUICtrlRead($Input)
            _WriteRegistry()
			If $nMsg[1] = $Form2 Then GUISetState(@SW_HIDE, $Form2)
			GUISetState(@SW_SHOW, $Form1)
        Case $Combo2
            HotKeySet('{' & GUICtrlRead($Combo2) & '}', '_Show')
        Case $Combo3
            HotKeySet('{' & GUICtrlRead($Combo3) & '}', '_Hide')
    EndSwitch
WEnd

как сделать что бы теперь при нажатии на крестик программа закрывалась ?
 

SyDr

Сидра
Сообщения
651
Репутация
158
Код:
Case $GUI_EVENT_CLOSE
            Exit
 
Автор
O

oneDmitry

Чайник
Сообщения
55
Репутация
3
+1 всем проблема решена, всем спасибо :laugh:
 
Верх