Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Небольшая програмка для выбора запускаемой OS

Ответить
Настройки темы
Небольшая програмка для выбора запускаемой OS

Новый участник


Сообщения: 32
Благодарности: 3

Профиль | Отправить PM | Цитировать


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

 

Аватара для Creat0R

Must AutoIt


Moderator


Сообщения: 3054
Благодарности: 1008

Профиль | Сайт | Отправить PM | Цитировать


Цитата speechless:
Описание делать не буду »
Ну хоть назначение программы можно указать, в заголовке темы ничего интересного/познавательного нет, так нельзя

И что, тег кода уже отменили?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

Русское сообщество AutoIt | CreatoR's Lab | Opera AC Community


Отправлено: 23:01, 09-02-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 32
Благодарности: 3

Профиль | Отправить PM | Цитировать


Исправляюсь: программа для выбора оси для следующей загрузки (если конечно их больше одной).
ОСТОРОЖНО: использует/перезаписывает файл BOOT.INI.(хотя сколько пользуюсь проблем небыло).
Пока сделал выбор только из двух осей (повторюсь - делал для себя).
А на счет тега кода - буду много думать

Отправлено: 23:41, 09-02-2009 | #3


(*.*)


Administrator


Сообщения: 35936
Благодарности: 6473

Профиль | Сайт | Отправить PM | Цитировать


speechless, отредактируйте название темы (правка первого сообщения в расшир. режиме) и внесите описание программы в шапку.

-------
Канал Windows 10, etc | Чат @winsiders


Отправлено: 23:46, 09-02-2009 | #4


Новый участник


Сообщения: 32
Благодарности: 3

Профиль | Отправить PM | Цитировать


Столкнулся с несовместимостью версий AutoIt в некоторых скриптах, потому пишу версию, в которой точно работает: 3.2.6.0
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:43, 15-02-2009 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Небольшая програмка для выбора запускаемой OS

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Ещё одна программа для выбора приложений для установки 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




 
Переход