OVH Cloud OVH Cloud

[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
CriCri
CriCri a écrit :

Je n'ai pas encore pu déterminer ce qui fait la différence...



Ça y est:
- exécuter la commande avec un CD dans le lecteur (tout va bien, bien sûr)
- éjecter le CD
- ré-exécuter la commande -> boîte de dialogue d'erreur

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 Ludo

ludo a écrit :

Reste à trouver cette petite perle !



Je vais voir... ;-)
...ça m'intéresse aussi, mais je n'ai pas trop le temps pour l'instant.

Un petit '.exe' pour n'importe quelle Ouin (sauf CE) mais qui nécessite
les runtime VC v.6 ou sup' - ça irait pour toi?
L'idée (comme ça...) serait d'interroger la liste des volumes montés:
- argument: lecteur d'intérêt
- exit code: 0 ou -1

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
ludovic.thebault
CriCri wrote:

Ça y est:
- exécuter la commande avec un CD dans le lecteur (tout va bien, bien sûr)
- éjecter le CD
- ré-exécuter la commande -> boîte de dialogue d'erreur



Ne vous embêtez plus ! C'est kafkaïen mais j'ai résolu le problème
En fait la nécessité de tester la présence du disque par msdos (avec
Revolution) n'est utile que pour XP et >. (Avec mon mauvais anglais
j'avais mal interprété les discussions à ce sujet sur le forum de
Revolution).

En utilisant une fonction de Revolution pour tester l'existence d'un
fichier sur un disque amovible, on a pas d'erreur avec Win Me mais on a
un dialogue d'erreur (Annuler, Recommencer, Continuer) avec Xp.
Pour cela il faut faire un test par msdos.

Pour résumer :
En passant par Revolution, un test de présence de disque donne :
Xp, Vista = erreur si absence de disque
W98 WMe = Pas d'erreur si absence de disque

En passsant par MSDOS, c'est tout le contraire !
XP, Vista = Pas d'erreur
W98, WMe = erreur

VOilà, très clair n'est-ce pas !

Merci quand même à tous de vous être penché sur mon cas.
Avatar
Sergio
ludo a émis l'idée suivante :
CriCri wrote:

OK.
Je pense que le dernier serait plus fiable et élégant...



Reste à trouver cette petite perle !



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 ?

--
Serge http://leserged.online.fr/
Mon blog: http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
Avatar
CriCri
Ludovic Thébault a écrit :

Pour résumer :
En passant par Revolution, un test de présence de disque donne :
Xp, Vista = erreur si absence de disque
W98 WMe = Pas d'erreur si absence de disque

En passsant par MSDOS, c'est tout le contraire !
XP, Vista = Pas d'erreur
W98, WMe = erreur



Ce que je retiens est que M$ a su améliorer le fonctionnement de la
console DOS en développant les super-Win; mais celui du shell s'est
dégradé ;-)

VOilà, très clair n'est-ce pas !



Limpide

Bon weekend
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

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

--
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

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

--
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

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' -> 'testdrv.exe'
- actuellement numéro 9) avec un lisez-moi très sommaire.
Merci à ceux qui veulent bien le tester de me signaler tout problème -
ou bien me confirmer qu'il marche impec' ;-)

Bon weekend
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

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

--
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
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)
1 2 3 4