Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[MSDOS] Tester l'existence d'un disque amovible

31 réponses
Avatar
ludovic.thebault
Bonjour,

Je développe un programme et j'aimerai pouvoir tester la présence d'un
cd dans un lecteur.
Je ne peux faire ce test qu'en utilisant msdos.

J'ai un script qui fonctionne sous xp et sup. mais qui plante sous
millenium :
il s'agit tout simplement de demander
# e:
# dir
et de récupérer le résultat.
Sous millenium ça bloque si le lecteur est vide, il faut killer les
tâches "Rdir32" et "winoldapp" avec un ctrl-alt-suppr pour reprendre la
main dans l'application.
J'ai trouvé un autre script mais destiné à une vieille version de msdos
(qui ne marche pas sous Win 98 et Me) :
# command /c /f dir e:
l'option /f doit permettre d'éviter un message d'erreur mais n'existe
pas sous Win 98 ou Me.

Il doit quand même bien y avoir un moyen de récupérer ça, sans avoir
d'erreur, non ? Comment font les programmes pour tester l'existence d'un
disque dans un lecteur ?

Merci de vos éclaricissements.

10 réponses

1 2 3 4
Avatar
rm
Salut pevpev,
Le samedi 5 avril 2008 à 16:37, CriCri a écrit :

Enfin, j'ai trouvé une autre solution beaucoup plus simple, donc j'ai
fait un petit programme (exécutable DOS, 40kO, sans installation) que
j'ai mis sur mon site:
(rubrique 'Programmes' -> 'Utilitaires bitwyse' -> 'testdrive.exe'
- actuellement numéro 9) avec un lisez-moi très sommaire et des '.bat'
pour le tester et démontrer comment s'en servir.
Merci à ceux qui veulent bien le tester de me signaler tout problème
éventuel - ou bien me confirmer qu'il marche impec' ;-)



On peut faire ça aussi en _trois_ lignes d'AutoIt3
http://www.autoitscript.com/autoit3/ horriblement complexes !

;-----------cdready.au3----------------
$var = DriveStatus( $CmdLine[1] )
ClipPut ( $var )
Exit
;--------------------------------------

On passe la lettre du lecteur d'intérêt en argument ( cdready.exe n: ) et
on récupère soit READY soit NOTREADY dans le presse-papier de Windows.
Il doit être possible de faire passer l'ERRORLEVEL à 0 et -1 en doublant le
nombre de lignes via un test chiadé et un Exit [return code] voulu.
http://www.hiddensoft.com/autoit3/files/beta/autoit/docs/keywords/Exit.htm

Exécutable autonome pour tout Windows (pas MS-DOS, mais
JCB-a-dit-qu'il-n'y-avait-pas-de-DOS-dans-XP ;) ) dispo sur
http://opera-fr.com/pierre/autoit/cdready.exe pour tests :)

Autoit est fourni avec une DLL et un contrôle ActiveX pour utilisation avec
un autre langage, au besoin...

Bon weekend



itou,

CriCri



@+
--
rm
Avatar
CriCri
Salut

Michel_D a écrit :

Pas encore au point car il m'indique Ok pour le lecteur de DVD de mon
portable qui n'a aucun CD/DVD.



Mais c'est _précisément_ l'objet: répondre "oui", le _lecteur_ existe -
même s'il n'y a pas de média dedans actuellement lisible.
Peut-être ai-je mal compris ta 'plainte'?

Amicalement
CriCri

--
bitwyse [PGP KeyID 0xA79C8F2C]
Les conseils - c'est ce qu'on demande quand on connaît déjà la réponse
mais aurait préféré ne pas la savoir.
http://www.le-maquis.net
Avatar
CriCri
Salut Enzba

rm a écrit :

On peut faire ça aussi en _trois_ lignes d'AutoIt3
http://www.autoitscript.com/autoit3/ horriblement complexes !



Ben, oui - t'es adorable ;-)
Mais pour moi (ainsi que pour Ludo) je pense que l'objet est de pouvoir
contrôler l'existence d'un lecteur chez le pigeon ...euhhh, pardon -
client... quelconque, qui n'a rien que Windoz installé...

Amitiés
PevPev

--
bitwyse [PGP KeyID 0xA79C8F2C]
Les conseils - c'est ce qu'on demande quand on connaît déjà la réponse
mais aurait préféré ne pas la savoir.
http://www.le-maquis.net
Avatar
CriCri
Salut

Michel_D a écrit :

Pas encore au point car il m'indique Ok pour le lecteur de DVD de mon
portable qui n'a aucun CD/DVD.



