Что нового

Создание элемента "Combo" с файлом настроек

Diesel

Новичок
Сообщения
35
Репутация
0
Версия AutoIT: 3.2.12.1

Описание: Примерно знаю команды, а слепить правильно у меня не получается.
Нужно чтобы программа запоминала каждую выбранную цифру из обоих меню в config.ini и при следующем запуске была запомненная цифра.
И еще при нажатии на enter он посылал цифру которая выбранна в меню "key" и букву выбранную в меню "say" в активное окно.

Примечания:
Код:
#include <GUIConstants.au3>

Global $key = "1|2|3", $say = "a|b|c|"

GUICreate("тест",200,100)

GUICtrlCreateCombo ("key", 10,10,60)
GUICtrlSetData(-1,"1|2|3")
GUICtrlCreateCombo ("say", 10,50,60)
GUICtrlSetData(-1,"a|b|c")

GUISetState ()
While 1
    $msg = GUIGetMsg()
    
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Автор
D

Diesel

Новичок
Сообщения
35
Репутация
0
`p r o x y, Прошу прощения. Исправил.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

OnAutoItExitRegister('_Exit')

Dim $sKey = '1|2|3|'
Dim $sSay = 'a|b|c|'
Dim $sPath = @ScriptDir & '\config.ini'

$hGUI = GUICreate("тест", 166, 112)
$hKey = GUICtrlCreateCombo ("key", 9, 11, 145, 25)
GUICtrlSetData(-1, $sKey)

If FileExists($sPath ) Then
	$sKey = IniRead($sPath ,'options', 'key', 'NotFound')
	If $sKey <> '' Then 
		GUICtrlSetData($hKey, $sKey)
	EndIf
EndIf

$hSay = GUICtrlCreateCombo ("say", 9, 42, 145, 25)
GUICtrlSetData(-1, $sSay)

If FileExists($sPath ) Then
	$sSay = IniRead($sPath ,'options', 'say', 'NotFound')
	If $sSay <> '' Then 
		GUICtrlSetData($hSay, $sSay)
	EndIf
EndIf

$Button1 = GUICtrlCreateButton("Ok", 78, 74, 75, 25, 0)
GUISetState(@SW_SHOW)

While 1
    $msg = GUIGetMsg()
	Select 
	Case $msg = $GUI_EVENT_CLOSE
		Exit
	Case $msg = $Button1
		If GUICtrlRead($hKey) <> 'key' And GUICtrlRead($hSay) <> 'say' Then
			If Not WinExists('[CLASS:Notepad]') Then 
				Run('notepad.exe')
				Sleep(250)
				ControlSend('[CLASS:Notepad]', '', '[CLASS:Edit; INSTANCE:1]', _
				'key = ' & GUICtrlRead($hKey) & @LF & 'say = ' & GUICtrlRead($hSay) & @LF)
			Else
				WinActivate('[CLASS:Notepad]')
				ControlSend('[CLASS:Notepad]', '', '[CLASS:Edit; INSTANCE:1]', _
				'key = ' & GUICtrlRead($hKey) & @LF & 'say = ' & GUICtrlRead($hSay) & @LF)			
			EndIf
		Else
			MsgBox(16, 'Error', 'Please select the data!')
		EndIf
	EndSelect
Wend
	
Func _Exit()
	If GUICtrlRead($hKey) <> 'key' And GUICtrlRead($hSay) <> 'say' Then
		IniWrite($sPath ,'options', 'key', GUICtrlRead($hKey))
		IniWrite($sPath ,'options', 'say', GUICtrlRead($hSay))
	Else
		IniWrite($sPath ,'options', 'key', '')
		IniWrite($sPath ,'options', 'say', '')
	EndIf
EndFunc
 
Автор
D

Diesel

Новичок
Сообщения
35
Репутация
0
Garrett, это то что мне нужно :ok: благодарю.
madmasles, ушёл обновляться :smile:.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Diesel сказал(а):
Можно ещё сказать за что отвечает
Код:
OnAutoItExitRegister('_Exit')
Эта функция регистрирует пользовательскую функцию, которая должна сработать в момент прекращения работы Autoit (проще говоря, скрипта)
AutoIt ругается на неё, у меня старая версия.
madmasles вам уже ответил на этот вопрос ;)
 
Автор
D

Diesel

Новичок
Сообщения
35
Репутация
0
Я немного запутался, мне нужно было потом на каждую цифру указать определенное действие... можно чтобы он сохранял все команды в config.ini ? Не только ту которая была последней, но и другие. (в том числе которые были по умолчанию)
Код:
Dim $sKey = '1|2|3|4|5|6|7|8'
Dim $sSay = '1|2|3|4|5|6|7|8|9'

Чтобы совсем Вас не запутать надо чтобы на ряд "Key" нажималась клавиша которая там написана (1,2,3 и т.д.), а на ряд "Say" дать цифре 1 команду "$say1", цифре 2 команду "$Say2" и т.д. :smile:
Удобнее будет Combo в GUI в ряд ставить, для примера сделай одну пару Combo :smile: мне 9 надо, но думаю я сам справлюсь.
 
Автор
D

Diesel

Новичок
Сообщения
35
Репутация
0
Изменил сообщение, думаю так будет проще.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Diesel
Мне непонятен, ваш замысел.
Если вы делаете что-то вроде симулятора нажатия клавиш, то зачем вам ini файл?
Вы опишите полностью вашу задачу, что вы хотите получить, может и решение будет куда проще.
 
Автор
D

Diesel

Новичок
Сообщения
35
Репутация
0
Если без прилюдий то:
Есть 9 сообщений, каждое сообщение нужно отправлять по кнопке F1-F9. В пункте Say мы выбираем цифру с сообщением 1-9. В пункте Key мы выбираем на какую F1-F9 будет отправляться это сообщение. Тут то и надо функцию "combo".
А с помощью ini файла я хочу чтобы программа запоминала что выставлено в "combo" дабы не выставлять снова на какие клавиши какие сообщения отправлять.
P.S. Так нужно, не иначе.
 

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Вот пример из моей программки:
Код:
$K8 = GUICtrlCreateCombo($hkey6, 24, 168, 145, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_SIMPLE)) ;У меня здесь написано $hkey6, т.к. у меня уже есть файл с настройками и я заранее считываю с него значение...
GUICtrlSetData($K8, "q|w|e|r|t|z|u|i|o|p|u|a|s|d|f|g|h|j|k|l|o|a|y|x|c|v|b|n|m|1|2|3|4|5|6|7|8|9|0|-|=|F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12|NUMPAD0|NUMPAD1|NUMPAD2|NUMPAD3|NUMPAD4|NUMPAD5|NUMPAD6|NUMPAD7|NUMPAD8|NUMPAD9|Insert|Home|End|SPACE|ENTER|ALT|BACKSPACE|DELETE|UP|DOWN|LEFT|RIGHT|ESC|PGUP|PGDN|TAB|PRINTSCREEN|LWIN|RWIN|NUMLOCK|PAUSE|CAPSLOCK|NUMPADENTER|APPSKEY|LALT|RALT|LCTRL|RCTRL|LSHIFT|RSHIFT")

Код:
$hkey6 = GUICtrlRead($K8)
IniWriteSection(@ProgramFilesDir & "\ASS.ini", "Горячие клавиши", "Клавиша6=" & $hkey6)


Считывать потом информацию из файла можно так, приведу пример:
Код:
$var6=IniReadSection(@ProgramFilesDir&"\ASS.ini","Горячие клавиши")
	$hkey1 = $var6[1][1]
	$hkey2 = $var6[2][1]
	$hkey3 = $var6[3][1]
	$hkey4 = $var6[4][1]
	$hkey5 = $var6[5][1]
	$hkey6 = $var6[6][1]
	$hkey7 = $var6[7][1]
 
Автор
D

Diesel

Новичок
Сообщения
35
Репутация
0
Viktor217, не получается склеить, как не крути...

А можно сделать то что мне надо используя этот отрывок?
Код:
Global $sSB = "1|2|3|4|5|6|7|8", $sFK = "1|2|3|4|5|6|7|8|9"

$hSB[$i][$a] = GUICtrlCreateCombo("SB",108 + ($i * 220),48 + ($a * 25),63,20,0x3)
$hFK[$i][$a] = GUICtrlCreateCombo("FK",170 + ($i * 220),48 + ($a * 25),52,10,0x3)

GUICtrlSetData($hSB[$i][$a],$sSB)
GUICtrlSetData($hFK[$i][$a],$sFK)
 

Viktor217

Осваивающий
Сообщения
233
Репутация
31
Вроде так...
Код:
Global $sSB = "1|2|3|4|5|6|7|8", $sFK = "1|2|3|4|5|6|7|8|9"

$hSB[$i][$a] = GUICtrlCreateCombo("SB",108 + ($i * 220),48 + ($a * 25),63,20,0x3) ;Если файл настроек уже есть, можно поставить вместо 'SB' и 'FK', $1 и $2
$hFK[$i][$a] = GUICtrlCreateCombo("FK",170 + ($i * 220),48 + ($a * 25),52,10,0x3)

GUICtrlSetData($hSB[$i][$a],$sSB) 
GUICtrlSetData($hFK[$i][$a],$sFK)

$1 = GUICtrlRead($hSB[$i][$a])
$2 = GUICtrlRead($hFK[$i][$a])

IniWriteSection(@ScriptDir & "\Set.ini", "Настройки", "1="&$1&@LF&"2="&$2)


$var=IniReadSection(@ScriptDir&"\Set.ini","Настройки")
    $1 = $var[1][1]
    $2 = $var[2][1]
 
Верх