Что нового

Как скрыть-отобразить букву конкретного жесткого диска

Сообщения
34
Репутация
0
Добрый день.

Можно ли средствами языка autoit - скрыть конкретную букву одного из жестких дисков (диск E) в проводнике, а при повторном нажатии - снова отобразить эту букву ?

Вручную - операции такие:
Запуск командной строки от имени администратора.
И по порядку выполнить пять команд:
  1. diskpart
  2. list volume — эта команда покажет список разделов на компьютере. Нужно отметить для себя номер (число N) раздела, который нужно скрыть и его букву (пусть будет E).
  3. select volume N
  4. remove letter=E
  5. exit
Но вот как скриптом это сделать ?
Сообщение автоматически объединено:

Как вы считаете - это можно сделать скриптом ?
 
Последнее редактирование:
Автор
В
Сообщения
34
Репутация
0
Как хотя бы одну команду "diskpart " - скриптом Autoit через командную строку от имени администратора выполнить ?
Вот так, что ли ? :
Код:
#RequireAdmin
 Run("diskpart")
  Run("list volume")


Или как-то по-другому ?
 
Последнее редактирование:

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Смотрите справку, иногда там есть ответ практически на 100%. Пример из справки плюс добавил перекодировку строки для нормального отображения
(Библиотеку Encoding.au3 можно найти на форуме)
Код:
#RequireAdmin
#include <Constants.au3>
#include <Encoding.au3>

Local $iPID = Run("diskpart.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)

; Записывает строку для сортировки в дочерний diskpart.exe's Stdin.
StdinWrite($iPID, "list volume" )

; Вызов StdinWrite без второго параметра закрывает поток.
StdinWrite($iPID)

Local $sOutput = "" ; Переменная для хранения вывода StdoutRead.

; Читает из дочернего Stdout потока и вывод результата
While 1
    $sOutput &= StdoutRead($iPID) ; Читает Stdout поток используя PID возвращённый функцией Run.
    If @error Then ; Выход из цикла, если процесс завершён или StdoutRead возвращает ошибку.
        ExitLoop
    EndIf
WEnd

MsgBox(4096, "", "Результат: " & @CRLF &_Encoding_CyrillicTo1251( $sOutput))
 
Автор
В
Сообщения
34
Репутация
0
ra4o
спасибо.

А где в этом коде указывать - какую букву диска скрывать ?
Мне нужно - номер раздела 3, диск "E"

Использую ваш скрипт вот так (с применением Encoding.au3):
Код:
#RequireAdmin
#include <Constants.au3>
#include <Encoding.au3>

Local $iPID = Run("diskpart.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)

; Записывает строку для сортировки в дочерний diskpart.exe's Stdin.
StdinWrite($iPID, "list volume" )

; Вызов StdinWrite без второго параметра закрывает поток.
StdinWrite($iPID)


Local $sOutput = "" ; Переменная для хранения вывода StdoutRead.

StdinWrite($iPID, "select volume 3" )
StdinWrite($iPID, "remove letter=E" )
StdinWrite($iPID, "Exit" )

; Читает из дочернего Stdout потока и вывод результата
While 1
    $sOutput &= StdoutRead($iPID) ; Читает Stdout поток используя PID возвращённый функцией Run.
    If @error Then ; Выход из цикла, если процесс завершён или StdoutRead возвращает ошибку.
        ExitLoop
    EndIf
WEnd

MsgBox(4096, "", "Результат: " & @CRLF &_Encoding_CyrillicTo1251( $sOutput))

Ничего не происходит.
 

Вложения

  • Encoding.au3
    41.1 КБ · Просмотры: 4
Последнее редактирование:

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Как-то так
Код:
#RequireAdmin
#include <Constants.au3>
#include <Encoding.au3>

Local $iPID = Run("diskpart.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)

; Записывает строку для сортировки в дочерний diskpart.exe's Stdin.
StdinWrite($iPID, "list volume" )


; Вызов StdinWrite без второго параметра закрывает поток.
StdinWrite($iPID)

Local $sOutput = "" ; Переменная для хранения вывода StdoutRead.

; Читает из дочернего Stdout потока и вывод результата
While 1
    $sOutput &= StdoutRead($iPID) ; Читает Stdout поток используя PID возвращённый функцией Run.
    If @error Then ; Выход из цикла, если процесс завершён или StdoutRead возвращает ошибку.
        ExitLoop
    EndIf
WEnd

MsgBox(4096, "", "Результат: " & @CRLF &_Encoding_CyrillicTo1251( $sOutput))

$iPID = Run("diskpart.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)

StdinWrite($iPID,"select volume=3"&@CRLF&"remove letter=E" )
; Вызов StdinWrite без второго параметра закрывает поток.
StdinWrite($iPID)

$sOutput = "" ; Переменная для хранения вывода StdoutRead.

; Читает из дочернего Stdout потока и вывод результата
While 1
    $sOutput &= StdoutRead($iPID) ; Читает Stdout поток используя PID возвращённый функцией Run.
    If @error Then ; Выход из цикла, если процесс завершён или StdoutRead возвращает ошибку.
        ExitLoop
    EndIf
WEnd

MsgBox(4096, "", "Результат: " & @CRLF &_Encoding_CyrillicTo1251( $sOutput))
 
Последнее редактирование:
Автор
В
Сообщения
34
Репутация
0
Спасибо большое.
А обратно его (тот же раздел 3, диск Е) как отобразить ?

Там в командной строке нужны будут такие команды:

diskpart
list volume
select volume 3
assign letter=E
 
Последнее редактирование:
Верх