D'accord. Désolé - je me suis un peu égaré à cause du sujet du fil
- chuis un chouïa distrait par des soucis perso... :-((

L'objet du programme jusqu'ici était de savoir dans un premier temps si
un (lecteur de) disque amovible existait - afin de pouvoir ensuite
tester sans erreur l'accessibilité d'un média dedans actuellement
lisible: car si le lecteur lui-même n'existe pas, essayer d'y accéder
rien que pour renifler la présence d'un support - CD, disque dur, carte
flash etc - peut provoquer tout de suite une erreur (comme on a pu le
constater).
C'est donc la première étape (quand même importante) résolue - et j'y
rajouterai prochainement la deuxième.

Amicalement
CriCri

PS - je crois que la fonction actuelle marche correctement (essayer les
'.bat') et je remercie et compte sur vous les testeurs de la version
béta pour mettre le tout au point.

--
bitwyse [PGP KeyID 0xA79C8F2C]
Les conseils - c'est ce qu'on demande quand on connaît déjà la réponse
mais aurait préféré ne pas la savoir.
http://www.le-maquis.net
Avatar
rm
Le samedi 5 avril 2008 à 23:55, CriCri a écrit :

Salut Enzba

rm a écrit :

On peut faire ça aussi en _trois_ lignes d'AutoIt3
http://www.autoitscript.com/autoit3/ horriblement complexes !



Ben, oui - t'es adorable ;-)



Pas toujours :-D

Mais pour moi (ainsi que pour Ludo) je pense que l'objet est de pouvoir
contrôler l'existence d'un lecteur chez le pigeon ...euhhh, pardon -
client... quelconque, qui n'a rien que Windoz installé...



Justement, AutoIt permet de créer des scripts "compilés" (on va dire
encapsulés) sous forme d'exécutable autonomes qui normalement ne
necessitent rien d'autre pour faire leur petit boulot.

Amitiés



@+

PevPev



--
rm
Avatar
CriCri
Salut Enzba

rm a écrit :

Justement, AutoIt permet de créer des scripts "compilés" (on va dire
encapsulés) sous forme d'exécutable autonomes qui normalement ne
necessitent rien d'autre pour faire leur petit boulot.



Ah! d'accord.
Ils sont encapsulés dans quel genre d'exécutable? (VB, VC...?)

Bon dimanche
PevPev

--
bitwyse [PGP KeyID 0xA79C8F2C]
Les conseils - c'est ce qu'on demande quand on connaît déjà la réponse
mais aurait préféré ne pas la savoir.
http://www.le-maquis.net
Avatar
Michel_D
Michel_D a écrit :
CriCri a écrit :
Salut

Sergio a écrit :

Comme c'est juste une API à appeler, dans ton langage, il n'y a pas
l'équivalent de "RunDll32" du shell, qui permet d'exécuter une
fonction API de Windows ?



Bonne idée - et s'il peut 'spawn'er un autre programme il devrait
pouvoir aussi lancer rundll32.exe pareil...

Par contre j'ai peur qu'il s'avère un peu compliqué en dehors du 'scope'
d'un seul programme s'il faut faire 2 ou 3 appels externes pour exécuter
les fonctions nécessaires (par exemple comment et où allouer un tampon
persistent entre un appel et le suivant?).

Enfin, j'ai trouvé une autre solution beaucoup plus simple, donc j'ai
fait un petit programme (exécutable DOS, 40kO, sans installation) que
j'ai mis sur mon site:
(rubrique 'Programmes' -> 'Utilitaires bitwyse' -> 'testdrive.exe'
- actuellement numéro 9) avec un lisez-moi très sommaire et des '.bat'
pour le tester et démontrer comment s'en servir.
Merci à ceux qui veulent bien le tester de me signaler tout problème
éventuel - ou bien me confirmer qu'il marche impec' ;-)

Bon weekend
CriCri




Pas encore au point car il m'indique Ok pour le lecteur de DVD de mon
portable qui n'a aucun CD/DVD.
(HL-DT-ST DVDRAM GMA-4082N ATA Device sur Lenovo 3000 N200)



Je viens de regarder dans mes developpements et il me semblait bien que
j'avais réalisé un truc de ce style (cela date de 2004).

Voici ce que cela donne en sortie (sous XP Pro) :
C FAT32 Lecteur FIXE
D Lecteur CDROM
F NTFS Lecteur FIXE
G NTFS Lecteur FIXE

puis avec une clé usb connectée (corsair 4 Go) :
C FAT32 Lecteur FIXE
D Lecteur CDROM
F NTFS Lecteur FIXE
G NTFS Lecteur FIXE
X FAT32 Lecteur AMOVIBLE avec MEDIA

puis avec un CD Bootable dans le graveur de CD/DVD :
C FAT32 Lecteur FIXE
D CDFS Lecteur CDROM avec CD
F NTFS Lecteur FIXE
G NTFS Lecteur FIXE

puis aprés avoir éjécté le CD Bootable :
C FAT32 Lecteur FIXE
D Lecteur CDROM
F NTFS Lecteur FIXE
G NTFS Lecteur FIXE

PS1:Fonctionne aussi sous W9x avec d'ailleurs des fonctions en plus.

PS2:J'avais principalement utilisé des fonctions DOS (int 0x21).

Pour info voici une partie du truc (le fichier de commande) :
MD_GLECT.BAT

@ECHO OFF
SET TEST_NT=%OS%
IF "%TEST_NT%"=="" GOTO W9X_1
SET LDOSe
GOTO Boucle
:W9X_1
SET LDOS=A
:Boucle
IF "%LAFF%"=="Z" GOTO Quitter
IF "%LAFF%"=="90" GOTO Quitter
SET LAFF=%LDOS%
IF "%TEST_NT%"=="" GOTO W9X_2
MD_GLECT.EXE /V /%LDOS%
SET /A "LDOS=%LDOS%+1"
GOTO Suite
:W9X_2
MD_GLECT.EXE /V /_LDOS
:Suite
SET TXT=Lecteur RAMDISK Bootable
IF ERRORLEVEL 222 GOTO Boot
SET TXT=Lecteur FIXE Bootable
IF ERRORLEVEL 220 GOTO Boucle
SET TXT=Lecteur CDROM avec CD Bootable
IF ERRORLEVEL 217 GOTO Boot
SET TXT=Lecteur AMOVIBLE avec MEDIA Bootable
IF ERRORLEVEL 216 GOTO Boot
IF ERRORLEVEL 214 SET TXT=Lecteur RAMDISK
IF ERRORLEVEL 212 SET TXT=Lecteur FIXE
IF ERRORLEVEL 209 SET TXT=Lecteur CDROM avec CD
IF ERRORLEVEL 208 SET TXT=Lecteur AMOVIBLE avec MEDIA
IF ERRORLEVEL 84 SET TXT=Lecteur FIXE (Erreur de Lecture)
IF ERRORLEVEL 82 SET TXT=Lecteur RESEAUX
IF ERRORLEVEL 81 SET TXT=Lecteur CDROM
IF ERRORLEVEL 80 SET TXT=Lecteur AMOVIBLE
GOTO Boucle
:Boot
SET LDOS=%LAFF%
IF NOT "%TEST_NT%"=="" GOTO Boucle
MD_GLECT.EXE BOOT_%LDOS%.BIN /_LDOS
GOTO Boucle
:Quitter
SET TEST_NT SET LDOS SET LAFF SET TXT=
Avatar
rm
Le dimanche 6 avril 2008 à 12:32, CriCri a écrit :

Salut Enzba

rm a écrit :

Justement, AutoIt permet de créer des scripts "compilés" (on va dire
encapsulés) sous forme d'exécutable autonomes qui normalement ne
necessitent rien d'autre pour faire leur petit boulot.



Ah! d'accord.
Ils sont encapsulés dans quel genre d'exécutable? (VB, VC...?)



http://www.autoitscript.com/autoit3/docs/intro/compiler.htm semble indiquer
que l'interpréteur, le script (ainsi que d'éventuels fichiers embarqués)
sont compressés (UPX apparemment) dans un exécutable. C'est donc bien une
conversion/compression (que je comparerais plus à la création d'une archive
auto-décompactable) plutôt qu'une compilation.
Si la conversion n'est pas chiffrée avec un mot de passe, il est d'ailleurs
possible de sortir le script source de l'exe via l'outils Exe2Aut fourni ;)

