Войти

Показать полную графическую версию : [решено] Помогите разобраться


Centrinar
25-05-2010, 15:03
Есть код:

#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#requireadmin
#NoTrayIcon


Global $sProgs = 'Setup1.exe=Прог1|Seup2.exe=Прог2|Seup3.exe=Прог3|Seup4.exe=Прог4|Seup5.exe=Прог5'
Global $sProgs2 = 'Setup1.exe=Прог1|Seup2.exe=Прог2|Seup3.exe=Прог3|Seup4.exe=Прог4|Seup5.exe=Прог5'

Global Const $aProgs = StringSplit($sProgs, '|')
Global Const $aProgs2 = StringSplit($sProgs2, '|')
Global $anCheckBoxes[$aProgs[0]+1]
Global $aCheckedIcons[$aProgs[0]+1]
Global $aUnCheckedIcons[$aProgs[0]+1]
Global $aCompleteIcons[$aProgs[0]+1]
Global $aInstalledIcons[$aProgs[0]+1]
Global $anCheckBoxes2[$aProgs2[0]+1]
Global $aCheckedIcons2[$aProgs2[0]+1]
Global $aUnCheckedIcons2[$aProgs2[0]+1]
Global $aCompleteIcons2[$aProgs2[0]+1]
Global $aInstalledIcons2[$aProgs2[0]+1]

GUICreate("My GUI Tab",600,550)
GUISetBkColor(0xFFFFFF)
$nStart = GUICtrlCreateButton("Выполнить", 30, 510, 150, 30)
$tab=GUICtrlCreateTab (10,10, 580,480)
GUISetBkColor(0xFFFFFF)
$tab0=GUICtrlCreateTabitem ("tab0")
GUISetBkColor(0xFFFFFF)
$iTop = 35
$iLeft = 15
For $i = 1 To $aProgs[0]
$aCheckedIcons[$i] = "common\images\01.ico"
$aUnCheckedIcons[$i] = "common\images\01.ico"
$aInstalledIcons[$i] = "common\images\03.ico"
$aCompleteIcons[$i] = "common\images\02.ico"
$anCheckBoxes[$i] = _GUICtrlCreateCheckboxEx(StringRegExpReplace($aProgs[$i], '^.*=', ''), $iLeft, $iTop, -1, 15, $aUnCheckedIcons[$i])
$iTop += 20
If $iTop > 480 Then
$iTop = 10
$iLeft += 170
EndIf
Next

$tab1=GUICtrlCreateTabitem ("tab1")
GUISetBkColor(0xFFFFFF)
$iTop = 35
$iLeft = 15
For $s = 1 To $aProgs2[0]
$aCheckedIcons2[$s] = "common\images\01.ico"
$aUnCheckedIcons2[$s] = "common\images\01.ico"
$aInstalledIcons2[$s] = "common\images\03.ico"
$aCompleteIcons2[$s] = "common\images\02.ico"
$anCheckBoxes2[$s] = _GUICtrlCreateCheckboxEx(StringRegExpReplace($aProgs2[$s], '^.*=', ''), $iLeft, $iTop, -1, 15, $aUnCheckedIcons2[$s])
$iTop += 20
If $iTop > 480 Then
$iTop = 10
$iLeft += 170
EndIf
Next




GUICtrlCreateTabitem ("")

GUISetState ()

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $nStart
For $i = 1 To $aProgs[0]
$aCheckBox = $anCheckBoxes[$i]
If GUICtrlRead($aCheckBox[1]) = 1 Then
$iChecked_Counter += 1
GUICtrlSetImage($aCheckBox[0], $aInstalledIcons[$i])
$sProgName = StringRegExpReplace($aProgs[$i], '^.*=', '')
$sProgExe = StringRegExpReplace($aProgs[$i], '=.*$', '')
MsgBox(64, $sProgName, "zz", 3)
GUICtrlSetImage($aCheckBox[0], $aCompleteIcons[$i])
Else
GUICtrlSetImage($aCheckBox[0], $aUnCheckedIcons[$i])
EndIf
Next
For $s = 1 To $aProgs2[0]
$aCheckBox2 = $anCheckBoxes2[$s]
If GUICtrlRead($aCheckBox2[1]) = 1 Then
$sChecked_Counter += 1
GUICtrlSetImage($aCheckBox2[0], $aInstalledIcons2[$s])
$sProgName2 = StringRegExpReplace($aProgs2[$s], '^.*=', '')
$sProgExe2 = StringRegExpReplace($aProgs2[$s], '=.*$', '')
RunWait(@ScriptDir & $sProgExe2)
GUICtrlSetImage($aCheckBox2[0], $aCompleteIcons2[$s])
Else
GUICtrlSetImage($aCheckBox2[0], $aUnCheckedIcons2[$s])
EndIf
Next
$iChecked_Counter = 0
$sChecked_Counter = 0
EndSwitch
WEnd

