Страницы

Поиск по вопросам

четверг, 19 марта 2020 г.

Как форматировать жесткий диск с помощью C++?

#cpp


создаю программу для форматирования жесткого диска через свою программу. Но как не
знаю, точнее знаю что можно через SHFormatDrive(); Но не уме обращаться с ним, как
должен быть выглядеть код при этом?
cin >> (path1);
SHFormatDrive (0, toupper(path1[0])-'A', SHFMT_OPT_FULL, 1);
    


Ответы

Ответ 1



В MSDN же все написано, английский учи) То что после имени функции в скобках - это параметры. Первый парметр - идентификатор "родительского" окна. Т.к. предполагается что программа консольная, то пишем 0. Второй параметр - номер диска, если 0 - то диска А, если 1 - то диск B, 2 - диск C и т.д. Третий параметр - всегда такой. Четвертый параметр - если 0 то все по умолчанию, если 1 - то быстрое форматирование, если 2 - то создать загрузочную дискету (если выбранный диск - флопик) Форматирование не начнется автоматически, пользователю еще нужно будет нажать кнопку "начать" UPD То что написно в MSDN: DWORD SHFormatDrive( __in HWND hwnd, UINT drive, UINT fmtID, UINT options); -- это прототип функции, он показывает какой тип значения функция возвращает (в данном случае это DWORD, просто 4-байтовое целое число без знака) и типы и имена ее параметров (это называется формальными параметрами). При вызове функции не нужно писать тип возвращаемого значения, а вместо формальных параметров нужно писать фактические параметры, то есть конкретные значения или переменные. Типы параметров (HWND, UINT и прочее __in) писать тоже не нужно. Теперь, допустим у тебя в path1 лежит буква диска (будем считать что сама буква лежит в самом начала этой строки). Чтобы отформатировать этот диск нужно сделать вот что: SHFormatDrive (0, toupper(path1[0])-'A', SHFMT_ID_DEFAULT, 0); Что же это за второй параметр такой? А вот что это: path1[0] - берем первый символ в строке path1 toupper(path1[0]) - переводим этот символ в верхний регистр, например если было 'g' то стало 'G' toupper(path1[0])-'A' - вычисляем разницу между полученным символом и символом 'A'. К примеру если пользователь ввел букву 'A', то разница будет равна 0, если 'B' - то 1 и так далее, то есть то что нам и нужно. Кстати, чтобы функция SHFormatDrive заработала, нужно вначале вставить #include , про это тоже написано в той же статье MSDN почти в самом низу в табличке в строке header. Чтобы заработал toupper нужно подключить #include UPD2 Чтобы SHFormatDrive работала в Dev-C++, нужно в начале исходника, где-нибудь после инклудов вствить две строки: __declspec(dllimport) WINAPI DWORD SHFormatDrive(HWND hwnd, UINT drive, UINT fmtID, UINT options); #define SHFMT_ID_DEFAULT 0xFFFF или, так как у нас тут c++, то вторая строка должна выглядеть так: const int SHFMT_ID_DEFAULT = 0xFFFF; или просто вручную в вызове функции заменить SHFMT_ID_DEFAULT на 0xFFFF.

Комментариев нет:

Отправить комментарий