Что нового

Вызов одной функции с разными параметрами

Tuxzer92

Новичок
Сообщения
64
Репутация
0
Имеется форма с двумя чекбоксами и двумя кнопками.
Не знаю, как сделать так, чтобы при нажатии на первую кнопку вызывалась функция с одним параметром и выполнялось бы одно действие, а если нажата другая кнопка, то функция выполняла бы другие действия.
вот наработки:
Основной скрипт:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ListBoxConstants.au3>
#include <EditConstants.au3>
#include <ComboConstants.au3>

$SrvHost = "fs-zvk"
$etc = @ScriptDir & "\etc\"
$Client = $etc & "Client.exe"
$TestConnect = $etc & "Connect.exe"

$psexec= $etc & "psexec.exe"
$DWPath=@ProgramFilesDir & "\SolarWinds\DameWare Remote Support\DWRCC.EXE"
$DWPath9=@ProgramFilesDir & "\SolarWinds\DameWare Remote Support 9.0\DWRCC.EXE"
Local $Font = "Comic Sans MS", $Mylist
Const $Title= "Remote Assistance"
$Window = GUICreate($Title, 350, 440) ;Создаем окно
GUISetState(@SW_SHOW) ; показывает созданное окно
GUISetBkColor(0xE0FFFF) ;Фон окна

GUICtrlCreateGroup("Введите имя компьютера или IP: ", 60, 5, 210, 60)
$InputHost = GUICtrlCreateInput('', 65, 28, 200, 22, $WS_BORDER) ;оле ввода имени хоста

GUICtrlCreateGroup("Введите логин и пароль Администратора: ", 19, 85, 310, 135)

