begin process at 2012 05 29 03:44:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

System

 > 

GetLogicalDrives


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

GetLogicalDrives

samedi 5 août 2006 à 12:00:36 | GetLogicalDrives

deck_bsd

Membre Club
Bonjour,

Voila je voudrai récupérer tous les disque dur présent sur un pc avec une autre fonction que FindFirstVolume qui me parait moin rapide que GetLogicalDrives. Cependant je ne comprend pas trop sont fonctionne mais. Elle renvoie un masque de bit ou la position de chaque bit défini la lettre d'un disque. Ok, mais comme je fait pour passer en revue les différentes position ?  Je comptai vérifié bit par bit, mais j'ai vu une source de BruNews contenant ceci :

DWORD dwdrvs;
char szdrv[4];
if(!(dwdrvs = GetLogicalDrives())) return;
*((DWORD*)&szdrv) = 0x5C3A41;
goDrvs:
if(dwdrvs & 1) SendMessage(hcmb, CB_ADDSTRING, 0, (long) szdrv);
szdrv[0]++;
if(dwdrvs >>= 1) goto goDrvs;
SendMessage(hcmb, CB_SETCURSEL, 0, 0);
}

C'est bien mieu sauve que j'avoue mon ignorance quand à la compréhension de ce code :s.

Quelqu'un peut-il m'aider ?

Merci d'avance.
samedi 5 août 2006 à 12:19:16 | Re : GetLogicalDrives

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
szdrv[] contient "A:\" donc 'A' en szdrv[0].

Tant que dwdrvs != 0:

if(dwdrvs & 1) SendMessage(hcmb, CB_ADDSTRING, 0, (long) szdrv);
si bit droit positionné, OK volume existe, je mets dans combo.

szdrv[0]++;
'A' passe à 'B' ("B:\") puis sera 'C' etc...

if(dwdrvs >>= 1) goto goDrvs
décale dwdrvs 1 bit droit, si != 0 on conrtinue.

ciao...
BruNews, MVP VC++
samedi 5 août 2006 à 12:24:39 | Re : GetLogicalDrives

nightlord666

Membre Club
Réponse acceptée !
Bon je vais essayer de te réecrire ce code plus lisiblement :

DWORD dwdrvs;
char szdrv[4];
if(!(dwdrvs = GetLogicalDrives())) return;
//0x005C3A41 = en char[4] : [41, 3A, 5C, 00] (little endian) = "A:\"
*((DWORD*)&szdrv) = 0x005C3A41;
do
{
   
//On regarde le premier bit de dwdrvs
    //Si il est à 1 on ajoute le disque à la combobox

   
if(dwdrvs & 1) SendMessage(hcmb, CB_ADDSTRING, 0, (long)szdrv);
    szdrv[0]++;  
//On ajoute un au code ASCII de la lettre du lecteur "A" -> "B"
    //On regarde le prochain disque : on décale les bits vers la gauche, si plus rien après on sort de la boucle

}
while(dwdrvs >>= 1);
SendMessage(hcmb, CB_SETCURSEL, 0, 0);


J'espère que c'est plus lisible maintenant .


Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.
samedi 5 août 2006 à 12:25:12 | Re : GetLogicalDrives

nightlord666

Membre Club
Oups Brunews a été plus rapide que moi


Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.
samedi 5 août 2006 à 12:37:48 | Re : GetLogicalDrives

deck_bsd

Membre Club
haaaaaa vivivi cela devient plus claire, cependant pour quoi avoir fait *((DWORD*)&szdrv) = 0x005C3A41; au kieu de déclarer szdrv[4] = "A:\" ???
samedi 5 août 2006 à 12:40:15 | Re : GetLogicalDrives

nightlord666

Membre Club
szdrv[4] est incorrect, plutot strcpy(szdrv, "A:\\"), mais je sais que Brunews est allergique aux boucles inutiles.


Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.
samedi 5 août 2006 à 12:41:31 | Re : GetLogicalDrives

nightlord666

Membre Club
En fait l'écriture de Brunews se fait en une instruction asm :
mov dword ptr[szdrv], 0x005C3A41 ;Je pense, je suis pas très fort en asm...


Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.
samedi 5 août 2006 à 12:44:40 | Re : GetLogicalDrives

deck_bsd

Membre Club
oui oui c'est incorect j'ai écrit dans la précipitation c'était szdrv[] = "A:\" que je voulait mettre . Encore une dernière chose :

dwdrvs >>= 1 si il en resort 1 on continue ok , mais j'ai un trou de synthaxe , on peut pas écrire aussi dwdrvs >> 1 tous simplement ? Et on dit si plus rien après on sort ... mais il se peut que un bit soit a 0 et le suivant à 1 :s . désolé pour toute cet question, mais je préfère tous comprendre :)
samedi 5 août 2006 à 12:46:49 | Re : GetLogicalDrives

deck_bsd

Membre Club
Quand on dit plus rien après c'est pour dire la fin du masque ... ok ok
samedi 5 août 2006 à 12:47:37 | Re : GetLogicalDrives

deck_bsd

Membre Club
Ben non mm pas lol , comment on sais que le masque est fini ? :s

1 2

Cette discussion est classée dans : disque, bit, getlogicaldrives, dwdrvs, szdrv


Répondre à ce message

Sujets en rapport avec ce message

Variable int sur le disque... [ par nullspace ] Je cherche à enregistrer et lire sur le disque par ofstream et ifstream à partir de variables de type int.Seulement il m'écrit sous format texte.En vb comment on fait pourn trouver un fichier sur le disque un c++ [ par Wipet2k ] boujour J'aimerais savoir comment on fait pour trouverun ficher sur le disque dur en c++Merci d'avence :) Comment faire pour rechercher un fichier dans tout le disque dur ? [ par appstmd ] Salut !J'ai besoin de savoir comment on peut scanner le disque dur à la recherche d'un fichier déterminé. Quelqu'un connait-il une astuce ou un algori Encryption 128 bit [ par GEDEON ] Quelqu'un aurait-il des informations pour encrypter un fichier en c++ ???? et de préférence en 128 bits... toutes les informations sont les bienvenues Encryption 128 bit [ par GEDEON ] Quelqu'un aurait-il des informations pour encrypter un fichier en c++ ???? et de préférence en 128 bits... toutes les informations sont les bienvenues Charger des PNG 8-bit et 24-bit ? [ par ProGamer ] Comment charger des PNG 8-bit et 24-bit en VC++ ? En fait, le but est de les mettre dans des textures Direct3D, mais je penses que c'est plutôt une qu lister les fichiers du disque dur en c et non en c++ [ par sebos2013 ] Quelqu'un pourrait il m'aider.J'essaie de creer un prog en c qui permet de listertout les fichiers du disque dur et de stoquer le nom et le chemin de Un petit prog pour réparer ?.... [ par Patman94 ] Bonjour à tous...Je débute en c++ et la question que je vais vous poser n'est pas encore de mon niveau (malgré mes recherches où je n'ai rien compris Est-ce la meilleure méthode ? [ par jeromedeparis13 ] Bonjour,J'utilise Visual C++ et Access 97 pour une application . J'ai besoin de me connecter à la BD (Access 97 qui compte une dizaine de tables) afin Formatage [ par sniperfou ] Salut, Je souhaiterais savoir comment formater un disque dur, car je suis entrain de crée un gestionnaire de disque dur, et je ne trouve pas cette fon


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,170 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales