Что нового

[Файловая система] Ключи запуска приложения на AutoIT

Статус
Закрыто для дальнейших ответов.

Renz

Осваивающий
Сообщения
63
Репутация
36
Как реализовать использование ключей для запуска приложений на AutoIt ?
Например mytest.exe \key
По форуму ничего не нашел, кроме исходника http://autoit-script.ru/index.php?topic=2536.0 . Возникло больше вопросов, чем ответов.

Часть кода:
Код:
Func _CommandLineCheck()
	If $CmdLine[0] Then
		Switch $CmdLine[1]
			Case '-u', '/u', '-unload', '/unload'
				_SendMsg($MSG_UNLOAD)
				Exit
			Case '-c', '/c', '-cd', '/cd'
				$Compact = 1
			Case Else

		EndSwitch
	EndIf
EndFunc   ;==>_CommandLineCheck


Что за переменная: $CmdLine и откуда береn значения?
Может у кого-нибудь есть пример попроще?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Renz
Скомпилируйте это как test.exe:
Код:
If Not $CmdLine[0] Then
	MsgBox(16, '', 'Нет параметров')
	Exit
EndIf
MsgBox(64, 'Все параметры', $CmdLineRaw)
MsgBox(64, 'Инфо', 'Скрипт запущен с ' & $CmdLine[0] & ' параметрами')
For $i = 1 To $CmdLine[0]
	MsgBox(64, $i, $CmdLine[$i])
Next
Положите в одну папку с этим:
Код:
Run(@ScriptDir & '\test.exe Param1 Param2 Param3 Param4 Param5')
И из второго запустите первый.
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
Renz [?]
Что за переменная: $CmdLine и откуда береn значения?
А из командной строки и берёт.

$CmdLine[0] - колличество параметров
$CmdLine[1] - первый параметр
$CmdLine[2] - второй параметр итд
$CmdLineRaw - все параметры одной строкой

http://www.autoitscript.com/autoit3/docs/intro/running.htm
http://autoit-script.ru/index.php?topic=984.0
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
100000000 лет назад рисовал примерчик:
Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_outfile=Testing command line.exe
#AutoIt3Wrapper_Compression=4
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

;~ Форма парсинга (чтения), переданных параметров командной строки скрипту, функцией _Cmd_Read:
;~ 		/param_name:"paran value"
;~ 		слеш + имя параметра + двоеточие + значение параметра В КАВЫЧКАХ

;~ Справка по командной строке скрипта
;~ 		Русская: Справка > Применение AutoIt > Параметры командной строки		http://www.autoitscript.com/autoit3/docs.shtml
;~ 		Английская: Help > Using AutoIt > Command Line Parameters
;~ 		Английская On-line: http://www.autoitscript.com/autoit3/docs/intro/running.htm#CommandLine

#region: - Options
    Opt('GUIOnEventMode',       1) 
    Opt('MustDeclareVars',      1) 
    Opt('TrayIconDebug',        1) 
    Opt('TrayIconHide',         0) 
#endregion

#region: - Include
    #include <GuiConstantsEx.au3>
	#include <GuiEdit.au3>
    #include <WindowsConstants.au3> 
#endregion

#region: - HotKey, Globals, Main Win 
	HotKeySet('{ESC}', '_Pro_Exit')
	$CmdLineRaw = StringRegExpReplace(StringStripWS($CmdLineRaw, 1+2), '(?U)(?i)(\/ErrorStdOut ".+")\s*(.*)', '\1' & @CRLF & @CRLF & '\2')
	
	Global  $hMainWin, $hCmdLine_View, $hCmdLine_Read, $hCmdLine_Send
	
	$hMainWin = GUICreate('Testing command line', 400, 480, -1, -1) 
        GUISetOnEvent($GUI_EVENT_CLOSE, '_Pro_Exit') 
#endregion 
 
#region: - Group: Переданные параметры
;~	Группа
	GUICtrlCreateGroup('  Параметры командной строки переданные скрипту:  ', 5, 5, 390, 160)
		GUICtrlSetFont(-1, 10, 400)
		
;~ 	Поле вывода
	$hCmdLine_View = GUICtrlCreateEdit($CmdLineRaw, 20, 30, 360, 120, BitOR($WS_VSCROLL, $ES_AUTOVSCROLL, $ES_MULTILINE, $ES_WANTRETURN))
		GUICtrlSetFont(-1, 10, 400)
#endregion

#region: - Group: Прочитать значение параметра
;~ 	Группа
	GUICtrlCreateGroup('  Прочитать параметр ком-ой строки переданной скрипту:  ', 5, 5+165, 390, 95)
		GUICtrlSetFont(-1, 10, 400)

;~ 	Поле ввода
	$hCmdLine_Read = GUICtrlCreateInput('/param_name:', 20, 5+165+25, 360, 20)
		GUICtrlSetFont(-1, 10, 400)