Bon dimanche



Merci, à toi z'aussi.

PevPev



@+
--
rm
Avatar
CriCri
Michel_D a écrit :

Pas encore au point car il m'indique Ok pour le lecteur de DVD de mon
portable qui n'a aucun CD/DVD.



Ayé - il y a maintenant 'testdisk' qui contrôle correctement la présence
d'un lecteur prêt avec un média accessible dedans - sans erreur si vide.

Je vais quand même laisser 'testdrive' qui teste pour l'existence d'un
lecteur physique connecté au système, prêt ou pas - les deux pourraient
être utiles selon ce qu'on cherche à faire.

Bon dimanche
CriCri

--
bitwyse [PGP KeyID 0xA79C8F2C]
Les conseils - c'est ce qu'on demande quand on connaît déjà la réponse
mais aurait préféré ne pas la savoir.
http://www.le-maquis.net
Avatar
CriCri
Michel_D a écrit :

PS2:J'avais principalement utilisé des fonctions DOS (int 0x21).



Félicitations! - j'avais pensé à ça un instant mais je n'ai pas
poursuivi dans cette voie parce que je pensais que ça risquerait d'être
problématique sous XP.

--
bitwyse [PGP KeyID 0xA79C8F2C]
Les conseils - c'est ce qu'on demande quand on connaît déjà la réponse
mais aurait préféré ne pas la savoir.
http://www.le-maquis.net
1 2 3 4