speechless |
09-02-2009 22:26 1033971 |
Небольшая програмка для выбора запускаемой OS
Нужда была - состряпал. Опыт небольшой, так что не пинайте ногами. Если кому понравиться, пользуйтесь (есть ещё). Подсказки и мат приму с благодарностью. Описание делать не буду: запустите и посмотрите 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
|