|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Небольшая програмка для выбора запускаемой OS |
|
Небольшая програмка для выбора запускаемой OS
|
Новый участник Сообщения: 32 |
Профиль | Отправить PM | Цитировать
Нужда была - состряпал. Опыт небольшой, так что не пинайте ногами. Если кому понравиться, пользуйтесь (есть ещё). Подсказки и мат приму с благодарностью. Описание делать не буду: запустите и посмотрите help - все станет ясно.
Код: #include <ButtonConstants.au3> #include <ComboConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <TabConstants.au3> #include <WindowsConstants.au3> #include <Array.au3> Opt("TrayMenuMode",1) ; Default tray menu items (Script Paused/Exit) will not be shown. $nameOS1="OS#1" $nameOS2="OS#2" $nameDefault="Microsoft Windows XP Professional RU" $timeout="30" dim $sizeArray[10] $drive = DriveGetDrive( "FIXED" ) ;все FIXED диски If NOT @error Then For $i = 1 to $drive[0] If FileExists($drive[$i]&"\boot.ini") Then ;если boot.ini на диске есть $size = FileGetSize($drive[$i]&"\boot.ini") ;получаем размер boot.ini _ArrayInsert( $sizeArray,$i,$size) ;добовляем в массив размер boot.ini EndIf Next ;_ArrayMaxIndex( $sizeArray, 1, 0) -индекс максимального значения массива(размер boot.ini) $bootPath=$drive[_ArrayMaxIndex( $sizeArray, 1, 0)]&"\boot.ini" ;путь к boot.ini наибольшего размера EndIf Dim $nameArray[5] ;массив для псевдонимов без кавычек $keyValue = IniReadSection($bootPath, "operating systems") ;читаем из выбранного boot.ini ключ=значение If @error Then MsgBox(64, "Обломайся", "Либо это не XP (2000) "&@CRLF&"Либо ты не админ") Exit Else For $i = 1 To $keyValue[0][0] $nameOS = StringSplit($keyValue[$i][1], " /",1) ;получаем названия (псевдонимы) OS $keyDefault=IniRead($bootPath, "boot loader", "default", "No") ;получаем default ключ If $keyValue[$i][0]=$keyDefault Then ;если ключи равны $nameDefault="Загрузка "&StringTrimRight(StringTrimLeft($nameOS[1], 1),1) ;присваеваем значение соответствующее default ключу ;MsgBox(0, "123",$keyValue[$i][1]) Endif $result = StringTrimRight(StringTrimLeft($nameOS[1], 1),1) ;отрезаем кавычки _ArrayInsert( $nameArray,$i,$result);добовляем в массив псевдонимы Next $nameOS1=$nameArray[1] ;меняем надписи на кнопках на псевдонимы $nameOS2=$nameArray[2] ;меняем надписи на кнопках на псевдонимы EndIf $timeout = IniRead($bootPath, "boot loader", "timeout", "31") ;получаем timeout из boot.ini $Form1_1 = GUICreate("BootOS 2.0", 290, 194, 329, 166) $exitTray = TrayCreateItem("Выход") $PageControl1 = GUICtrlCreateTab(3, 3, 285, 189, -1, $TCS_EX_FLATSEPARATORS) GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT) $TabSheet1 = GUICtrlCreateTabItem("General") $ButtonOS1 = GUICtrlCreateButton($nameOS1, 15, 64, 259, 25) GUICtrlSetFont(-1, 8, 400, 0, "Arial") GUICtrlSetTip(-1, "Загрузка с "&$nameOS1) If StringLen($nameOS1)=0 Then ;если строки нет то GUICtrlSetState ( $ButtonOS1, $GUI_DISABLE) ;оключить кнопку EndIf $ButtonOS2 = GUICtrlCreateButton($nameOS2, 15, 96, 259, 25, 0) GUICtrlSetFont(-1, 8, 400, 0, "Arial") GUICtrlSetTip(-1, "Загрузка с "&$nameOS2) If StringLen($nameOS2)=0 Then ;если строки нет то GUICtrlSetState ( $ButtonOS2, $GUI_DISABLE) ;оключить кнопку EndIf $Label1 = GUICtrlCreateLabel("Выбор OS для загрузки", 16, 33, 137, 19) GUICtrlSetFont(-1, 9, 400, 0, "Arial") GUICtrlSetColor(-1, 0x316AC5) $ButtonShutdown = GUICtrlCreateButton("Выключение", 15, 144, 129, 25, -1, $WS_EX_STATICEDGE) GUICtrlSetFont(-1, 8, 400, 0, "Arial") $ButtonReboot = GUICtrlCreateButton("Перезагрузка", 145, 144, 130, 25, -1, $WS_EX_STATICEDGE) GUICtrlSetFont(-1, 8, 400, 0, "Arial") $LabelCreat = GUICtrlCreateLabel("created by rz", 109, 173, 69, 18) GUICtrlSetFont(-1, 8, 400, 0, "Arial") $LabelDefault = GUICtrlCreateLabel($nameDefault, 25, 127, 236, 12,$SS_LEFTNOWORDWRAP) GUICtrlSetFont(-1, 8, 400, 0, "Arial") $TabSheet2 = GUICtrlCreateTabItem("Setting") $LabelPsevdo = GUICtrlCreateLabel("Псевдонимы OS (отображаются при загрузки)", 20, 35, 245, 12) $inputPsevdo1=GUICtrlCreateInput ($nameOS1, 20, 55, 247, 20) ; input для смены псевдонима OS1 GUICtrlSetTip(-1, "Английские буквы (русские только в DOS кодировке)") If StringLen($nameOS1)=0 Then ;если строки нет то GUICtrlSetState ( $inputPsevdo1, $GUI_DISABLE) ;оключить input EndIf $inputPsevdo2=GUICtrlCreateInput ($nameOS2, 20, 80, 247, 20) ; input для смены псевдонима OS2 GUICtrlSetTip(-1, "Английские буквы (русские только в DOS кодировке)") If StringLen($nameOS2)=0 Then ;если строки нет то GUICtrlSetState ( $inputPsevdo2, $GUI_DISABLE) ;оключить input EndIf $ButtonPsevdonim = GUICtrlCreateButton("Принять", 170, 150, 100, 25, $BS_DEFPUSHBUTTON ) $InputTimeout = GUICtrlCreateInput($timeout, 20, 120, 40, 20) $updownTimeout = GUICtrlCreateUpdown($inputTimeout) GUICtrlSetLimit(-1,999) $LabelTimeout = GUICtrlCreateLabel("Timeout (время ожидания)", 70, 124, 269, 30) GUICtrlCreateGroup("", -99, -99, 1, 1) $TabSheet3 = GUICtrlCreateTabItem("Help") $LabelHelp = GUICtrlCreateLabel(" BootOS 2.0 для тех, у кого на компьютере установленно две операционные системы (XP;2K). Позволяет выбрать 'OS по умолчанию' для следующей загрузки."&@CRLF&" BootOS 2.0 использует (перезаписывает) системный файл BOOT.INI, потому рекомендую сделать резервную копию этого файла."&@CRLF&" Прога не лишена недостатков т.к. писалась под свои нужды и распространяется как есть."&@CRLF&" Куда пойти и чем занятся пишите rz-74@mail.ru"&@CRLF&" Спасибо AutoIt !!!", 8, 29, 275, 159, -1, $WS_EX_CLIENTEDGE) GUICtrlSetFont(-1, 8, 400, 0, "Arial") GUICtrlSetBkColor(-1, 0xC0DCC0) GUICtrlCreateTabItem("") GUISetState(@SW_SHOW) While 1 $msg = GUIGetMsg() $msgTray = TrayGetMsg() Select case $msg = $GUI_EVENT_CLOSE ExitLoop Case $msgTray = $exitTray ExitLoop case $msg = $ButtonOS1 FileSetAttrib($bootPath, "-R") ;снять атрибут чтения IniWrite ( $bootPath, "boot loader", "default", $keyValue[1][0] ) ;записать новое значение default FileSetAttrib($bootPath, "+R") ;поставить атрибут чтения $nameDefault="Загрузка "&$nameArray[1] ;присваеваем значение соответствующее default ключу GUICtrlSetData($LabelDefault,$nameDefault) ;выводим новый текст default case $msg = $ButtonOS2 FileSetAttrib($bootPath, "-R") ;снять атрибут чтения IniWrite ( $bootPath, "boot loader", "default", $keyValue[2][0] ) ;записать новое значение default FileSetAttrib($bootPath, "+R") ;поставить атрибут чтения $nameDefault="Загрузка "&$nameArray[2] ;присваеваем значение соответствующее default ключу GUICtrlSetData($LabelDefault,$nameDefault);;выводим новый текст default case $msg = $ButtonPsevdonim $zz=GUICtrlRead($InputTimeout) $z=StringIsDigit(GUICtrlRead($InputTimeout)) ;проверка на цифры If $z=1 and $zz>=0 and $zz<=999 Then ;если целые числа от 0 до 999 то $nameOS1=GUICtrlRead($inputPsevdo1) GUICtrlSetData($ButtonOS1,$nameOS1);новый псевдоним на кнопке GUICtrlSetTip($ButtonOS1, "Загрузка с "&$nameOS1) ;новый всплывающий псевдоним $nameOS2=GUICtrlRead($inputPsevdo2) GUICtrlSetTip($ButtonOS2, "Загрузка с "&$nameOS2) ;новый всплывающий псевдоним GUICtrlSetData($ButtonOS2,$nameOS2);новый псевдоним на кнопке FileSetAttrib($bootPath, "-R") ;снять атрибут чтения If StringLen($nameOS1)>0 Then ;если строка есть то $keyValue[1][1]=StringRegExpReplace($keyValue[1][1], '"(.*?)"', '"'&$nameOS1&'"',1);создаем новое значение value1 IniWrite ( $bootPath, "operating systems", $keyValue[1][0], $keyValue[1][1] ) ;записать новое значение value1 EndIf If StringLen($nameOS2)>0 Then ;если строка есть то $keyValue[2][1]=StringRegExpReplace($keyValue[2][1], '"(.*?)"', '"'&$nameOS2&'"',1);создаем новое значение value2 IniWrite ( $bootPath, "operating systems", $keyValue[2][0], $keyValue[2][1] ) ;записать новое значение value2 EndIf IniWrite ( $bootPath, "boot loader", "timeout", GUICtrlRead ( $InputTimeout) ) ;записать новое значение timeout FileSetAttrib($bootPath, "+R") ;поставить атрибут чтения $keyDefault=IniRead($bootPath, "boot loader", "default", "No") ;получаем default ключ For $i = 1 To $keyValue[0][0] $nameOS = StringSplit($keyValue[$i][1], " /",1) ;получаем названия (псевдонимы) OS If $keyValue[$i][0]=$keyDefault Then ;если ключи равны $nameDefault="Загрузка "&StringTrimRight(StringTrimLeft($nameOS[1], 1),1) ;присваеваем значение соответствующее default ключу Endif $result = StringTrimRight(StringTrimLeft($nameOS[1], 1),1) ;отрезаем кавычки _ArrayInsert( $nameArray,$i,$result);добовляем в массив псевдонимы Next GUICtrlSetData($LabelDefault,$nameDefault);новый псевдоним на метке default Else MsgBox (16, "Внимание Timeout", "Только целые числа от 0 до 999") Endif case $msg = $ButtonShutdown Shutdown (1) ExitLoop case $msg = $ButtonReboot Shutdown (2) ExitLoop EndSelect Wend |
|
Отправлено: 22:26, 09-02-2009 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 23:01, 09-02-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 32
|
Профиль | Отправить PM | Цитировать Исправляюсь: программа для выбора оси для следующей загрузки (если конечно их больше одной).
ОСТОРОЖНО: использует/перезаписывает файл BOOT.INI.(хотя сколько пользуюсь проблем небыло). Пока сделал выбор только из двух осей (повторюсь - делал для себя). А на счет тега кода - буду много думать |
Отправлено: 23:41, 09-02-2009 | #3 |
(*.*) Сообщения: 36544
|
Профиль | Сайт | Отправить PM | Цитировать speechless, отредактируйте название темы (правка первого сообщения в расшир. режиме) и внесите описание программы в шапку.
|
------- Отправлено: 23:46, 09-02-2009 | #4 |
Новый участник Сообщения: 32
|
Профиль | Отправить PM | Цитировать Столкнулся с несовместимостью версий AutoIt в некоторых скриптах, потому пишу версию, в которой точно работает: 3.2.6.0
|
|
Отправлено: 10:43, 15-02-2009 | #5 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Ещё одна программа для выбора приложений для установки | hb860 | Автоматическая установка Windows 2000/XP/2003 | 14 | 24-11-2010 10:37 | |
Програмка для выбора цвета | FlatX007 | AutoIt | 13 | 28-06-2009 21:16 | |
Програмка для монтирования в windows .... | INTELLIGENTIK | Программное обеспечение Linux и FreeBSD | 2 | 13-03-2007 14:36 | |
Нужна програмка для храннения списков дисков, кассет и т.п. | azs | Программное обеспечение Windows | 15 | 24-03-2005 16:46 | |
Програмка для CD-RW... | Guest | Хочу все знать | 8 | 29-04-2004 22:33 |
|