Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
Лёгкое приложение для монтирования логических разделов HDD.

Аватара для semiono

Ветеран


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

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


Мне нужен GUI интерфейс, примерно 640x480, для быстрого подключения/отключения нужных разделов логических дисков.
Почему хочется иметь самодельный "менеджер", ну потому-что с одной стороны чтобы ничего лишнего не было,
и в то же время может что-то полезное можно придумать. msc- консоли раздражают своими сайд-панелями, всякими табами ненужными.
Программы для hdd могут это делать, но грузятся дольше так как предназначены для более серьёзных задач.

Однако я не знаю как монтировать диски? Из windows знакомо лишь mountvol.exe. Если нету других возможностей, то это получиться
графическая оболочка для mountvol.exe. Прога вдобавок к дискам обращается как CLSID именам, с этим тоже не очень понятно как определиться.
Ещё знаю что всё это пишется в реестр в раздел HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices, но подробнее я тоже не знаю.

Для начала, я бы хотел только иметь окно где галочками можно было бы отключить(запретить), а потом включить по выбору логические диски.
Судя по всему прога(autoit) должна считать сначала все мои разделы и вывести мне их в окне...
?

-------
Полезное сообщение


Отправлено: 18:17, 05-09-2010

 

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


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

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


Вложения
Тип файла: rar MoDev.rar
(231.6 Kb, 33 просмотров)

как то давно делал для себя, посмотри
Код: Выделить весь код
#include <GUIConstants.au3>
GUICreate("MoDev",400,130)  ; will create a dialog box that when displayed is centered
GUISetState (@SW_SHOW)       ; will display an empty dialog box

$regEnumVal = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\RZ\MoDev", 1) ;читаем первое значение из реестра
if @error <> 0 then $regEnumVal="#" 
GUICtrlCreateLabel ("Диск",  10, 17, 30)    
GUICtrlCreateLabel ("Выбор иконки",  20, 90, 40,30)    
GUICtrlCreateLabel ("Смонтировать",  90, 17, 75)
GUICtrlCreateLabel ("Отмонтировать",  87, 45, 80)
GUICtrlCreateLabel ("Поиск дисков",  90, 75, 75)
GUICtrlCreateGroup ("Бонус", 12, 33, 53, 90)
GUICtrlCreateLabel ( "MoDev паразитирует на стандартной виндозной утилите ""mountvol"" для монтирования/демонтирования разделов диска без перезагрузки ВНИМАНИЕ: при изменении размеров разделов повторите поиск дисков", 210,10, 180, 110)
$combo=GUICtrlCreateCombo ($regEnumVal, 45,10,35) ; создаем combo
ControlDisable("", "#", $combo) ;делаем серым combo
For $i = 1 to 100
$regEnumVal = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\RZ\MoDev", $i) ;читаем в цикле реестр
if @error <> 0 Then ExitLoop
GUICtrlSetData($combo,$regEnumVal) ; добавляем в combo буквы fixed дисков
next
$deMount=GUICtrlCreateButton ("Демонтировать",  170, 40, 25,23,$BS_ICON) ;кнопка демонтировать
GUICtrlSetImage ($deMount,"shell32.dll",131,0)
$mount=GUICtrlCreateButton ("Монт",  170, 10, 25,23,$BS_ICON) ;кнопка монтировать
GUICtrlSetImage ($mount,"shell32.dll",112,0)
$search=GUICtrlCreateButton ("Поиск дисков",  170, 70, 25,23,$BS_ICON) ;кнопка поиска
GUICtrlSetImage ($search,"shell32.dll",22,0)
$ico=GUICtrlCreateButton ("Иконки",  20, 50, 37,35,$BS_ICON) ;кнопка выбора иконки
If GUICtrlRead($combo)="#" then ControlDisable("", "", $ico) ;если дисков нет кнопка $ico неактивна
$str = StringLeft(GUICtrlRead($combo), 1) ;берем только букву
$r=RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DriveIcons\"&$str&"\DefaultIcon", "") ;читаем путь к иконке
GUICtrlSetImage ($ico,"shell32.dll",8) ;показ иконки на кнопке по умолчанию
GUICtrlSetImage ($ico,$r,0) ;показ иконки на кнопке