Func _GUICtrlCreateCheckboxEx($sText, $iLeft, $iTop, $iWidth, $iHeight, $sIconFile="", $nIconIndex=0)
Local $aRetArr[2]

$aRetArr[0] = GUICtrlCreateIcon($sIconFile, $nIconIndex, $iLeft + 17, $iTop, 16, 16)
GUICtrlSetState(-1, $GUI_DISABLE)

$aRetArr[1] = GUICtrlCreateCheckbox(" " & $sText & " ", $iLeft, $iTop, $iWidth, $iHeight)
GUICtrlSetBkColor($aRetArr[1], 0xFFFFFF)

Return $aRetArr
EndFunc

как сделать чтобы в Global $sProgs2 я писал значения реестра, например Global $sProgs2 = '("HKEY_LOCAL_MACHINE\SOFTWARE", "TestKey", "REG_SZ", "Hello this is a test")=Прог5' и скрипт вместо RunWait(@ScriptDir & $sProgExe) выполнял RegWrite... а в остальных случаях возвращал RunWait(@ScriptDir & $sProgExe)

ven00m
25-05-2010, 15:40
А зачем все мешать в одну кучу, файлы и ключи реестра? Используй тогда уж reg файлы.
Как то так:

Global $sProgs2 = '%SystemRoot%\regedit.exe /s prog5.reg=Прог5'

Тем более что один чекбокс на ключ слишком жирно, не?

kaster
25-05-2010, 15:46
последние две твои темы конечно атас. Модератор(ы) проявляют невиданную выдержку и терпение к твоей персоне.
ну ду ладно, бог с ним - с темой. но ты неправильно задаешь вопрос, заставляя тех, кто (возможно) хочет тебе помочь выуживать у тебя информацию. к примеру
а в остальных случаях возвращал »
что за остальные случаи? и что за неостальные? ты же должен понимать, что скрипт выполняет различные вещи при различных условиях посредством операторов условия. какие условия поставил ты? я вот в упор не вижу. как отделить не то что машине (интерпретатору) а человеку один случай от другого/других? все что я смог разобрать - я писал значения реестра »
по всей видимости это должно было послужить условием. но как понимать в контексте выполнения скрипта твое "писал". как ты планируешь писать? перед выполнением? вобщем, как условие для оператора условий - оно не катит. ставь задачу и условия четче. во вторых, RunWait(@ScriptDir & $sProgExe) »
не содержит в себе объединяющий слеш. это к вопросу о синтаксисе. справка потерялась что ли?
в остальном, если справишься с своей невнимательностью и приучишь себя нормально ставить задачи, в первую очередь самому себе, то твой ответ сведется до примитива
if какое_то_условие then
RegWrite(нужный_ключ_реестра)
else
RunWait(путь_до_программы)
endif

Creat0R
25-05-2010, 18:17
Модератор(ы) проявляют невиданную выдержку и терпение к твоей персоне »
Да просто у модератора не всегда есть время каждый день по несколько раз заглядывать сюда...

Centrinar,
неудачное название темы, переименуй во что нибудь вменяемое, не смотря на то что тема решена (как?).

как сделать чтобы в Global $sProgs2 я писал значения реестра »
Global $sProgs2 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE", "TestKey", "REG_SZ", "Hello this is a test") & '=Прог5'
Но если там будет больше чем одна запись, то лучше это делать в цикле.




© OSzone.net 2001-2012