OVH Cloud OVH Cloud

API shfFormatDrive

24 réponses
Avatar
X
Bonjour,

Voici un code, celui de l'appel du formatage A, cependant, est-il
possible de l'automatiser, car là est le problème des API, il y a 4
interventions manuelles, 2 avant <démarrer> + message et 2 après message +
<fermer> ???

Private Declare Function SHFormatDrive Lib "shell32.dll" _
(ByVal hwnd As Long, ByVal drive As Integer, _
ByVal fmtID As Integer, ByVal options As Integer) As Long
Private Const SHFMT_ID_DEFAULT = 0
Dim Réponse As Long ' 0=ok, (-1)=erreur
'
Sub Form_Activate()
DoEvents
Réponse = SHFormatDrive(hwnd, 0, SHFMT_ID_DEFAULT, 1) ' 0 = complet, 1 =
rapide
Unload Form1
End
End Sub


--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------

10 réponses

1 2 3
Avatar
Patrice Henrio
Dans le temps, sous dos on pouvait rediriger l'entrée par un fichier. Il
suffisait de créer le fichier texte avec les codes ASCII nécessaires et le
tour était joué.

@ECHO OFF
C:DOSFORMAT %1 <C:FORMAT.TXT >NUL

Je te joins les deux fichiers nécessaires.
La commande <CFormat.txt>Nul
permet d'attribuer l'input du clavier au fichier format.txt et l'output de
l'écran à Nul

Le fichier format.txt ne peut être éditer (sauf en hexadécimal) car il
contient des codes de commandes (Entrée, O suivi d'Entrée ou N suivi
d'entrée).

Format.bat est un fichier batch normal DOS.

Tu dois pouvoir t'inspirer de cet exemple pour faire quelque chose qui
fonctionne puisqu'à mon avis Format A: reste une commande de bas niveau.

Salut et bon courage.



"X" a écrit dans le message de news:
ueHze$
Bonjour,

Voici un code, celui de l'appel du formatage A, cependant, est-il
possible de l'automatiser, car là est le problème des API, il y a 4
interventions manuelles, 2 avant <démarrer> + message et 2 après message +
<fermer> ???

Private Declare Function SHFormatDrive Lib "shell32.dll" _
(ByVal hwnd As Long, ByVal drive As Integer, _
ByVal fmtID As Integer, ByVal options As Integer) As Long
Private Const SHFMT_ID_DEFAULT = 0
Dim Réponse As Long ' 0=ok, (-1)=erreur
'
Sub Form_Activate()
DoEvents
Réponse = SHFormatDrive(hwnd, 0, SHFMT_ID_DEFAULT, 1) ' 0 = complet, 1 > rapide
Unload Form1
End
End Sub


--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------






begin 666 FORMAT.TXT
%#0U.#1H`
`
end

begin 666 FORMAT.BAT
M0$5#2$@3T9&#0I#.EQ$3U-<1D]234%4("4Q(#Q#.EQ&3U)-050N5%A4(#Y.
#54P:
`
end
Avatar
X
Merci, je vais voir, cependant j'ai été il y a quelques semaines vers les
batch, mais le problème c'est qu'on ne tourne plus en mode Dos, mais en tant
qu'application lancée depuis Windows, alors ça ne marchait pas terrible, je
vais réétudier les batch alors...

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Patrice Henrio" a écrit dans le message de
news: %
Dans le temps, sous dos on pouvait rediriger l'entrée par un fichier. Il
suffisait de créer le fichier texte avec les codes ASCII nécessaires et le
tour était joué.

@ECHO OFF
C:DOSFORMAT %1 <C:FORMAT.TXT >NUL

Je te joins les deux fichiers nécessaires.
La commande <CFormat.txt>Nul
permet d'attribuer l'input du clavier au fichier format.txt et l'output de
l'écran à Nul

Le fichier format.txt ne peut être éditer (sauf en hexadécimal) car il
contient des codes de commandes (Entrée, O suivi d'Entrée ou N suivi
d'entrée).

Format.bat est un fichier batch normal DOS.

Tu dois pouvoir t'inspirer de cet exemple pour faire quelque chose qui
fonctionne puisqu'à mon avis Format A: reste une commande de bas niveau.

Salut et bon courage.



"X" a écrit dans le message de news:
ueHze$
Bonjour,

Voici un code, celui de l'appel du formatage A, cependant, est-il
possible de l'automatiser, car là est le problème des API, il y a 4
interventions manuelles, 2 avant <démarrer> + message et 2 après message
+
<fermer> ???

Private Declare Function SHFormatDrive Lib "shell32.dll" _
(ByVal hwnd As Long, ByVal drive As Integer, _
ByVal fmtID As Integer, ByVal options As Integer) As Long
Private Const SHFMT_ID_DEFAULT = 0
Dim Réponse As Long ' 0=ok, (-1)=erreur
'
Sub Form_Activate()
DoEvents
Réponse = SHFormatDrive(hwnd, 0, SHFMT_ID_DEFAULT, 1) ' 0 = complet, 1 >> rapide
Unload Form1
End
End Sub


--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------









Avatar
X
J'ai regardé les 2 fichiers, à quel moment on lui demande de formater A, je
n'ai pas vu la demande, car en batch j'aurais mis au début:

@echo o | format a:/v/u/q

Qu'en penses-tu?

Je vais tester...

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Patrice Henrio" a écrit dans le message de
news: %
Dans le temps, sous dos on pouvait rediriger l'entrée par un fichier. Il
suffisait de créer le fichier texte avec les codes ASCII nécessaires et le
tour était joué.

@ECHO OFF
C:DOSFORMAT %1 <C:FORMAT.TXT >NUL

Je te joins les deux fichiers nécessaires.
La commande <CFormat.txt>Nul
permet d'attribuer l'input du clavier au fichier format.txt et l'output de
l'écran à Nul

Le fichier format.txt ne peut être éditer (sauf en hexadécimal) car il
contient des codes de commandes (Entrée, O suivi d'Entrée ou N suivi
d'entrée).

Format.bat est un fichier batch normal DOS.

Tu dois pouvoir t'inspirer de cet exemple pour faire quelque chose qui
fonctionne puisqu'à mon avis Format A: reste une commande de bas niveau.

Salut et bon courage.



"X" a écrit dans le message de news:
ueHze$
Bonjour,

Voici un code, celui de l'appel du formatage A, cependant, est-il
possible de l'automatiser, car là est le problème des API, il y a 4
interventions manuelles, 2 avant <démarrer> + message et 2 après message
+
<fermer> ???

Private Declare Function SHFormatDrive Lib "shell32.dll" _
(ByVal hwnd As Long, ByVal drive As Integer, _
ByVal fmtID As Integer, ByVal options As Integer) As Long
Private Const SHFMT_ID_DEFAULT = 0
Dim Réponse As Long ' 0=ok, (-1)=erreur
'
Sub Form_Activate()
DoEvents
Réponse = SHFormatDrive(hwnd, 0, SHFMT_ID_DEFAULT, 1) ' 0 = complet, 1 >> rapide
Unload Form1
End
End Sub


--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------









Avatar
X
Bof, ça donne rien, j'attends de voir ce que tu en dis, je viens de
retrouver un Marabout "les fichiers batch sous MsDos", ah, avec ça, ça va
aider....
A mon sens, sur le principe de tes fichiers, on peut, peut être, faire un
appel à un batch qui lancerait le formatage; et ensuite faire 3 fichiers
(n.bat, o.bat, ok.bat) qui dialogueraient avec le batch, bon, je vais
essayer de faire ça, mais il y a si longtemps, le livre date de 98, ça doir
fairee 10 ans que je n'ai pas fait de batch...
En fait j'aurais seulement besoin d'un "deltree" à cause des répertoire
pleins, mais personne ne réussit à le faire marcher, y compris moi
évidemment :o)

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Patrice Henrio" a écrit dans le message de
news: %
Dans le temps, sous dos on pouvait rediriger l'entrée par un fichier. Il
suffisait de créer le fichier texte avec les codes ASCII nécessaires et le
tour était joué.

@ECHO OFF
C:DOSFORMAT %1 <C:FORMAT.TXT >NUL

Je te joins les deux fichiers nécessaires.
La commande <CFormat.txt>Nul
permet d'attribuer l'input du clavier au fichier format.txt et l'output de
l'écran à Nul

Le fichier format.txt ne peut être éditer (sauf en hexadécimal) car il
contient des codes de commandes (Entrée, O suivi d'Entrée ou N suivi
d'entrée).

Format.bat est un fichier batch normal DOS.

Tu dois pouvoir t'inspirer de cet exemple pour faire quelque chose qui
fonctionne puisqu'à mon avis Format A: reste une commande de bas niveau.

Salut et bon courage.



"X" a écrit dans le message de news:
ueHze$
Bonjour,

Voici un code, celui de l'appel du formatage A, cependant, est-il
possible de l'automatiser, car là est le problème des API, il y a 4
interventions manuelles, 2 avant <démarrer> + message et 2 après message
+
<fermer> ???

Private Declare Function SHFormatDrive Lib "shell32.dll" _
(ByVal hwnd As Long, ByVal drive As Integer, _
ByVal fmtID As Integer, ByVal options As Integer) As Long
Private Const SHFMT_ID_DEFAULT = 0
Dim Réponse As Long ' 0=ok, (-1)=erreur
'
Sub Form_Activate()
DoEvents
Réponse = SHFormatDrive(hwnd, 0, SHFMT_ID_DEFAULT, 1) ' 0 = complet, 1 >> rapide
Unload Form1
End
End Sub


--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------









Avatar
Patrice Henrio
Tester chez moi et ça marche y compris avec des repertoires comportant
d'autres répertoires.

'Dans une forme un command button
Private Sub Command1_Click()
EffaceFichiers ("A:")
EffaceRépertoires ("A:")
End Sub

Dans un module
Option Explicit

'Il faut rajouter les références aux API
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA"
_
(ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As
Long
Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" ( _
ByVal lpFileName As String) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" _
(ByVal hFindFile As Long, lpFindFileData As
WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long)
As Long

Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * 260
cAlternate As String * 14
End Type

'Copier de l'API viewer
'Renvoie le nom d'un fichier ou d'un répertoire
Function StripNulls(OriginalStr As String) As String
If (InStr(OriginalStr, Chr(0)) > 0) Then
OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
End If
StripNulls = OriginalStr
End Function


Public Sub EffaceFichier(Fichier As String)
DeleteFile (Fichier)
End Sub

'efface les répertoires : il faut d'abord les vider
Public Sub EffaceRépertoires(Path As String)
Dim WFD As WIN32_FIND_DATA
Dim hsearch As Long
Dim fin As Integer
Dim name As String

hsearch = FindFirstFile(Path & "*", WFD)
If hsearch <> -1 Then
Do
name = StripNulls(WFD.cFileName)
If (name <> ".") And (name <> "..") Then
EffaceRépertoires (Path & name & "")

RmDir Path & name
End If
fin = FindNextFile(hsearch, WFD)
'If fin = 0 Then FindClose (hsearch)
Loop While fin > 0
FindClose hsearch
End If
End Sub

'efface tous les fichiers, même ceux qui sont dans des sous-répertoires
Sub EffaceFichiers(Path As String)
Dim WFD As WIN32_FIND_DATA
Dim hsearch As Long
Dim name As String
Dim fin As Long

hsearch = FindFirstFile(Path & "*.*", WFD)
If hsearch <> -1 Then
Do
name = StripNulls(WFD.cFileName)
If (name <> ".") And (name <> "..") Then
name = Path + name
If (WFD.dwFileAttributes And 32) <> 0 Then
EffaceFichier (name)

End If
If (WFD.dwFileAttributes And 16) <> 0 Then
EffaceFichiers (name & "")
End If
End If
fin = FindNextFile(hsearch, WFD)
If fin = 0 Then FindClose (hsearch)
Loop While fin > 0
End If
End Sub




"X" a écrit dans le message de news:
%23DSen$
Bof, ça donne rien, j'attends de voir ce que tu en dis, je viens de
retrouver un Marabout "les fichiers batch sous MsDos", ah, avec ça, ça va
aider....
A mon sens, sur le principe de tes fichiers, on peut, peut être, faire un
appel à un batch qui lancerait le formatage; et ensuite faire 3 fichiers
(n.bat, o.bat, ok.bat) qui dialogueraient avec le batch, bon, je vais
essayer de faire ça, mais il y a si longtemps, le livre date de 98, ça
doir fairee 10 ans que je n'ai pas fait de batch...
En fait j'aurais seulement besoin d'un "deltree" à cause des répertoire
pleins, mais personne ne réussit à le faire marcher, y compris moi
évidemment :o)

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Patrice Henrio" a écrit dans le message de
news: %
Dans le temps, sous dos on pouvait rediriger l'entrée par un fichier. Il
suffisait de créer le fichier texte avec les codes ASCII nécessaires et
le tour était joué.

@ECHO OFF
C:DOSFORMAT %1 <C:FORMAT.TXT >NUL

Je te joins les deux fichiers nécessaires.
La commande <CFormat.txt>Nul
permet d'attribuer l'input du clavier au fichier format.txt et l'output
de l'écran à Nul

Le fichier format.txt ne peut être éditer (sauf en hexadécimal) car il
contient des codes de commandes (Entrée, O suivi d'Entrée ou N suivi
d'entrée).

Format.bat est un fichier batch normal DOS.

Tu dois pouvoir t'inspirer de cet exemple pour faire quelque chose qui
fonctionne puisqu'à mon avis Format A: reste une commande de bas niveau.

Salut et bon courage.



"X" a écrit dans le message de news:
ueHze$
Bonjour,

Voici un code, celui de l'appel du formatage A, cependant, est-il
possible de l'automatiser, car là est le problème des API, il y a 4
interventions manuelles, 2 avant <démarrer> + message et 2 après message
+
<fermer> ???

Private Declare Function SHFormatDrive Lib "shell32.dll" _
(ByVal hwnd As Long, ByVal drive As Integer, _
ByVal fmtID As Integer, ByVal options As Integer) As Long
Private Const SHFMT_ID_DEFAULT = 0
Dim Réponse As Long ' 0=ok, (-1)=erreur
'
Sub Form_Activate()
DoEvents
Réponse = SHFormatDrive(hwnd, 0, SHFMT_ID_DEFAULT, 1) ' 0 = complet, 1
>>> rapide
Unload Form1
End
End Sub


--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------













Avatar
X
Nous avons trouvé, j'ai trouvé, mais il reste un problème, voici déjà le
code, le problème suit le code :

Sub Form_Activate()
Dim commande As String
Dim p1 As Integer
ChDrive App.Path
ChDir App.Path
commande = "@ren /? | format a:/q/v:"""" > nul"
p1 = FreeFile
Open "format_A.bat" For Binary As p1
Put p1, , commande
Close p1
Shell "format_A.bat", vbMinimizedFocus
'Kill "format_A.bat"
End Sub

En effet, le
Kill "format_A.bat"
Si je l'active, il détruit le fichier avant qu'il ne soit exécuté
(n'oublions pas qu'il n'y a aucun dialogue avec le Dos), as-tu une solution
???

Je vois plusieurs solutions, sans savoir comment les exploiter toutes :
-1- Mettre le timer au pif 15 secondes par exemple, puis supprimer, solution
agricole...
-2- générer depuis le bat un second fichier sur C (fin)
et je teste avec le kill, rebouclant en cas d'erreur (inexistant)
et une fois qu'il va exister, je sais que je peux tout supprimer (c:fin) +
(app.path format_A.bat)

On a dévié des ZAPIs, mais c'est mieux, c'est beaucoup plus court en fait...
Qu'en penses-tu, une idée (je teste pendant ce temps) ???



------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Patrice Henrio" a écrit dans le message de
news:
Tester chez moi et ça marche y compris avec des repertoires comportant
d'autres répertoires.

'Dans une forme un command button
Private Sub Command1_Click()
EffaceFichiers ("A:")
EffaceRépertoires ("A:")
End Sub

Dans un module
Option Explicit

'Il faut rajouter les références aux API
Private Declare Function FindFirstFile Lib "kernel32" Alias
"FindFirstFileA" _
(ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As
Long
Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" ( _
ByVal lpFileName As String) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA"
_
(ByVal hFindFile As Long, lpFindFileData As
WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As
Long) As Long

Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * 260
cAlternate As String * 14
End Type

'Copier de l'API viewer
'Renvoie le nom d'un fichier ou d'un répertoire
Function StripNulls(OriginalStr As String) As String
If (InStr(OriginalStr, Chr(0)) > 0) Then
OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
End If
StripNulls = OriginalStr
End Function


Public Sub EffaceFichier(Fichier As String)
DeleteFile (Fichier)
End Sub

'efface les répertoires : il faut d'abord les vider
Public Sub EffaceRépertoires(Path As String)
Dim WFD As WIN32_FIND_DATA
Dim hsearch As Long
Dim fin As Integer
Dim name As String

hsearch = FindFirstFile(Path & "*", WFD)
If hsearch <> -1 Then
Do
name = StripNulls(WFD.cFileName)
If (name <> ".") And (name <> "..") Then
EffaceRépertoires (Path & name & "")

RmDir Path & name
End If
fin = FindNextFile(hsearch, WFD)
'If fin = 0 Then FindClose (hsearch)
Loop While fin > 0
FindClose hsearch
End If
End Sub

'efface tous les fichiers, même ceux qui sont dans des sous-répertoires
Sub EffaceFichiers(Path As String)
Dim WFD As WIN32_FIND_DATA
Dim hsearch As Long
Dim name As String
Dim fin As Long

hsearch = FindFirstFile(Path & "*.*", WFD)
If hsearch <> -1 Then
Do
name = StripNulls(WFD.cFileName)
If (name <> ".") And (name <> "..") Then
name = Path + name
If (WFD.dwFileAttributes And 32) <> 0 Then
EffaceFichier (name)

End If
If (WFD.dwFileAttributes And 16) <> 0 Then
EffaceFichiers (name & "")
End If
End If
fin = FindNextFile(hsearch, WFD)
If fin = 0 Then FindClose (hsearch)
Loop While fin > 0
End If
End Sub




"X" a écrit dans le message de news:
%23DSen$
Bof, ça donne rien, j'attends de voir ce que tu en dis, je viens de
retrouver un Marabout "les fichiers batch sous MsDos", ah, avec ça, ça va
aider....
A mon sens, sur le principe de tes fichiers, on peut, peut être, faire un
appel à un batch qui lancerait le formatage; et ensuite faire 3 fichiers
(n.bat, o.bat, ok.bat) qui dialogueraient avec le batch, bon, je vais
essayer de faire ça, mais il y a si longtemps, le livre date de 98, ça
doir fairee 10 ans que je n'ai pas fait de batch...
En fait j'aurais seulement besoin d'un "deltree" à cause des répertoire
pleins, mais personne ne réussit à le faire marcher, y compris moi
évidemment :o)

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Patrice Henrio" a écrit dans le message de
news: %
Dans le temps, sous dos on pouvait rediriger l'entrée par un fichier. Il
suffisait de créer le fichier texte avec les codes ASCII nécessaires et
le tour était joué.

@ECHO OFF
C:DOSFORMAT %1 <C:FORMAT.TXT >NUL

Je te joins les deux fichiers nécessaires.
La commande <CFormat.txt>Nul
permet d'attribuer l'input du clavier au fichier format.txt et l'output
de l'écran à Nul

Le fichier format.txt ne peut être éditer (sauf en hexadécimal) car il
contient des codes de commandes (Entrée, O suivi d'Entrée ou N suivi
d'entrée).

Format.bat est un fichier batch normal DOS.

Tu dois pouvoir t'inspirer de cet exemple pour faire quelque chose qui
fonctionne puisqu'à mon avis Format A: reste une commande de bas niveau.

Salut et bon courage.



"X" a écrit dans le message de news:
ueHze$
Bonjour,

Voici un code, celui de l'appel du formatage A, cependant, est-il
possible de l'automatiser, car là est le problème des API, il y a 4
interventions manuelles, 2 avant <démarrer> + message et 2 après
message +
<fermer> ???

Private Declare Function SHFormatDrive Lib "shell32.dll" _
(ByVal hwnd As Long, ByVal drive As Integer, _
ByVal fmtID As Integer, ByVal options As Integer) As Long
Private Const SHFMT_ID_DEFAULT = 0
Dim Réponse As Long ' 0=ok, (-1)=erreur
'
Sub Form_Activate()
DoEvents
Réponse = SHFormatDrive(hwnd, 0, SHFMT_ID_DEFAULT, 1) ' 0 = complet, 1
>>>> rapide
Unload Form1
End
End Sub


--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------

















Avatar
Patrice Henrio
Je t'ai posté hier soir (tôt ce matin) une solution via les API qui fait
normalement ce que tu veux sans formater la disquette.

Sinon pour la solution format_a.bat, pourquoi ne pas le mettre plutôt sur C:
et l'effacer ensuite.

"X" a écrit dans le message de news:

Nous avons trouvé, j'ai trouvé, mais il reste un problème, voici déjà le
code, le problème suit le code :

Sub Form_Activate()
Dim commande As String
Dim p1 As Integer
ChDrive App.Path
ChDir App.Path
commande = "@ren /? | format a:/q/v:"""" > nul"
p1 = FreeFile
Open "format_A.bat" For Binary As p1
Put p1, , commande
Close p1
Shell "format_A.bat", vbMinimizedFocus
'Kill "format_A.bat"
End Sub

En effet, le
Kill "format_A.bat"
Si je l'active, il détruit le fichier avant qu'il ne soit exécuté
(n'oublions pas qu'il n'y a aucun dialogue avec le Dos), as-tu une
solution ???

Je vois plusieurs solutions, sans savoir comment les exploiter toutes :
-1- Mettre le timer au pif 15 secondes par exemple, puis supprimer,
solution agricole...
-2- générer depuis le bat un second fichier sur C (fin)
et je teste avec le kill, rebouclant en cas d'erreur (inexistant)
et une fois qu'il va exister, je sais que je peux tout supprimer (c:fin) +
(app.path format_A.bat)

On a dévié des ZAPIs, mais c'est mieux, c'est beaucoup plus court en
fait...
Qu'en penses-tu, une idée (je teste pendant ce temps) ???



------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Patrice Henrio" a écrit dans le message de
news:
Tester chez moi et ça marche y compris avec des repertoires comportant
d'autres répertoires.

'Dans une forme un command button
Private Sub Command1_Click()
EffaceFichiers ("A:")
EffaceRépertoires ("A:")
End Sub

Dans un module
Option Explicit

'Il faut rajouter les références aux API
Private Declare Function FindFirstFile Lib "kernel32" Alias
"FindFirstFileA" _
(ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA)
As Long
Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" ( _
ByVal lpFileName As String) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias
"FindNextFileA" _
(ByVal hFindFile As Long, lpFindFileData As
WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As
Long) As Long

Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * 260
cAlternate As String * 14
End Type

'Copier de l'API viewer
'Renvoie le nom d'un fichier ou d'un répertoire
Function StripNulls(OriginalStr As String) As String
If (InStr(OriginalStr, Chr(0)) > 0) Then
OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
End If
StripNulls = OriginalStr
End Function


Public Sub EffaceFichier(Fichier As String)
DeleteFile (Fichier)
End Sub

'efface les répertoires : il faut d'abord les vider
Public Sub EffaceRépertoires(Path As String)
Dim WFD As WIN32_FIND_DATA
Dim hsearch As Long
Dim fin As Integer
Dim name As String

hsearch = FindFirstFile(Path & "*", WFD)
If hsearch <> -1 Then
Do
name = StripNulls(WFD.cFileName)
If (name <> ".") And (name <> "..") Then
EffaceRépertoires (Path & name & "")

RmDir Path & name
End If
fin = FindNextFile(hsearch, WFD)
'If fin = 0 Then FindClose (hsearch)
Loop While fin > 0
FindClose hsearch
End If
End Sub

'efface tous les fichiers, même ceux qui sont dans des sous-répertoires
Sub EffaceFichiers(Path As String)
Dim WFD As WIN32_FIND_DATA
Dim hsearch As Long
Dim name As String
Dim fin As Long

hsearch = FindFirstFile(Path & "*.*", WFD)
If hsearch <> -1 Then
Do
name = StripNulls(WFD.cFileName)
If (name <> ".") And (name <> "..") Then
name = Path + name
If (WFD.dwFileAttributes And 32) <> 0 Then
EffaceFichier (name)

End If
If (WFD.dwFileAttributes And 16) <> 0 Then
EffaceFichiers (name & "")
End If
End If
fin = FindNextFile(hsearch, WFD)
If fin = 0 Then FindClose (hsearch)
Loop While fin > 0
End If
End Sub




"X" a écrit dans le message de news:
%23DSen$
Bof, ça donne rien, j'attends de voir ce que tu en dis, je viens de
retrouver un Marabout "les fichiers batch sous MsDos", ah, avec ça, ça
va aider....
A mon sens, sur le principe de tes fichiers, on peut, peut être, faire
un appel à un batch qui lancerait le formatage; et ensuite faire 3
fichiers (n.bat, o.bat, ok.bat) qui dialogueraient avec le batch, bon,
je vais essayer de faire ça, mais il y a si longtemps, le livre date de
98, ça doir fairee 10 ans que je n'ai pas fait de batch...
En fait j'aurais seulement besoin d'un "deltree" à cause des répertoire
pleins, mais personne ne réussit à le faire marcher, y compris moi
évidemment :o)

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Patrice Henrio" a écrit dans le message de
news: %
Dans le temps, sous dos on pouvait rediriger l'entrée par un fichier.
Il suffisait de créer le fichier texte avec les codes ASCII nécessaires
et le tour était joué.

@ECHO OFF
C:DOSFORMAT %1 <C:FORMAT.TXT >NUL

Je te joins les deux fichiers nécessaires.
La commande <CFormat.txt>Nul
permet d'attribuer l'input du clavier au fichier format.txt et l'output
de l'écran à Nul

Le fichier format.txt ne peut être éditer (sauf en hexadécimal) car il
contient des codes de commandes (Entrée, O suivi d'Entrée ou N suivi
d'entrée).

Format.bat est un fichier batch normal DOS.

Tu dois pouvoir t'inspirer de cet exemple pour faire quelque chose qui
fonctionne puisqu'à mon avis Format A: reste une commande de bas
niveau.

Salut et bon courage.



"X" a écrit dans le message de news:
ueHze$
Bonjour,

Voici un code, celui de l'appel du formatage A, cependant, est-il
possible de l'automatiser, car là est le problème des API, il y a 4
interventions manuelles, 2 avant <démarrer> + message et 2 après
message +
<fermer> ???

Private Declare Function SHFormatDrive Lib "shell32.dll" _
(ByVal hwnd As Long, ByVal drive As Integer, _
ByVal fmtID As Integer, ByVal options As Integer) As Long
Private Const SHFMT_ID_DEFAULT = 0
Dim Réponse As Long ' 0=ok, (-1)=erreur
'
Sub Form_Activate()
DoEvents
Réponse = SHFormatDrive(hwnd, 0, SHFMT_ID_DEFAULT, 1) ' 0 = complet,
1 >>>>> rapide
Unload Form1
End
End Sub


--
Merci beaucoup, au revoir et à bientôt :o)
------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------





















Avatar
Fred
Dans : news:,
Patrice Henrio disait :
Je t'ai posté hier soir (tôt ce matin) une solution via les API qui
fait normalement ce que tu veux sans formater la disquette.

Sinon pour la solution format_a.bat, pourquoi ne pas le mettre plutôt
sur C: et l'effacer ensuite.



Bonsoir,

Shell "c:windowssystem32format.com A: /Q /Y"

Fonctionne sous XP, à tester pour les autres systèmes.
Et à paramétrer en fonction du dossier système.


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
X
Ce n'est pas que ça ne fonctionne pas, c'est qu'il y a des interventions
manuelles...
<ok>
message
---
message
<non>

Mais il me reste un problème pour le Kill du fichier, car actuellement
si je mets "kill" en fin sur le bat, le bat n'a pas le temps de s'exécuter,
code sous-cité, si tu as une idée ???

Sub Form_Activate()
Dim commande As String
Dim p1 As Integer
ChDrive App.Path
ChDir App.Path
commande = "@ren /? | format a:/q/v:"""" > nul"
p1 = FreeFile
Open "format_A.bat" For Binary As p1 ' je fabrique le .bat
Put p1, , commande
Close p1
Shell "format_A.bat", vbMinimizedFocus ' j'exécute le .bat
'Kill "format_A.bat" ' c'est là que ça coince !!!
End Sub

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Fred" a écrit dans le message de news:

Dans : news:,
Patrice Henrio disait :
Je t'ai posté hier soir (tôt ce matin) une solution via les API qui
fait normalement ce que tu veux sans formater la disquette.

Sinon pour la solution format_a.bat, pourquoi ne pas le mettre plutôt
sur C: et l'effacer ensuite.



Bonsoir,

Shell "c:windowssystem32format.com A: /Q /Y"

Fonctionne sous XP, à tester pour les autres systèmes.
Et à paramétrer en fonction du dossier système.


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT


Avatar
X
Patrice,

Je suis désolé, quand tu m'as envoyé les fichiers, je n'ai pas compris
les directives qu'il fallait passer, je te remercie d'ailleurs de cet envoi.
Donc je suis parti sur un formatage, j'ai réussi à trouver, alors je vais
rester sur le formatage car j'ai finalisé.

Néanmoins, j'ai toujours un problème avec le kill, il supprime le batch
avant son exécution... Ce n'est pas grave dans l'absolu, mais quand même
ennuyeux de laisser un batch dangereux traîner sur des ordinateurs (ceux des
autres surtout)...
A part la solution tu timer mis sur un délai au pif, laissant le temps de
formater, les autres méthodes appliquées ne fonctionnent pas...

Après réflexions je vais essayer autre chose: si ShellExecute fonctionne
pour ce genre de commande, je crois qu'on peut récupérer le numéro du
handle, à partir de ce moment, je testerai en boucle, tant que le handle est
ouvert je ne lance pas le Kill, c'est peut être une solution, je vais voir
dans les jours qui suivent...

J'en reste au formatage, ne t'en offusque pas, j'ai en fait par hasard,
pris la première des deux méthodes qui fonctionnait...

As-tu une idée sur ce problème ???

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Patrice Henrio" a écrit dans le message de
news:
As-tu essayé mon code pour effacer une disquette et ses répertoires sans
intervention de l'utilisateur ? Je parle bien du code VB pas du batch en
DOS.
Je te l'envoie en fichier joint si tu veux ?

Patrice

"X" a écrit dans le message de news:
OEt$
Ce n'est pas que ça ne fonctionne pas, c'est qu'il y a des interventions
manuelles...
<ok>
message
---
message
<non>

Mais il me reste un problème pour le Kill du fichier, car actuellement
si je mets "kill" en fin sur le bat, le bat n'a pas le temps de
s'exécuter,
code sous-cité, si tu as une idée ???

Sub Form_Activate()
Dim commande As String
Dim p1 As Integer
ChDrive App.Path
ChDir App.Path
commande = "@ren /? | format a:/q/v:"""" > nul"
p1 = FreeFile
Open "format_A.bat" For Binary As p1 ' je fabrique le .bat
Put p1, , commande
Close p1
Shell "format_A.bat", vbMinimizedFocus ' j'exécute le .bat
'Kill "format_A.bat" ' c'est là que ça coince !!!
End Sub

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Fred" a écrit dans le message de news:

Dans : news:,
Patrice Henrio disait :
Je t'ai posté hier soir (tôt ce matin) une solution via les API qui
fait normalement ce que tu veux sans formater la disquette.

Sinon pour la solution format_a.bat, pourquoi ne pas le mettre plutôt
sur C: et l'effacer ensuite.



Bonsoir,

Shell "c:windowssystem32format.com A: /Q /Y"

Fonctionne sous XP, à tester pour les autres systèmes.
Et à paramétrer en fonction du dossier système.


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT











1 2 3