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

Показать сообщение отдельно

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


Сообщения: 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