; Run the GUI until the dialog is closed
While 1
    $msg = GUIGetMsg()
   Select
	  Case $msg=$deMount
		 $system = StringLeft(@WindowsDir, 2)
			If GUICtrlRead($combo)=$system then
			   MsgBox(8192,"Warning", "Осторожно !!! Вы выбрали системный диск")
			EndIf
		 $deMountMsg=msgbox(8212,"Demounted", "Демонтировать диск "&GUICtrlRead($combo)&"   Уверен?") 
			If $deMountMsg=6 then ;если Да то
			   Run("mountvol.exe"&" "&GUICtrlRead($combo)&" /D") ;демонтируем выбранный раздел
			EndIf
	  Case $msg=$mount
            $MountMsg=msgbox(8260,"Mounted", "Смонтировать диск "&GUICtrlRead($combo))  
			;msgbox(8260,"Mounted", $MountMsg)  
			   If $MountMsg=6 then ;если Да то
				  $point = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\RZ\MoDev", GUICtrlRead($combo)) ;читаем точку монтирования
				  ;msgbox(8260,"Mounted", $point)
				  $point=StringReplace( $point, "\??\Volume", "\\?\Volume") ;меняем строку для mountvol
				  ;msgbox(8260,"Mounted", $point)
				  Run("mountvol.exe"&" "&GUICtrlRead($combo)&" "&$point) ;монтируем выбранный раздел
				EndIf  
	  Case $msg=$combo ;при выборе диска
			$str = StringLeft(GUICtrlRead($combo), 1) ;берем только букву
			$r=RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DriveIcons\"&$str&"\DefaultIcon", "") ;читаем путь к иконке
			GUICtrlSetImage ($ico,"shell32.dll",8) ;показ иконки на кнопке по умолчанию
			GUICtrlSetImage ($ico,$r,0) ;показ иконки на кнопке
			$system = StringLeft(@WindowsDir, 2) 
				If GUICtrlRead($combo)=$system then ;если диск системный
				   MsgBox(8192,"Warning", "Осторожно !!! Вы выбрали системный диск") ;появляется предупреждение
				EndIf
	  Case $msg=$search
		 $fixedDrive = DriveGetDrive( "fixed" ) ;все fixed диски
			If NOT @error Then
			   ;MsgBox(4096,"", "Found " & $fixedDrive[0] & " drives")
				  For $i = 1 to $fixedDrive[0] ;ищем все фиксированные диски
					 ;MsgBox(4096,"Drive " & $i, $fixedDrive[$i])
					 $key = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices", "\DosDevices\" & $fixedDrive[$i]) ;ищем все значения фиксированных дисков в реестре
					 ;MsgBox(4096, "\DosDevices\" & $fixedDrive[$i], $key)
					 For $ii = 1 to 100
						$a = RegEnumVal("HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices", $ii) ;просмотр ветви MountedDevices
						   If @error <> 0 Then ExitLoop
						;MsgBox(4096, "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices" & $ii, $a)
						$result = StringInStr($a, "\??\Volume") ;проверка на наличие строк "\??\Volume"
						;MsgBox(0, "Search result:", $result)
							If $result = 1 Then                                                 ;если строки "\??\Volume" есть
								$v = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices", $a)  ;то читаем значения этих ключей
								;MsgBox(4096, $a, $v)
									If $v = $key Then                                                 
										;MsgBox(4096, $fixedDrive[$i], $a) ;найденные соответствия буквы диска и точки монтирования
													; Write a single REG_SZ value
													RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\RZ\MoDev", $fixedDrive[$i], "REG_SZ", $a) ;запись результата в реестр
									EndIf
							EndIf
					 next
				  Next
			EndIf
		 GUICtrlDelete($combo) ;удаляем старое combo
		 $regEnumVal = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\RZ\MoDev", 1) ;читаем первое значение из реестра
		 $combo=GUICtrlCreateCombo ($regEnumVal, 45,10,35) ; создаем combo
			For $i = 1 to 100
			   $regEnumVal = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\RZ\MoDev", $i) ;читаем в цикле реестр
				  if @error <> 0 Then ExitLoop
			   GUICtrlSetData($combo,$regEnumVal) ; добавляем в combo буквы fixed дисков
			next
		 ControlEnable("", "", $ico) ;кнопка $ico активна
		 $str = StringLeft(GUICtrlRead($combo), 1) ;берем только букву
		 $r=RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DriveIcons\"&$str&"\DefaultIcon", "") ;читаем путь к иконке
		 GUICtrlSetImage ($ico,"shell32.dll",8) ;показ иконки на кнопке по умолчанию
		 GUICtrlSetImage ($ico,$r,0) ;показ иконки на кнопке
	  Case $msg=$ico
		 $str = StringLeft(GUICtrlRead($combo), 1) ;берем только букву
		 $icoPatch = FileOpenDialog("Выбор иконки", "", "Icons (*.ico;*.dll;*.exe)", 1 ) ;окно выбора файла
			If $icoPatch<>"" then ;если путь не пустой
			   RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DriveIcons\"&$str&"\DefaultIcon", "", "REG_SZ", $icoPatch) ;запись в реестр пути к иконке
			   GUICtrlSetImage ($ico,"shell32.dll",8) ;показ иконки на кнопке по умолчанию
			   GUICtrlSetImage ($ico,$icoPatch,0) ;показ иконки на кнопке
			EndIf
   EndSelect
   If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend
версию не помню, на всякий случай прикрепляю exe
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:00, 10-09-2010 | #2



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

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


Аватара для semiono

Ветеран


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

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


Очень хорошо! Но странная штука, у меня SciTE наглухо повисает при открытии скрипта, с чего бы это?
Может из-за кирилицы, хотя я не знаю там вроде это должно итак быть?
Попробую разные куски кода повытирать, чтоб уточнить это.
(Редактор у меня навороченный, вместе с Wrapper версия)

-------
Полезное сообщение


Отправлено: 02:22, 13-09-2010 | #3


Ветеран


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

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


semiono, у меня все ОК. Посмотрите на то, все ли функции у Вас есть в шапке скрипта. Список у меня:
Код: Выделить весь код
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>

-------
мы рождены, чтоб сказку сделать былью

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:57, 13-09-2010 | #4


Аватара для semiono

Ветеран


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

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


Подправте код пожалуйста? Идея такова, чтобы вообще исключить системный диск из GUICtrlCreateCombo,
если это вообще возможно, так как это было бы более логично, чем вывод "Warning !!!".
Мне утилита очень понравилась, поэтому хочется её улучшить.
Ещё было бы хорошо метку диска вывести в заголовок окна, хотя тоже надо думать как заполучить переменную $label ?
Может быть обработкой cmd.exe /c vol ?

В исходнике было пропущено <ButtonConstants.au3>

И ещё просьба, можно ли как-то считать серийный номер партишна, и желательно вывести в Edit() для возможности редактирования в окне. Как бы бонус ???

-------
Полезное сообщение


Отправлено: 22:30, 16-09-2010 | #5


Аватара для semiono

Ветеран


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

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


17 строка...
Код: Выделить весь код
...
$regEnumVal = StringRegExpReplace(RegEnumVal("HKLM\Software\Node", $i) , "[^" & StringLeft(@WindowsDir, 2) & "]", "");читаем в цикле реестр
...
Пытаюсь исключить букву системного диска из списка, не получается.

-------
Полезное сообщение


Отправлено: 00:26, 17-09-2010 | #6


Аватара для madmasles

Ветеран


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

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


semiono,
Попробуйте так:
Код: Выделить весь код
$combo = GUICtrlCreateCombo('', 45, 10, 35) ; создаем combo
;...
$regEnumVal = RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\RZ\MoDev", $i) ;читаем в цикле реестр
If @error <> 0 Then ExitLoop
If $regEnumVal <> StringLower(@HomeDrive) Then
    GUICtrlSetData($combo, $regEnumVal, $regEnumVal) ; добавляем в combo буквы fixed дисков
EndIf
;...
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:36, 17-09-2010 | #7


Аватара для semiono

Ветеран


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

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


Как я понял StringLower(@HomeDrive) это именно то что надо, хотя я опять запутался в коде, слишком много для меня. ))

-------
Полезное сообщение


Отправлено: 02:18, 17-09-2010 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
HDD - Восстановление удалённых разделов HDD BLACK BOSS Накопители (SSD, HDD, USB Flash) 4 20-04-2010 23:37
Интерфейс - Иконки для логических разделов Lawliet32 Microsoft Windows 2000/XP 4 21-11-2009 18:57
Разное - Зеркалирование логических разделов жестких дисков alzasr Microsoft Windows 2000/XP 3 31-10-2009 15:43
Разное - Кейс для монтирования в стойку Joni Прочее железо 2 14-07-2009 17:00
Програмка для монтирования в windows .... INTELLIGENTIK Программное обеспечение Linux и FreeBSD 2 13-03-2007 14:36




 
Переход