1

Тема: AHK: Замена значений в Combobox

Здравствуйте!
В скрипте Autohotley (GUI) есть Combobox со значениями opera.exe, firefox.exe, chrome.exe, msedge.exe, iexplore.exe.
Как заменить эти значения на Opera, Mozilla Firefox, Google Chrome, Microsoft Edge, Internet Exprorer соответственно? Но так, чтобы скрипт продолжил их читать как opera.exe, firefox.exe, chrome.exe, msedge.exe, iexplore.exe.
Основной скрипт:

Run, chrome.exe "https://www.google.com/" --new-window
Sleep, 5000
MsgBox, 64, Program1, Program1 запущена!`nЗдесь вы сможете начать работу!
WinSet, AlwaysOnTop, , A
Return

Т.е. пользователь в Combobox выбирает Google Chrome, но скрипт должен распознавать это значение как chrome.exe.
Сам код формы для настройки скрипта:

#SingleInstance Force
#NoEnv
SetWorkingDir %A_ScriptDir%

ProgramName := "Program1"
ProgramName5 := "Рабочий сайт"

; Читаем настройки
GoSub ReadSettingsFromIni

MsgBox, 4, %ProgramName%, Вы хотите изменить настройки запуска? `n%ProgramName% пропустит этот шаг через несколько секунд..., 5
IfMsgBox Yes
{
	GoSub ShowSettingsWindow
	Return
}
else
; Тут или прошло пять секунд, или пользователь нажал Нет.
{
GoTo OnButtonRun
Return
}

; ===========================
; Конец секции автовыполнения



; Чтение настроек из .ini-файла в переменные
; ==========================================
ReadSettingsFromIni:
{
IniRead, Ed_App5, %A_ScriptDir%\..\AppLauncher.ini, Settings, AppToRun5, %A_Space%
IniRead, Ed_Browser, %A_ScriptDir%\..\AppLauncher.ini, Settings, Browser

	Return
}


; Создание окна настроек
; ======================
ShowSettingsWindow:
{
Gui, New
Gui, Add, Text  , XM+20   Y80  W90  R1, %ProgramName5%:
Gui, Add, Edit  , X+10 YP   W120 R1 vEd_App5,   %Ed_App5%
Gui, Add, Button, X+0  YP   W20  R1 vBt_App5 gOnButtonApp5, ...
Gui, Add, Text, XM+20   Y115  W90  R1, Рабочий браузер:
Gui, Add, Combobox, x+10 yp w120 r5 vEd_Browser, opera.exe|firefox.exe|chrome.exe|msedge.exe|iexplore.exe

Gui, Add, Button, XM   Y200 W270 R3 vBt_Run  gOnButtonRun , Начать работу
Gui, Add, Button, XM   Y+M W130 R1 vBt_Save gOnButtonSave, Сохранить
Gui, Add, Button, X+10 YP  W130 R1 vBt_Exit gOnButtonExit, Выйти

Gui, Show,, %ProgramName%
Return
}

; При нажатии Save значения из текстовых полей сохраняются в файл настроек AppLauncher.ini
OnButtonSave:
{
	Gui, Submit, NoHide
	IniWrite, %Ed_App5% , %A_ScriptDir%\..\AppLauncher.ini, Settings, AppToRun5
	IniWrite, %Ed_Browser%, %A_ScriptDir%\..\AppLauncher.ini, Settings, Browser
	Sleep 100
	Msgbox,, %ProgramName%, Настройки успешно сохранены!, 3
	Return
}

OnButtonApp5:
{
	MsgBox, 48, %ProgramName%, В это поле нужно вставить ссылку!, 5
	Return
}

; Обработчик изменения значения Combobox для выбора браузера
Ed_Browser:
GuiControlGet, chosenBrowser
global Ed_Browser
Ed_Browser := chosenBrowser
Return

; При нажатии кнопки Start запускаем приложение с указанными в текстовых полях данными
OnButtonRun:
{
Gui, Submit
Gui, New
Gui, Font, s10
Gui, Add, Text, x10 y10  w128 h50 center, Выберите способ работы с документами:
Gui, Add, Picture, x10 y60 w128 h128 gA1, %A_ScriptDir%\..\Design\Ярлык для %ProgramName5%.png
Gui, Show,  xCenter yCenter w148 h200, %ProgramName%
Return
}

	A1:
if (Ed_Browser = "") {
    MsgBox, 48, Ошибка, Не указан рабочий браузер!
    Gui, Destroy
    return
}
if (Ed_App5 = "")
{
    	Run, %Ed_Browser% "https://www.google.com/" --new-window
	Sleep, 5000
	MsgBox, 64, %ProgramName%, %ProgramName% запущена!`nЗдесь вы сможете начать работу!
	WinSet, AlwaysOnTop, , A
	Return
}
else
{
    	Run, %Ed_Browser% %Ed_App5% --new-window
	Sleep, 5000
	MsgBox, 64, %ProgramName%, %ProgramName% запущена!`nЗдесь вы сможете начать работу!
	WinSet, AlwaysOnTop, , A
	Return
}

; При нажатии Esc, закрытии окна или нажатии кнопки Exit скрипт завершается.
GuiClose:
GuiEscape:
OnButtonExit:
	ExitApp

2

Re: AHK: Замена значений в Combobox

marusa122
Из GUI получайте имя, а файл берите из массива.


Browsers := {"Opera": "opera.exe", "Google Chrome": "chrome.exe"}
MsgBox, % Browsers["Opera"]
MsgBox, % Browsers["Google Chrome"]

3

Re: AHK: Замена значений в Combobox

YMP, вы же берете из объекта, а не массива.

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

4

Re: AHK: Замена значений в Combobox

Phoenixxx_Czar, почитайте в справке про ассоциативные массивы.

5

Re: AHK: Замена значений в Combobox

Добавлю, что, например, в JScript массивы тоже реализованы как объекты. Одно другому, стало быть, не мешает.

6

Re: AHK: Замена значений в Combobox

В AHK v1 массивы [] и объекты {} это по сути одно и то же, просто в массиве ключами обычно являются числовые значения. Но это не обязательно, то есть можно без проблем выполнить такой код:

arr := []
arr[1] := 1
arr["nonNumericKey"] := "test"
for k, v in arr {
   MsgBox % "key: " . k . "`nvalue: " . v
}

А вот в AHK v2 такой номер уже не пройдёт, там [] и {} — это объекты разных типов, и такой код выдаст ошибку:

arr := []
arr.Length := 2
arr[1] := 1
arr["nonNumericKey"] := "test"
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder