Advertisement
AZJIO

временный пример

Aug 7th, 2018
609
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 11.76 KB | None | 0 0
  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 <ListViewConstants.au3>
  32. #include <Constants.au3>
  33. #include <GUIConstantsEx.au3>
  34. #include <WindowsConstants.au3>
  35. #include <Encoding.au3>
  36. #include <UserGUI.au3>
  37. #include <Array.au3>
  38. #include <GuiListView.au3>
  39.  
  40. Local $Lng[9]
  41. $Lng[0] = 'Check Disk'
  42. $Lng[1] = '\F - Fix disk errors'
  43. $Lng[2] = '\R - Recovering bad sectors'
  44. $Lng[3] = '\X - Forced dismount volume'
  45. $Lng[4] = 'Start'
  46. $Lng[5] = 'Viewing'
  47. $Lng[6] = 'Error'
  48. $Lng[7] = 'Not found any disk' & @LF & 'Completion of the program'
  49. $Lng[8] = 'Gb'
  50.  
  51. If @OSLang = 0419 Then
  52.     $Lng[0] = 'ChkDskGui - проверка дисков на ошибки'
  53.     $Lng[1] = '\F - Исправление ошибок на диске'
  54.     $Lng[2] = '\R - Восстановление поврежденных секторов'
  55.     $Lng[3] = '\X - Принудительное отключение тома'
  56.     $Lng[4] = 'Старт'
  57.     $Lng[5] = 'Просмотр'
  58.     $Lng[6] = 'Ошибка'
  59.     $Lng[7] = 'Не найдено ни одного диска' & @LF & 'Завершение программы'
  60.     $Lng[8] = 'Гб'
  61. EndIf
  62. If StringLen($Lng[8]) > 2 Then $Lng[8] = StringLeft($Lng[8], 2)
  63.  
  64. FileChangeDir(@ScriptDir)
  65. Global $aList[1], $z=1
  66.  
  67. _GetPath('chkdsk.exe') ; Возможно не нужно, но проверяет и предупреждает в случае, если не найден chkdsk.exe
  68. If @error Then Exit MsgBox(16 + 262144, $Lng[6], $Lng[1] & @LF & $Lng[2])
  69.  
  70. $sp = "|"
  71. ; $sp = Chr(1)
  72. ; Opt("GUIDataSeparatorChar", $sp)
  73.  
  74. _GetDrv()
  75. If Not $aList[0] Then Exit MsgBox(4096, $Lng[6], $Lng[7])
  76.  
  77. $hGUI = GUICreate($Lng[0], 460, 230)
  78. ; GUISetIcon(@ScriptDir & '\ChkDskGui.ico')
  79. If Not @Compiled Then GUISetIcon(@ScriptDir & '\ChkDskGui.ico')
  80.  
  81. $iListView = GUICtrlCreateListView('|№|Тип|Метка|ФС|Размер  ' , 5, 5, 450, 140 , $LVS_SHOWSELALWAYS, $LVS_EX_FULLROWSELECT + $LVS_EX_CHECKBOXES+$WS_EX_CLIENTEDGE)
  82. $hListView = GUICtrlGetHandle($iListView)
  83. ; GUICtrlSetFont(-1, -1, -1, 0, "Courier New")
  84. Global $aList_ID[$aList[0]+1]
  85.  
  86. For $i = 1 To $aList[0]
  87.     $aList_ID[$i] = GUICtrlCreateListViewItem($aList[$i], $iListView)
  88. Next
  89.  
  90. $iCh_ArgF = GUICtrlCreateCheckbox($Lng[1], 20, 145, 280, -1)
  91. GUICtrlSetState(-1, $GUI_CHECKED)
  92. $iCh_ArgR = GUICtrlCreateCheckbox($Lng[2], 20, 165, 280, -1)
  93. $iCh_ArgX = GUICtrlCreateCheckbox($Lng[3], 20, 185, 280, -1)
  94. GUICtrlSetState(-1, $GUI_CHECKED)
  95.  
  96. $iBtnHelp = GUICtrlCreateButton('?', 300, 177, 27, 32)
  97. ; $iBtnHelp = GUICtrlCreateButton('?', 305, 82, 22, 22)
  98. GUICtrlSetState(-1, $GUI_FOCUS + $GUI_DEFBUTTON)
  99.  
  100. $iBtnStart = GUICtrlCreateButton($Lng[4], 330, 177, 90, 32)
  101.  
  102. $iStatusBar = GUICtrlCreateLabel('chkdsk.exe' & _GetComString(), 20, 210, 420, 17)
  103.  
  104. GUISetState()
  105.  
  106. While 1
  107.     Switch GUIGetMsg()
  108.         Case $aList_ID[1] To $aList_ID[$aList[0]]
  109.             _Combo()
  110.         ; Case $iListView
  111.             ; _Combo()
  112.         Case $iCh_ArgF
  113.             _Ch_ArgF()
  114.         Case $iCh_ArgR
  115.             _Ch_ArgR()
  116.         Case $iCh_ArgX
  117.             _Ch_ArgX()
  118.         Case $iBtnHelp
  119.             _Help()
  120.         Case $iBtnStart
  121.             _Start()
  122.         Case -3
  123.             Exit
  124.     EndSwitch
  125. WEnd
  126.  
  127. Func _Combo()
  128.     GUICtrlSetData($iStatusBar, 'chkdsk.exe' & _GetComString())
  129. EndFunc
  130.  
  131. Func _Ch_ArgF()
  132.     If GUICtrlRead($iCh_ArgF) = $GUI_UNCHECKED Then
  133.         GUICtrlSetState($iCh_ArgX, $GUI_UNCHECKED)
  134.         GUICtrlSetState($iCh_ArgR, $GUI_UNCHECKED)
  135.     EndIf
  136.     GUICtrlSetData($iStatusBar, 'chkdsk.exe' & _GetComString())
  137. EndFunc
  138.  
  139. Func _Ch_ArgR()
  140.     GUICtrlSetState($iCh_ArgF, $GUI_CHECKED)
  141.     GUICtrlSetData($iStatusBar, 'chkdsk.exe' & _GetComString())
  142. EndFunc
  143.  
  144. Func _Ch_ArgX()
  145.     If GUICtrlRead($iCh_ArgX) = $GUI_CHECKED Then GUICtrlSetState($iCh_ArgF, $GUI_CHECKED)
  146.     GUICtrlSetData($iStatusBar, 'chkdsk.exe' & _GetComString())
  147. EndFunc
  148.  
  149. Func _GetComString()
  150.     Local $sComString, $tmp
  151.     ; $tmp = StringLeft(GUICtrlRead(GUICtrlRead($iListView)), 2)
  152.     ; $sComString &= ' ' & $tmp
  153.     If GUICtrlRead($iCh_ArgF) = $GUI_CHECKED Then $sComString &= " /F"
  154.     If GUICtrlRead($iCh_ArgR) = $GUI_CHECKED Then $sComString &= " /R"
  155.     If GUICtrlRead($iCh_ArgX) = $GUI_CHECKED Then $sComString &= " /X"
  156.     Return $sComString
  157. EndFunc   ;==>_GetComString
  158.  
  159. Func _Start()
  160.     Local $sComString = _GetComString(), $sStrin = ""
  161.     If @error Then
  162.         GUICtrlSetData($iStatusBar, $Lng[6])
  163.         Return SetError(1, 0, $Lng[6])
  164.     EndIf
  165.     Local $Count, $Color = "1e", $res = ''
  166.     $Count = _GUICtrlListView_GetItemCount($hListView)
  167.     For $i = 0 To $Count - 1
  168.         If _GUICtrlListView_GetItemChecked($hListView, $i)=1 Then
  169.             $info = _GUICtrlListView_GetItemTextString($hListView, $i)
  170.             $info = StringReplace($info, '|', ' ')
  171.             $disk = StringLeft($info, 2)
  172.             $res &= "Title Check Disk " & $info & _
  173.                 " & @Echo off & @Echo. & @Echo. & @Echo ====================================================== & @Echo Test " & _
  174.                 $info & " & @Echo ====================================================== & @Echo. & @Echo. & Color " & _
  175.                 $Color & " & chkdsk.exe " & $disk & $sComString & "&"
  176.         EndIf
  177.     Next
  178.     ; MsgBox(0, 'Сообщение', $res)
  179.  
  180.     ; For $i = 1 To $aList[0]
  181.         ; $aList_ID[$i] = GUICtrlCreateListViewItem($aList[$i], $iListView)
  182.     ; Next
  183.  
  184.     _BtnDisable()
  185.     ; Color 3b
  186.     RunWait(@ComSpec & ' /c (' & $res & ' set /p Ok=^>^>)')
  187.     _BtnDisable($GUI_ENABLE)
  188. EndFunc
  189.  
  190. Func _Help() ; coded by AZJIO (2013.09.20)
  191.     Local $iPID, $sOut, $tmp
  192.     $iPID = Run('chkdsk.exe /?', @ScriptDir, @SW_HIDE, $STDOUT_CHILD)
  193.     While 1
  194.         $tmp = StdoutRead($iPID)
  195.         If @error Then ExitLoop
  196.         If $tmp Then $sOut &= @CRLF & $tmp
  197.     WEnd
  198.     If $sOut Then
  199.         _Viewing($hGUI, _Encoding_866To1251($sOut))
  200.     EndIf
  201. EndFunc   ;==>_Help
  202.  
  203. ; Func _Help()
  204.     ; _BtnDisable()
  205.     ; RunWait(@ComSpec & ' /c (Title Check Disk & @Echo off & Color 1e & cls & chkdsk.exe /? & set /p Ok=^>^>)')
  206.     ; _BtnDisable($GUI_ENABLE)
  207. ; EndFunc   ;==>_Help
  208.  
  209. Func _BtnDisable($iState = $GUI_DISABLE)
  210.     GUICtrlSetState($iBtnHelp, $iState)
  211.     GUICtrlSetState($iBtnStart, $iState)
  212. EndFunc   ;==>_Help
  213.  
  214. Func _Viewing($hGUI, $sLog) ; coded by AZJIO (2013.09.20)
  215.     Local $hGuiLog, $aRect, $iEdit
  216.     $aRect = _GetChildCoor($hGUI, 560, 450)
  217.     GUISetState(@SW_DISABLE, $hGUI)
  218.  
  219.     $hGuiLog = GUICreate($Lng[5], $aRect[0], $aRect[1], $aRect[2], $aRect[3], BitOR($WS_OVERLAPPEDWINDOW, $WS_POPUP), -1, $hGUI)
  220.     If Not @Compiled Then GUISetIcon(@ScriptDir & '\ChkDskGui.ico')
  221.  
  222.     $iEdit = GUICtrlCreateEdit('', 0, 0, $aRect[0], $aRect[1])
  223.  
  224.     GUISetState(@SW_SHOW, $hGuiLog)
  225.  
  226.     GUICtrlSetData($iEdit, $sLog)
  227.  
  228.     Do
  229.     Until GUIGetMsg() = $GUI_EVENT_CLOSE
  230.     GUISetState(@SW_ENABLE, $hGUI)
  231.     GUIDelete($hGuiLog)
  232. EndFunc   ;==>_Viewing
  233.  
  234. Func _GetDrv()
  235.     Local $sInfo = _ComboListDrive('Fixed')
  236.     $sInfo &= _ComboListDrive('Removable')
  237.     Return StringTrimLeft($sInfo, 1)
  238. EndFunc
  239.  
  240. Func _ComboListDrive($Type) ; coded by AZJIO (2013.01.26)
  241.     Local $aDrive = DriveGetDrive($Type), $list = '', $sString, $sLabel, $aDisc_Partition
  242.     If @error Then Return ''
  243.     If $Type = 'Removable' Then $Type = 'Rem'
  244.     $aList[0] = 0
  245.     For $i = 1 To $aDrive[0]
  246.         If $aDrive[$i] = 'A:' Or $aDrive[$i] = 'B:' Then ContinueLoop
  247.         $sLabel = DriveGetLabel($aDrive[$i])
  248.         If StringLen($sLabel) > 15 Then $sLabel = StringLeft($sLabel, 12) & '...'
  249.         $aDisc_Partition = _GetDiskNimberForDrive($aDrive[$i])
  250.         ; If @error Then Local $aDisc_Partition[2] = ['?', '?']
  251.         $sString = StringUpper($aDrive[$i]) & $sp & "[" & $aDisc_Partition[0] & ":" & $aDisc_Partition[1] & "]" & $sp & $Type & $sp & $sLabel & $sp & _
  252.                 DriveGetFileSystem($aDrive[$i]) & $sp & _GetSize(DriveSpaceTotal($aDrive[$i])) & $Lng[8]
  253.         $z+=1
  254.         ReDim $aList[$z]
  255.         $aList[0] = $z-1
  256.         $aList[$z-1] = $sString
  257.     Next
  258. EndFunc   ;==>_ComboListDrive
  259.  
  260. Func _GetSize($s)
  261.     $s = StringFormat('%.03f', $s / 1024)
  262.     If StringLen($s) > 7 Then $s = StringRegExpReplace(StringTrimRight($s, 4), '(\A\d{1,3}(?=(\d{3})+\z)|\d{3}(?=\d))', '\1 ') & StringRight($s, 4)
  263.     Return StringFormat('%9s', $s) ; 9 терабайт
  264. EndFunc
  265.  
  266.  
  267. ; http://www.autoitscript.com/forum/topic/91598-get-disk-number-from-drive-letter/?p=659721
  268. ; Описание ........: Возвращает номер диска и номер раздела в формате n:n (<номер диска>:<номер раздела>)
  269. ; Параметры:
  270. ;       $sDriveLetter - Буква диска с двоеточием, например C:
  271. ;                   Неудачно , возвращает -1, @error:
  272. ;                  |1 - Ошибка CreateFile, ваша система очень старая
  273. ;                  |2 - Диск не существует
  274. ;                  |3 - Неудачный вызов DeviceIoControl
  275. ;                  |4 - Не раздела диска
  276. Func _GetDiskNimberForDrive($sDriveLetter) ; Буква диска
  277.  
  278.     Local $aDrive[2] = ['?', '?']
  279.  
  280.     Local $a_hCall = DllCall("kernel32.dll", "hwnd", "CreateFile", _
  281.             "str", "\\.\" & $sDriveLetter, _; Буква диска
  282.             "dword", 0, _
  283.             "dword", 0, _
  284.             "ptr", 0, _
  285.             "dword", 3, _; OPEN_EXISTING
  286.             "dword", 128, _; FILE_ATTRIBUTE_NORMAL
  287.             "ptr", 0)
  288.  
  289.     If @error Then
  290.         Return SetError(1, 0, $aDrive); Ваша система очень старая. Сделайте что-нибудь.
  291.     EndIf
  292.  
  293.     If $a_hCall[0] = -1 Then
  294.         Return SetError(2, 0, $aDrive) ; Диск не существует
  295.     EndIf
  296.  
  297.     Local $hDevice = $a_hCall[0]
  298.  
  299.     Local $tIOCTL_STORAGE_GET_DEVICE_NUMBER = DllStructCreate("dword DeviceType;" & _
  300.             "dword DeviceNumber;" & _
  301.             "int PartitionNumber")
  302.  
  303.     Local $a_iCall = DllCall("kernel32.dll", "int", "DeviceIoControl", _
  304.             "hwnd", $hDevice, _
  305.             "dword", 0x2D1080, _; IOCTL_STORAGE_GET_DEVICE_NUMBER
  306.             "ptr", 0, _
  307.             "dword", 0, _
  308.             "ptr", DllStructGetPtr($tIOCTL_STORAGE_GET_DEVICE_NUMBER), _
  309.             "dword", DllStructGetSize($tIOCTL_STORAGE_GET_DEVICE_NUMBER), _
  310.             "dword*", 0, _
  311.             "ptr", 0)
  312.  
  313.     If @error Or Not $a_hCall[0] Then
  314.         DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hDevice)
  315.         Return SetError(3, 0, $aDrive); неудачный вызов DeviceIoControl
  316.     EndIf
  317.  
  318.     DllCall("kernel32.dll", "int", "CloseHandle", "hwnd", $hDevice)
  319.  
  320.     If DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "DeviceType") = 7 Then; FILE_DEVICE_DISK
  321.         $aDrive[0] = DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "DeviceNumber")
  322.         $aDrive[1] = DllStructGetData($tIOCTL_STORAGE_GET_DEVICE_NUMBER, "PartitionNumber")
  323.         Return SetError(0, 0, $aDrive)
  324.     EndIf
  325.  
  326.     Return SetError(4, 0, $aDrive); Не раздела диска
  327.  
  328. EndFunc   ;==>_GetDiskNimberForDrive
  329.  
  330. Func _GetPath($sFile)
  331.     Local $tmp = _WinAPI_PathFindOnPath($sFile, @ScriptDir)
  332.     If Not @error Then Return $tmp
  333.     ; Теоритически эти пути уже есть в %PATH%, но проверим ещё раз
  334.     If FileExists(@SystemDir & '\' & $sFile) Then
  335.         Return @SystemDir & '\' & $sFile
  336.     ElseIf FileExists(@WindowsDir & '\' & $sFile) Then
  337.         Return @WindowsDir & '\' & $sFile
  338.     EndIf
  339.     Return SetError(1)
  340. EndFunc   ;==>_GetPath
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement