Как отформатировать флопик из VB?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
BorisSS
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 12.10.2003 (Вс) 10:18

Как отформатировать флопик из VB?

Сообщение BorisSS » 24.03.2004 (Ср) 17:21

Что-то я не могу найти такой команды :(
Мож кто знает?

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 24.03.2004 (Ср) 17:29

Вот это вызовет окно "Форматирование: Диск 3,5 (A)"

Код: Выделить всё
'Объявления API
Private Declare Function SHFormatDrive Lib "Shell32" (ByVal hwndOwner As Long, ByVal iDrive As Long, ByVal iCapacity As Long, ByVal iFormatType As Long) As Long

'Вызов форматирования
Private Function ShowFormat(Optional ByVal iDrive As Long, _
Optional ByVal iCapacity As Long, Optional ByVal iFormatType As Long) As Long
On Error Resume Next
    ShowFormat = SHFormatDrive(0, iDrive, iCapacity, _
    iFormatType)

End Function

Private Sub Form_Load()
On Error Resume Next
'Форматнуть диск A: (по умолчанию)
    ShowFormat
End Sub


А вот это сделает то же самое, но из командной строки:
Код: Выделить всё
Shell "format a: /u"
Моду создают модоки, а распространяют модозвоны.

BorisSS
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 12.10.2003 (Вс) 10:18

Сообщение BorisSS » 24.03.2004 (Ср) 17:41

Мне надо форматировать без вызова окна.
Что-то второй вариант не работает :(

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 24.03.2004 (Ср) 17:57

Используй
Код: Выделить всё
Shell Environ("COMSPEC") & " /c format a: /u /y"

или ту же командную строку с CreateProcess:
Код: Выделить всё
Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDirectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long

В случае CreateProcess API ты даже сможешь задать атрибут CREATE_NO_WINDOW (только для NT), который скорет окно запущенного приложения. Контроль закрытия приложения осуществляй при помощи WaitForSingleObject API:
Код: Выделить всё
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long


API-Guide тебе в помощь!
Моду создают модоки, а распространяют модозвоны.

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 24.03.2004 (Ср) 18:13

Можно использовать BAT'ы
Не забудь подключить Microsoft Scripting Runtime

Код: Выделить всё
Dim fso As New FileSystemObject
Dim dr As Drive
Dim AppPath As String

Sub Form_Load()
If Right(App.Path, 1) = "\" Then AppPath = App.Path Else AppPath = App.Path & "\"
End Sub

Sub FullFormatDriveA() 'полное форматирование
Set dr = fso.GetDrive("A:")
If dr.IsReady Then
WriteResponseFile
Dim F As Integer
Dim batch As String
batch = AppPath & "qf_a.bat"
F = FreeFile
Open batch For Output As #F
Print #F, "Format A: /U < resp.txt"
Print #F, "del resp.txt"
Print #F, "del %0"
Close #F
Shell batch, vbHide
Else
MsgBox "Я заходил к дисководу, у него никого нет!", vbOKOnly
End If
End Sub

Private Sub QuickFormatDriveA() 'быстрое форматирование
Set dr = fso.GetDrive("A:")
If dr.IsReady Then
WriteResponseFile
Dim F As Integer
Dim batch As String
batch = AppPath & "qf_a.bat"
F = FreeFile
Open batch For Output As #F
Print #F, "Format A: /Q < resp.txt"
Print #F, "del resp.txt"
Print #F, "del %0"
Close #F
Shell batch, vbHide
Else
MsgBox "Я заходил к дисководу, у него никого нет!", vbOKOnly
End If
End Sub
Нет меня больше

BorisSS
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 12.10.2003 (Вс) 10:18

Сообщение BorisSS » 25.03.2004 (Чт) 11:46

Shell Environ("COMSPEC") & " /c format a: /u /y"


почему-то не работает под 98, хотя под ХП все ОК

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 25.03.2004 (Чт) 13:14

Усовершенствуем до такого варианта:

Код: Выделить всё
Dim strCmdPath As String, strWinPath as String
On Error Resume Next
strWinPath = Environ ("WINDIR")
If Len(strWinPath) = 0 Then _
strWinPath = "C:\WINDOWS"
If Mid(strWinPath, Len(strWinPath), _
1) = "\" Then strWinPath = Mid(strWinPath, _
1, Len(strWinPath)-1)
strCmdPath = Environ("COMSPEC")
If Len(strCmdPath) = 0 Then _
strCmdPath = strWinPath & _
"\command.com"
Shell strCmdPath & " /c format a: /u /y"
Моду создают модоки, а распространяют модозвоны.

BorisSS
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 12.10.2003 (Вс) 10:18

Сообщение BorisSS » 25.03.2004 (Чт) 13:37

Спасибо!
А все равно под 98 не работает :( Т.е. сеанс MS-Dos "вспыхивает" на полсекунды, но форматирование не начинается.
Но, если в строке
Shell strCmdPath & " /c format a: /u /y"

удалить "/y", то окно MS-Dos открывается в свернутом виде и надо его разворачивать, а затем нажимать Enter.
Мне бы хотелось, чтобы нажал кнопку и, без всяких подсказок и лишних манипуляций пошло форматирование.
СУВЖ,
Борис.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 25.03.2004 (Чт) 14:01

Enter можно нажать при помощи keyb_event:

Код: Выделить всё
Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)


Описание параметров:
· bVk
Задает код виртуальной клавиши. Код клавиши - это значение от 1 до 254.

· bScan
Задает аппаратный скан-код клавиши. Обычно устанавливается в 0.

· fdwFlags
Набор флагов, которые задают различные параметры операции посылки кода клавиши. Приложение может использовать любую комбинацию из данных предустановленных констант для установки флагов:
KEYEVENTF_EXTENDEDKEY
Если установлен, этот флаг показывает, что скан-код должен быть предварен байтом со значением 0xE0 (224).
KEYEVENTF_KEYUP
Если установлен, этот флаг показывает, что клавиша отпускается. Если нет, то клавиша нажимается.

· dwExtraInfo
Задает дополнительное 32-битное значение (Long), связанное со строкой, посылаемой системе. Обычно устанавливается в 0.
Последний раз редактировалось hCORe 25.03.2004 (Чт) 14:09, всего редактировалось 1 раз.
Моду создают модоки, а распространяют модозвоны.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 25.03.2004 (Чт) 14:08

А чтобы окно появлялось сразу, используй:
Код: Выделить всё
Shell strCmdPath & " /c format a: /u", vbNormalFocus
Моду создают модоки, а распространяют модозвоны.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList  
cron