daily pastebin goal
27%
SHARE
TWEET

ChkDskGui

AZJIO Jan 25th, 2013 327 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
  2. #AutoIt3Wrapper_OutFile=ChkDskGui.exe
  3. ; #AutoIt3Wrapper_Compile_Both=y
  4. #AutoIt3Wrapper_OutFile_X64=ChkDskGuiX64.exe
  5. #AutoIt3Wrapper_UseX64=n
  6. #AutoIt3Wrapper_icon=ChkDskGui.ico
  7. #AutoIt3Wrapper_UseUpx=n
  8. ; #AutoIt3Wrapper_Compression=4
  9. #AutoIt3Wrapper_Res_Comment=-
  10. #AutoIt3Wrapper_Res_Description=ChkDskGui.exe
  11. #AutoIt3Wrapper_Res_Fileversion=0.2.0.0
  12. #AutoIt3Wrapper_Res_Fileversion_AutoIncrement=n
  13. #AutoIt3Wrapper_Res_LegalCopyright=AZJIO
  14. #AutoIt3Wrapper_Res_Language=1033
  15. #AutoIt3Wrapper_Run_AU3Check=n
  16. #AutoIt3Wrapper_Res_Field=Version|0.2
  17. #AutoIt3Wrapper_Res_Field=Build|2013.09.20
  18. #AutoIt3Wrapper_Res_Field=Coded by|AZJIO
  19. #AutoIt3Wrapper_Res_Field=CompanyName|AZJIO_Soft
  20. #AutoIt3Wrapper_Res_Field=Compile date|%longdate% %time%
  21. #AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer%
  22. #AutoIt3Wrapper_Run_Obfuscator=y
  23. #Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
  24. ; #Obfuscator_Parameters=/SO
  25. #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3"
  26. #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
  27.  
  28. ;  @AZJIO 2013.09.20 AutoIt3_v3.3.8.1
  29.  
  30. #NoTrayIcon
  31. #include <ComboConstants.au3>
  32. #include <Constants.au3>
  33. #include <GUIConstantsEx.au3>
  34. #include <WindowsConstants.au3>
  35. #include <Encoding.au3>
  36. #include <UserGUI.au3>
  37.  
  38. Local $Lng[9]
  39. $Lng[0] = 'Check Disk'
  40. $Lng[1] = '\F - Fix disk errors'
  41. $Lng[2] = '\R - Recovering bad sectors'
  42. $Lng[3] = '\X - Forced dismount volume'
  43. $Lng[4] = 'Start'
  44. $Lng[5] = 'Viewing'
  45. $Lng[6] = 'Error'
  46. $Lng[7] = 'Not found any disk' & @LF & 'Completion of the program'
  47. $Lng[8] = 'Gb'
  48.  
  49. If @OSLang = 0419 Then
  50.         $Lng[0] = 'ChkDskGui - проверка дисков на ошибки'
  51.         $Lng[1] = '\F - Исправление ошибок на диске'
  52.         $Lng[2] = '\R - Восстановление поврежденных секторов'
  53.         $Lng[3] = '\X - Принудительное отключение тома'
  54.         $Lng[4] = 'Старт'
  55.         $Lng[5] = 'Просмотр'
  56.         $Lng[6] = 'Ошибка'
  57.         $Lng[7] = 'Не найдено ни одного диска' & @LF & 'Завершение программы'
  58.         $Lng[8] = 'Гб'
  59. EndIf
  60. If StringLen($Lng[8]) > 2 Then $Lng[8] = StringLeft($Lng[8], 2)
  61.  
  62. FileChangeDir(@ScriptDir)
  63.  
  64. _GetPath('chkdsk.exe') ; Возможно не нужно, но проверяет и предупреждает в случае, если не найден chkdsk.exe
  65. If @error Then Exit MsgBox(16 + 262144, $sTitle, $Lng[1] & @LF & $Lng[2])
  66.  
  67. Opt("GUIOnEventMode", 1)
  68. $sp = Chr(1)
  69. Opt("GUIDataSeparatorChar", $sp)
  70.  
  71. $sList = _GetDrv()
  72. If Not $sList Then Exit MsgBox(4096, $sTitle, $Lng[7])
  73.  
  74. $hGUI = GUICreate($Lng[0], 440, 130)
  75. ; GUISetIcon(@ScriptDir & '\ChkDskGui.ico')
  76. If Not @Compiled Then GUISetIcon(@ScriptDir & '\ChkDskGui.ico')
  77. GUISetOnEvent($GUI_EVENT_CLOSE, "_Form1Close")
  78.  
  79. $Current=StringRegExp($sList, '(?:\A|\001)([C-Z]: Fixed.*?)(?=\001)', 1)
  80. If @error Then
  81.         $Current = StringLeft($sList, StringInStr($sList & $sp, $sp) - 1)
  82. Else
  83.         $Current = $Current[0]
  84. EndIf
  85. $iCombo = GUICtrlCreateCombo("", 20, 16, 400, 25, $WS_VSCROLL + $CBS_DROPDOWNLIST)
  86. GUICtrlSetFont(-1, -1, -1, 0, "Courier New")
  87. GUICtrlSetData(-1, $sList, $Current)
  88. GUICtrlSetOnEvent(-1, "_Combo")
  89.  
  90. $iCh_ArgF = GUICtrlCreateCheckbox($Lng[1], 20, 45, 280, -1)
  91. GUICtrlSetState(-1, $GUI_CHECKED)
  92. GUICtrlSetOnEvent(-1, "_Ch_ArgF")
  93. $iCh_ArgR = GUICtrlCreateCheckbox($Lng[2], 20, 65, 280, -1)
  94. GUICtrlSetOnEvent(-1, "_Ch_ArgR")
  95. $iCh_ArgX = GUICtrlCreateCheckbox($Lng[3], 20, 85, 280, -1)
  96. GUICtrlSetOnEvent(-1, "_Ch_ArgX")
  97. GUICtrlSetState(-1, $GUI_CHECKED)
  98.  
  99. $iBtnHelp = GUICtrlCreateButton('?', 300, 77, 27, 32)
  100. ; $iBtnHelp = GUICtrlCreateButton('?', 305, 82, 22, 22)
  101. GUICtrlSetOnEvent(-1, "_Help")
  102. GUICtrlSetState(-1, $GUI_FOCUS + $GUI_DEFBUTTON)
  103.  
  104. $iBtnStart = GUICtrlCreateButton($Lng[4], 330, 77, 90, 32)
  105. GUICtrlSetOnEvent(-1, "_Start")
  106.  
  107. $iStatusBar = GUICtrlCreateLabel('chkdsk.exe' & _GetComString(), 20, 110, 420, 17)
  108.  
  109. GUISetState()
  110.  
  111. While 1
  112.         Sleep(10000)
  113. WEnd
  114.  
  115. Func _Combo()
  116.         GUICtrlSetData($iStatusBar, 'chkdsk.exe' & _GetComString())
  117. EndFunc
  118.  
  119. Func _Ch_ArgF()
  120.         If GUICtrlRead($iCh_ArgF) = $GUI_UNCHECKED Then
  121.                 GUICtrlSetState($iCh_ArgX, $GUI_UNCHECKED)
  122.                 GUICtrlSetState($iCh_ArgR, $GUI_UNCHECKED)
  123.         EndIf
  124.         GUICtrlSetData($iStatusBar, 'chkdsk.exe' & _GetComString())
  125. EndFunc
  126.  
  127. Func _Ch_ArgR()
  128.         GUICtrlSetState($iCh_ArgF, $GUI_CHECKED)
  129.         GUICtrlSetData($iStatusBar, 'chkdsk.exe' & _GetComString())
  130. EndFunc
  131.  
  132. Func _Ch_ArgX()
  133.         If GUICtrlRead($iCh_ArgX) = $GUI_CHECKED Then GUICtrlSetState($iCh_ArgF, $GUI_CHECKED)
  134.         GUICtrlSetData($iStatusBar, 'chkdsk.exe' & _GetComString())
  135. EndFunc
  136.  
  137. Func _Form1Close()
  138.         Exit
  139. EndFunc
  140.  
  141. Func _GetComString()
  142.         Local $sComString, $tmp
  143.         $tmp = StringRegExp(GUICtrlRead($iCombo), '(?i)^.{6}([a-z]:).+', 1)
  144.         If @error Then
  145.                 Return SetError(1, 0, $Lng[6])
  146.         Else
  147.                 $sComString &= ' ' & $tmp[0]
  148.         EndIf
  149.         If GUICtrlRead($iCh_ArgF) = $GUI_CHECKED Then $sComString &= " /F"
  150.         If GUICtrlRead($iCh_ArgR) = $GUI_CHECKED Then $sComString &= " /R"
  151.         If GUICtrlRead($iCh_ArgX) = $GUI_CHECKED Then $sComString &= " /X"
  152.         Return $sComString
  153. EndFunc   ;==>_GetComString
  154.  
  155. Func _Start()
  156.         Local $sComString = _GetComString()
  157.         If @error Then
  158.                 GUICtrlSetData($iStatusBar, $Lng[6])
  159.                 Return SetError(1, 0, $Lng[6])
  160.         EndIf
  161.  
  162.         _BtnDisable()
  163.         ; Color 3b
  164.         RunWait(@ComSpec & ' /c (Title Check Disk & @Echo off & Color 1e & cls & chkdsk.exe' & $sComString & ' & set /p Ok=^>^>)')
  165.         _BtnDisable($GUI_ENABLE)
  166. EndFunc
  167.  
  168. Func _Help() ; coded by AZJIO (2013.09.20)
  169.         Local $iPID, $sOut, $tmp
  170.         $iPID = Run('chkdsk.exe /?', @ScriptDir, @SW_HIDE, $STDOUT_CHILD)
  171.         While 1
  172.                 $tmp = StdoutRead($iPID)
  173.                 If @error Then ExitLoop
  174.                 If $tmp Then $sOut &= @CRLF & $tmp
  175.         WEnd
  176.         If $sOut Then
  177.                 _Viewing($hGUI, _Encoding_866To1251($sOut))
  178.         EndIf
  179. EndFunc   ;==>_Help
  180.  
  181. ; Func _Help()
  182.         ; _BtnDisable()
  183.         ; RunWait(@ComSpec & ' /c (Title Check Disk & @Echo off & Color 1e & cls & chkdsk.exe /? & set /p Ok=^>^>)')
  184.         ; _BtnDisable($GUI_ENABLE)
  185. ; EndFunc   ;==>_Help
  186.  
  187. Func _BtnDisable($iState = $GUI_DISABLE)
  188.         GUICtrlSetState($iBtnHelp, $iState)
  189.         GUICtrlSetState($iBtnStart, $iState)
  190. EndFunc   ;==>_Help
  191.  
  192. Func _Viewing($hGUI, $sLog) ; coded by AZJIO (2013.09.20)
  193.         Local $hGuiLog, $aRect, $iEdit
  194.         $aRect = _GetChildCoor($hGUI, 560, 330)
  195.         GUISetState(@SW_DISABLE, $hGUI)
  196.  
  197.         $hGuiLog = GUICreate($Lng[5], $aRect[0], $aRect[1], $aRect[2], $aRect[3], BitOR($WS_OVERLAPPEDWINDOW, $WS_POPUP), -1, $hGUI)
  198.         If Not @Compiled Then GUISetIcon(@ScriptDir & '\ChkDskGui.ico')
  199.  
  200.         $iEdit = GUICtrlCreateEdit('', 0, 0, $aRect[0], $aRect[1])
  201.  
  202.         GUISetState(@SW_SHOW, $hGuiLog)
  203.  
  204.         GUICtrlSetData($iEdit, $sLog)
  205.  
  206.         Opt("GUIOnEventMode", 0)
  207.         Do
  208.         Until GUIGetMsg() = $GUI_EVENT_CLOSE
  209.         Opt("GUIOnEventMode", 1)
  210.         GUISetState(@SW_ENABLE, $hGUI)
  211.         GUIDelete($hGuiLog)
  212. EndFunc   ;==>_Viewing
  213.  
  214. Func _GetDrv()
  215.         Local $sInfo = _ComboListDrive('Fixed')
  216.         $sInfo &= _ComboListDrive('Removable')
  217.         Return StringTrimLeft($sInfo, 1)
  218. EndFunc
  219.  
  220. Func _ComboListDrive($Type) ; coded by AZJIO (2013.01.26)
  221.         Local $aDrive = DriveGetDrive($Type), $list = '', $sString, $sLabel, $aDisc_Partition
  222.         If @error Then Return ''
  223.         If $Type = 'Removable' Then $Type = 'Rem'
  224.         For $i = 1 To $aDrive[0]
  225.                 If $aDrive[$i] = 'A:' Then ContinueLoop
  226.                 $sLabel = DriveGetLabel($aDrive[$i])
  227.                 If StringLen($sLabel) > 15 Then $sLabel = StringLeft($sLabel, 12) & '...'
  228.                 $aDisc_Partition = _GetDiskNimberForDrive($aDrive[$i])
  229.                 ; If @error Then Local $aDisc_Partition[2] = ['?', '?']
  230.                 $sString = StringFormat('%2s:%-2s %-2s %-5s %-15s %-5s ', $aDisc_Partition[0], $aDisc_Partition[1], StringUpper($aDrive[$i]), $Type, $sLabel, _
  231.                                 DriveGetFileSystem($aDrive[$i])) & _GetSize(DriveSpaceTotal($aDrive[$i])) & ' ' & $Lng[8]
  232.                 $list &= $sp & $sString
  233.         Next
  234.         Return $list
  235. EndFunc   ;==>_ComboListDrive
  236.  
  237. Func _GetSize($s)
  238.         $s = StringFormat('%.03f', $s / 1024)
  239.         If StringLen($s) > 7 Then $s = StringRegExpReplace(StringTrimRight($s, 4), '(\A\d{1,3}(?=(\d{3})+\z)|\d{3}(?=\d))', '\1 ') & StringRight($s, 4)
  240.         Return StringFormat('%9s', $s) ; 9 терабайт
  241. EndFunc
  242.  
  243.  
  244. ; http://www.autoitscript.com/forum/topic/91598-get-disk-number-from-drive-letter/?p=659721
  245. ; Описание ........: Возвращает номер диска и номер раздела в формате n:n (<номер диска>:<номер раздела>)
  246. ; Параметры:
  247. ;               $sDriveLetter - Буква диска с двоеточием, например C:
  248. ;                                       Неудачно , возвращает -1, @error:
  249. ;                  |1 - Ошибка CreateFile, ваша система очень старая
  250. ;                  |2 - Диск не существует
  251. ;                  |3 - Неудачный вызов DeviceIoControl
  252. ;                  |4 - Не раздела диска
  253. Func _GetDiskNimberForDrive($sDriveLetter) ; Буква диска
  254.  
  255.         Local $aDrive[2] = ['?', '?']
  256.  
  257.         Local $a_hCall = DllCall("kernel32.dll", "hwnd", "CreateFile", _
  258.                         "str", "\\.\" & $sDriveLetter, _; Буква диска
  259.                         "dword", 0, _
  260.                         "dword", 0, _
  261.                         "ptr", 0, _
  262.                         "dword", 3, _; OPEN_EXISTING
  263.                         "dword", 128, _; FILE_ATTRIBUTE_NORMAL
  264.                         "ptr", 0)
  265.  
  266.         If @error Then
  267.                 Return SetError(1, 0, $aDrive); Ваша система очень старая. Сделайте что-нибудь.
  268.         EndIf
  269.  
  270.         If $a_hCall[0] = -1 Then
  271.                 Return SetError(2, 0, $aDrive) ; Диск не существует
  272.         EndIf
  273.  
  274.         Local $hDevice = $a_hCall[0]
  275.  
  276.         Local $tIOCTL_STORAGE_GET_DEVICE_NUMBER = DllStructCreate("dword DeviceType;" & _
  277.                         "dword DeviceNumber;" & _
  278.                         "int PartitionNumber")
  279.  
  280.         Local $a_iCall = DllCall("kernel32.dll", "int", "DeviceIoControl", _
  281.                         "hwnd", $hDevice, _
  282.                         "dword", 0x2D1080, _; IOCTL_STORAGE_GET_DEVICE_NUMBER
  283.                         "ptr", 0, _
  284.                         "dword", 0, _
  285.                         "ptr", DllStructGetPtr($tIOCTL_STORAGE_GET_DEVICE_NUMBER), _
  286.                         "dword", DllStructGetSize($tIOCTL_STORAGE_GET_DEVICE_NUMBER), _
  287.                         "dword*", 0, _
  288.                         "ptr", 0)
  289.  
  290.         If @error Or Not $a_hCall[0] Then
  291.                 DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hDevice)
  292.                 Return SetError(3, 0, $aDrive); неудачный вызов DeviceIoControl
  293.         EndIf
  294.  
  295.         DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hDevice)
  296.  
  297.         If DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "DeviceType") = 7 Then; FILE_DEVICE_DISK
  298.                 $aDrive[0] = DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "DeviceNumber")
  299.                 $aDrive[1] = DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "PartitionNumber")
  300.                 Return SetError(0, 0, $aDrive)
  301.         EndIf
  302.  
  303.         Return SetError(4, 0, $aDrive); Не раздела диска
  304.  
  305. EndFunc   ;==>_GetDiskNimberForDrive
  306.  
  307. Func _GetPath($sFile)
  308.         Local $tmp = _WinAPI_PathFindOnPath($sFile, @ScriptDir)
  309.         If Not @error Then Return $tmp
  310.         ; Теоритически эти пути уже есть в %PATH%, но проверим ещё раз
  311.         If FileExists(@SystemDir & '\' & $sFile) Then
  312.                 Return @SystemDir & '\' & $sFile
  313.         ElseIf FileExists(@WindowsDir & '\' & $sFile) Then
  314.                 Return @WindowsDir & '\' & $sFile
  315.         EndIf
  316.         Return SetError(1)
  317. EndFunc   ;==>_GetPath
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top