;~ 	Кнопка: Передать параметры скрипту
    GUICtrlCreateButton('Прочитать значение параметра', 20, 225, 360, 25) 
        GUICtrlSetOnEvent(-1, '_MainWin_Cmd_Read')
#endregion

#region: - Group: Параметры для передачи
;~ 	Группа
	GUICtrlCreateGroup('  Параметры командной строки для передачи скрипту:  ', 5, 5+165+100, 390, 195)
		GUICtrlSetFont(-1, 10, 400)

;~ 	Поле ввода
	$hCmdLine_Send = GUICtrlCreateEdit('/param_name:"paran value"', 20, 5+165+25+100, 360, 120, BitOR($WS_VSCROLL, $ES_AUTOVSCROLL, $ES_MULTILINE, $ES_WANTRETURN))
		GUICtrlSetFont(-1, 10, 400)
	
	
;~ 	Кнопка: Передать параметры скрипту
    GUICtrlCreateButton('Передать параметры скрипту', 20, 325+100, 179, 25) 
        GUICtrlSetOnEvent(-1, '_Restart_With_Cmd')
		GUICtrlSetState(-1, $GUI_DEFBUTTON)
		GUICtrlSetState(-1, $GUI_FOCUS)
	
;~ 	Кнопка: Закрыть скрипт
	GUICtrlCreateButton('Закрыть скрипт (ESC)', 179+2+20, 325+100, 179, 25)
		GUICtrlSetOnEvent(-1, '_Pro_Exit')
#endregion 
 
#region: - After creating all GUI
    GUISetState(@SW_SHOW, $hMainWin)
	GUIRegisterMsg($WM_NCHITTEST,	'WM_NCHITTEST')
#endregion 
 
#region: - Sleep, Exit, WM_NCHITTEST
While 1 
    Sleep(10) 
WEnd 
 
Func _Pro_Exit()
    Exit 
EndFunc

Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
	Local $iProc = DllCall('user32.dll', 'int', 'DefWindowProc', 'hwnd', $hWnd, 'int', $Msg, 'wparam', $wParam, 'lparam', $lParam) 
	If $iProc[0] = $HTCLIENT Then Return $HTCAPTION 
	Return $GUI_RUNDEFMSG 
EndFunc
#endregion 
 
Func _Cmd_Read($sParam)
    If Not StringInStr($CmdLineRaw, $sParam) Then Return SetError(1, 0, '')
    Local $sValue = StringRegExpReplace($CmdLineRaw, '(?i)(?s).*?' & $sParam & '"(.*?)".*?$', '\1') 
    If $sValue == $CmdLineRaw OR @extended < 1 Then Return SetError(2, 0, '')
    Return SetError(0, 0, StringStripWS($sValue, 1+2))
EndFunc

Func _MainWin_Cmd_Read()
	Local $sParam  = StringStripWS(GUICtrlRead($hCmdLine_Read), 1+2)
	Local $sResult = _Cmd_Read($sParam)
	Switch @error
		Case 0
			MsgBox(64, 'Результат', 'Параметр: "' & $sParam & '"' & @CRLF & 'Значение: "' & $sResult & '"', 0, $hMainWin)
		Case Else
			MsgBox(48, 'Внимание', 'Параметр "' & $sParam & '" не найден' & @CRLF & 'Ошибка: ' & @error, 0, $hMainWin)
	EndSwitch
EndFunc
 
Func _Restart_With_Cmd() 
	Switch @compiled
		Case 0
			Exit Run('"' & @AutoItExe & '" /ErrorStdOut "' & @ScriptFullPath & '" ' & StringReplace(StringStripCR(StringStripWS(GUICtrlRead($hCmdLine_Send), 1+2)), @LF, ' '))
		Case 1
			Exit Run('"' & @ScriptFullPath & '" ' & StringReplace(StringStripCR(StringStripWS(GUICtrlRead($hCmdLine_Send), 1+2)), @LF, ' '))
	EndSwitch
EndFunc


Renz
О коммандной строке все есть в справке, раздел: Using AutoIt > Command Line Parameters


Вся суть в функции: _Cmd_Read()

Проверяем есть ли запрашиваемый ключ в строке $CmdLineRaw
$CmdLineRaw – содержит всю строку переданных параметров скрипту.

Если есть, то выбираем нужное с помощью регулярного выражения.
Можно написать любой вариант. В примере был вариант ключей:
/param_name:"paran value"
/param_name

Функция возвращает найденные данные ключа: paran value
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
Да сколько можно!!! :mad:

Renz
Используй поиск прежде чем постить на форуме.

madmasles
dwerf
`p r o x y
По вашим статусам видно что вы не новички, не нужно каждый раз это доказывать.

Данная тема обсуждалась десятки раз на форуме. Я ещё могу понять `p r o x y который долгое время отсутствовал с форума, хотя тоже с его стороны было неправильным не использовать поиск. Будьте примерными участниками :wall_brake:
 
Статус
Закрыто для дальнейших ответов.
Верх