GUICtrlCreateLabel ("Введите логин", 110, 107, 75)
GUICtrlCreateLabel ("Введите пароль", 110, 159, 81)
$domain = GUICtrlCreateCheckbox("fgup-ycct6\", 27, 130, 72, 16)
$InputLogin = GUICtrlCreateInput('', 100, 128, 220, 22, $WS_BORDER)
$InputPass = GUICtrlCreateInput('', 100, 180, 220, 22, BitOR($ES_PASSWORD, $WS_BORDER))

$InstallButton = GUICtrlCreateButton("Установить",40, 300, 70) ;Создание кнопок
$ConnectButton = GUICtrlCreateButton("Подключиться",120, 300, 90) ;Создание кнопок
$EXITButton = GUICtrlCreateButton("Выход", 220, 300, 70)

$DWCheck = GUICtrlCreateCheckbox("Служба DameWare", 60, 240, 210, 16)
$UVNCCheck = GUICtrlCreateCheckbox("Сервер UltraVNC", 60, 270, 210, 16)

$Mylist = GUICtrlCreateList("", 7, 343, 335, 80, $WS_BORDER+$WS_VSCROLL+$LBS_NOINTEGRALHEIGHT)

GUICtrlSetState($InstallButton, $GUI_DISABLE)
GUICtrlSetState($ConnectButton, $GUI_DISABLE)

Func SetButtonState()
   If GUICtrlRead($DWCheck) = $GUI_CHECKED _
	  or GUICtrlRead($UVNCCheck) = $GUI_CHECKED _
   Then
	  GUICtrlSetState($InstallButton, $GUI_ENABLE)
	  GUICtrlSetState($ConnectButton, $GUI_ENABLE)
   Else
      GUICtrlSetState($InstallButton, $GUI_DISABLE)
	  GUICtrlSetState($ConnectButton, $GUI_DISABLE)
   EndIf
EndFunc

If FileExists($etc)=0 Then
   MsgBox(16,$Title,"Каталог "&$etc&" не найден!"&@CRLF&" Выход!",4096)
   Exit
EndIf

; Запускается цикл опроса GUI до тех пор пока окно не будет закрыто
While 1
   Switch GUIGetMsg()
	  Case $GUI_EVENT_CLOSE
		 ExitLoop
	  Case $DWCheck
		 SetButtonState()
	  Case $UVNCCheck
		 SetButtonState()
	  Case $InstallButton
		 $Host=GUICtrlRead($InputHost) ;Читаем, что ввели в поле хоста
		 $Login=GUICtrlRead($InputLogin) ;Читаем, что ввели в поле логина
		 $Pass=GUICtrlRead($InputPass) ;Читаем, что ввели в поле пароля
		 Start(Install)
	  Case $EXITButton
		 Exit
	  Case $ConnectButton
		 $Host=GUICtrlRead($InputHost)
		 $Login=GUICtrlRead($InputLogin) ;Читаем, что ввели в поле логина
		 $Pass=GUICtrlRead($InputPass)
		 Start(Connect)
   EndSwitch
WEnd

Func Start()
   GUICtrlSetData($mylist, "")
   ;Проверка на пустоту в полях
	  If $Host <> "" Then
		 GUICtrlSetData($Mylist, "Компьютер: " & $Host)
		 $Ping=Ping($Host,1)
		 $Ping2=Ping($SrvHost,1)
		 If ($Ping <> 0) Then
			If ($Ping2 <> 0) Then
			   GUICtrlSetData($Mylist, "Компьютер: " & $Host & " доступен )")
			   GUICtrlSetData($Mylist, "Компьютер: " & $SrvHost & " доступен )")
			   if $Login <> "" And $Pass <> "" Then
				  GUICtrlSetData($Mylist, "Выполняется проверка логина и пароля...")
				  If GUICtrlRead ($domain) = $GUI_CHECKED Then
					 $Login="fgup-ycct6\" & $Login
				  Else
					 $Login=$Host&"\" & $Login
				  EndIf
				  $Auth=RunWait($psexec & " \\" & $Host & " -u " & $Login & " -p " & $Pass & " cmd.exe /c ping 127.0.0.1 -n 1") ;Проверка правильности логина и пароля
				  If $Auth = 0 Then
					 GUICtrlSetData($Mylist, "Логин и пароль верны )")
					  Sleep(1000)
					  ;если функция Start() вызвана с параметром Install
					 If GUICtrlRead ($DWCheck) = $GUI_CHECKED Then
						DWInstall()
					 EndIf
					 If GUICtrlRead ($UVNCCheck) = $GUI_CHECKED Then
						UVNCInstall()
					 EndIf
					 ;Если функция Start() вызвана с параметром Connect
					 If GUICtrlRead ($DWCheck) = $GUI_CHECKED Then
						ConnectDW()
					 EndIf
					 If GUICtrlRead ($UVNCCheck) = $GUI_CHECKED Then
						ConnectUVNC()
					 EndIf
				  Else
					 MsgBox(48,$Title,"Не правильный логин или пароль "&@CRLF&"Попробуйте еще раз",4096)
				  EndIf
			   Else
				  MsgBox(48,$Title,"Введите логин и пароль!",4096)
			   EndIf
			Else
			   GUICtrlSetData($Mylist, "Компьютер: " & $SrvHost & " не отвечает (")
			   GUICtrlSetData($Mylist, "Выход... ")
			   Sleep(2000)
			   Exit
			EndIf
		 Else
			GUICtrlSetData($Mylist, "Компьютер: " & $Host & " не отвечает (")
			GUICtrlSetData($Mylist, "Выход... ")
			Sleep(2000)
			Exit
		 EndIf
	  Else
		 MsgBox(48,$Title,"Введите имя компьютера или IP!",4096)
	  EndIf
   EndFunc

   Func DWInstall()
   GUICtrlSetData($Mylist, "Запуск скрипта Client.exe на "& $Host)
   $Connect=RunWait($psexec & " -c -f "& "\\" & $Host & " -u " & $Login & " -p " & $Pass &" "& $Client & " idw")
   If $Connect=0 Then
	  GUICtrlSetData($Mylist, "Служба Dameware установлена и запущена на " & $Host)
	  sleep(2000)
   ElseIf $Connect=4 Then
	  MsgBox(16,$Title,"Произошла ошибка! " & "Код выхода: " & $Connect,4096)
	  sleep(1000)
	  Exit
   ElseIf $Connect=5 Then
	  MsgBox(16,$Title,"Перезапуск службы не удался",4096)
	  Sleep(1000)
	  Exit
   EndIf
EndFunc

Func UVNCInstall()
   GUICtrlSetData($Mylist, "Запуск скрипта Client.exe на "& $Host)
   $Connect=RunWait($psexec & " -c -f "& "\\" & $Host & " -u " & $Login & " -p " & $Pass &" "& $Client & " ivnc")

   If $Connect=0 Then
	   GUICtrlSetData($Mylist, "Служба UltraVNC уже установлена и запущена на " & $Host)
	   sleep(2000)
   ElseIf $Connect=4 Then
	  MsgBox(16,$Title,"Произошла ошибка! " & "Код выхода: " & $Connect,4096)
	  Exit
   ElseIf $Connect=5 Then
	  MsgBox(16,$Title,"Перезапуск службы не удался",4096)
	  Exit
   EndIf
EndFunc

Func ConnectDW()
   $LoginDW=GUICtrlRead($InputLogin)
   GUICtrlSetData($Mylist, "Запуск скрипта Connect.exe на "& $Host)
   $Connect=RunWait($psexec & " -c -f "& "\\" & $Host & " -u " & $Login & " -p " & $Pass &" "& $Client & " dw")
   If $Connect=0 Then
	  GUICtrlSetData($Mylist, "Служба Dameware уже работает на " & $Host&" Подключаюсь...")
	  sleep(2000)
	  if FileExists($DWPath) Then
		 GUICtrlSetData($Mylist, "Подключаюсь к: "& $Host)
		 Run($DWPath & " -c: -x: -h: -m:" & $Host & " -u:" & $LoginDW & " -p:" & $Pass & " -a:2")
	  ElseIf FileExists($DWPath9) Then
		 GUICtrlSetData($Mylist, "Подключаюсь к: "& $Host)
		 Run($DWPath9 & " -c: -x: -h: -m:" & $Host & " -u:" & $LoginDW & " -p:" & $Pass & " -a:2")
	  Else
		 MsgBox(48,$Title,"Dameware не найдена на вашем компьютере")
	  EndIf
   ElseIf $Connect=4 Then
	  MsgBox(16,$Title,"Произошла ошибка! " & "Код выхода: " & $Connect,4096)
	  sleep(1000)
	  Exit
   ElseIf $Connect=1 Then
	  MsgBox(16,$Title,"Служба не запущена!",4096)
	  Sleep(1000)
   ElseIf $Connect=2 Then
	  MsgBox(16,$Title,"Служба не существует!"&@CRLF&"Запустите установку",4096)
	  Sleep(1000)
   EndIf
EndFunc

Func ConnectUVNC()
   GUICtrlSetData($Mylist, "Запуск скрипта Connect.exe на "& $Host)
   $Connect=RunWait($psexec & " -c -f "& "\\" & $Host & " -u " & $Login & " -p " & $Pass &" "& $Client & " vnc")
   If $Connect=0 Then
	   GUICtrlSetData($Mylist, "Служба UltraVNC уже работает на " & $Host &" Подключаюсь...")
	   sleep(2000)
	  Run($etc & "vncviewer.exe " & $Host &" /password 123456")
   ElseIf $Connect=4 Then
	  MsgBox(16,$Title,"Произошла ошибка! " & "Код выхода: " & $Connect,4096)
	  sleep(1000)
	  Exit
   ElseIf $Connect=1 Then
	  MsgBox(16,$Title,"Служба не запущена!",4096)
	  Sleep(1000)
   ElseIf $Connect=2 Then
	  MsgBox(16,$Title,"Служба не существует!"&@CRLF&"Запустите установку",4096)
	  Sleep(1000)
   EndIf
EndFunc

Клиентская часть:
Код:
#include <Constants.au3>

if $CmdLine[0] > 0 Then
    Select
		 Case $CmdLine[1] = "dw"
            $service = "dwmrcs"
			Connect()
		 Case $CmdLine[1] = "vnc"
            $service = "uvnc_service"
			Connect()
		 Case $CmdLine[1] = "idw"
            $service = "dwmrcs"
			Install()
		 Case $CmdLine[1] = "ivnc"
            $service = "uvnc_service"
			Install()
    EndSelect
 EndIf

;Функция для получения вывода от sc
Func _StdOut($pid)
    Local $data
  ProcessWaitClose($pid)
  $data = StdOutRead($pid)
  If $data Then
    Return $data
  Else
    MsgBox(0, "", "Не удалось получить вывод программы.")
    Exit(4)
  EndIf
EndFunc

;Функция для проверки служы на существование
Func IsServiceInstalled(Const $service)
Local $code = RunWait("sc.exe query " & $service)
   If $code = 0 Then
	  Return 2 ;Существует
   Else
	  Return 3 ;Не существует
  EndIf
EndFunc

;Функция для проверки запуска службы
Func IsServiceRunning(Const $service)
  Local $pid = Run("sc.exe query " & $service, "", @SW_HIDE, $STDOUT_CHILD)
  Local $data = _StdOut($pid)
  ;MsgBox(0, "", $data)
  If StringRegExp($data, "[^\r\n]+RUNNING") Then
    ; "ЗАПУЩЕНА"
	Return 0
  ElseIf StringRegExp($data, "[^\r\n]+STOPPED") Then
    ;Return "ОСТАНОВЛЕНА"
	Return 1
  Else
    ;Return "ФИГ ЗНАЕТ"
	MsgBox(0,"","Не удалось определить статус службы: " & $service)
  EndIf
EndFunc

Func Connect()
$InstFunc=IsServiceInstalled($service)

If $InstFunc=2 Then
   $RunFunc=IsServiceRunning($service)
   If $RunFunc=0 Then
	  Exit 0
   ElseIf $RunFunc=1 Then
	  Exit 1
   EndIf

ElseIf $InstFunc=3 Then
     Exit 2
  EndIf
EndFunc

Func RunInstallService()
$Host = "fs-zvk" ;имя компьютера на котором лежат установочные файлы
$DWServiceInst32="\\" & $Host & "\FILES\Dameware\DW_Service_86.msi"
$DWServiceInst64="\\" & $Host & "\FILES\Dameware\DW_Service_64.msi"
$VNCDistr="\\" & $Host & "\FILES\SOFT\UVNC\uvnc.exe"
$VNCSettingsSource="\\" & $Host & "\FILES\SOFT\UVNC\ultravnc.ini"
$VNCDstFld="C:\UltraVNC\"
$VNCInf="\\" & $Host & "\FILES\SOFT\UVNC\uvnc.inf"

   If @OSArch ='X86' Then
	  $arch="x86"
   Elseif @OSArch ='X64' Then
	  $arch="x64"
   EndIf
   If $service = "dwmrcs" Then
	  If $arch="x86" Then
		 RunWait('msiexec /i ' & $DWServiceInst32 & ' /passive /norestart')
	  ElseIf $arch="x64" Then
		 RunWait('msiexec /i ' & $DWServiceInst64 & ' /passive /norestart')
	  EndIf
   ElseIf $service = "uvnc_service" Then
	  RunWait($VNCDistr & " /sp- /loadinf=" & $VNCInf & " /verysilent")
	  _FileCopy($VNCSettingsSource,$VNCDstFld)
   EndIf
EndFunc

Func Install()
$InstFunc=IsServiceInstalled($service)

If $InstFunc=2 Then
   $RunFunc=IsServiceRunning($service)
   If $RunFunc=0 Then
	  Exit 0
   ElseIf $RunFunc=1 Then
	  RunWait("sc start " & $service)
	  Sleep(2000)
	  $RunFunc=IsServiceRunning($service)
	  If $RunFunc=0 Then
		 Exit 0
	  ElseIf $RunFunc=1 Then
		 Exit 5
	  EndIf
   EndIf
ElseIf $InstFunc=3 Then
   RunInstallService()
   $RunFunc=IsServiceRunning($service)
   If $RunFunc=0 Then
	  Exit 0
   ElseIf $RunFunc=1 Then
	  Exit 5
   EndIf
EndIf
EndFunc

Func _FileCopy($fromFile,$tofile)
   Local $FOF_RESPOND_YES = 16
   Local $FOF_SIMPLEPROGRESS = 256
   $winShell = ObjCreate("shell.application")
   $winShell.namespace($tofile).CopyHere($fromFile,$FOF_RESPOND_YES)
EndFunc
 
Автор
T

Tuxzer92

Новичок
Сообщения
64
Репутация
0
Решил:
Код:
...
Case $ConnectButton
$Param="c"
Start($Param)

Case $InstallButton
$Param="i"
Start($Param)
...
Func Start($Param)
if $Param="i" Then
  If GUICtrlRead ($DWCheck) = $GUI_CHECKED Then
    DWInstall()
  EndIf
  if GUICtrlRead ($UVNCCheck) = $GUI_CHECKED Then
   UVNCInstall()
  EndIf
;Если функция Start() вызвана с параметром Connect
ElseIf $Param="c" Then
  If GUICtrlRead ($DWCheck) = $GUI_CHECKED Then
    ConnectDW()
  EndIf
  If GUICtrlRead ($UVNCCheck) = $GUI_CHECKED Then
    ConnectUVNC()
  EndIf
EndIf
 
Верх