![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Лёгкое приложение для монтирования логических разделов HDD. |
|
Лёгкое приложение для монтирования логических разделов HDD.
|
Ветеран Сообщения: 842 |
Мне нужен GUI интерфейс, примерно 640x480, для быстрого подключения/отключения нужных разделов логических дисков.
Почему хочется иметь самодельный "менеджер", ну потому-что с одной стороны чтобы ничего лишнего не было, и в то же время может что-то полезное можно придумать. msc- консоли раздражают своими сайд-панелями, всякими табами ненужными. Программы для hdd могут это делать, но грузятся дольше так как предназначены для более серьёзных задач. Однако я не знаю как монтировать диски? Из windows знакомо лишь mountvol.exe. Если нету других возможностей, то это получиться графическая оболочка для mountvol.exe. Прога вдобавок к дискам обращается как CLSID именам, с этим тоже не очень понятно как определиться. Ещё знаю что всё это пишется в реестр в раздел HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices, но подробнее я тоже не знаю. Для начала, я бы хотел только иметь окно где галочками можно было бы отключить(запретить), а потом включить по выбору логические диски. Судя по всему прога(autoit) должна считать сначала все мои разделы и вывести мне их в окне... ? |
|
------- Отправлено: 18:17, 05-09-2010 |
Новый участник Сообщения: 32
|
Профиль | Отправить PM | Цитировать как то давно делал для себя, посмотри
#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 |
Отправлено: 00:00, 10-09-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Очень хорошо! Но странная штука, у меня SciTE наглухо повисает при открытии скрипта, с чего бы это?
Может из-за кирилицы, хотя я не знаю там вроде это должно итак быть? Попробую разные куски кода повытирать, чтоб уточнить это. (Редактор у меня навороченный, вместе с Wrapper версия) |
------- Отправлено: 02:22, 13-09-2010 | #3 |
Ветеран Сообщения: 904
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 03:57, 13-09-2010 | #4 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Подправте код пожалуйста? Идея такова, чтобы вообще исключить системный диск из GUICtrlCreateCombo,
если это вообще возможно, так как это было бы более логично, чем вывод "Warning !!!". Мне утилита очень понравилась, поэтому хочется её улучшить. Ещё было бы хорошо метку диска вывести в заголовок окна, хотя тоже надо думать как заполучить переменную $label ? Может быть обработкой cmd.exe /c vol ? В исходнике было пропущено <ButtonConstants.au3> И ещё просьба, можно ли как-то считать серийный номер партишна, и желательно вывести в Edit() для возможности редактирования в окне. Как бы бонус ![]() |
|
------- Отправлено: 22:30, 16-09-2010 | #5 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 00:26, 17-09-2010 | #6 |
Ветеран Сообщения: 812
|
Профиль | Отправить 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 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Как я понял StringLower(@HomeDrive) это именно то что надо, хотя я опять запутался в коде, слишком много для меня. ))
|
------- Отправлено: 02:18, 17-09-2010 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|