IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Nouveau disque Comment le dire à windows?


Sujet :

Delphi

  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut Nouveau disque Comment le dire à windows?
    Bonjour à tous!
    J'ai un bout de code ici pour faire
    une copie complete d'un disque vers un autre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                   AVANT la copie  
    	Disk1				Disk2 
      Partition1  Partition2       	       Vierge
        D:            E:
     
     
                   APRES la copie  
    	Disk1				Disk2 
      Partition1  Partition2       Partition1   Partition2
        D:            E:              F:            G:

    tout va bien sauf qu'à la fin, pour pouvoir avoir
    accès au lettre F: et G: dans explorer, je dois ouvrir
    le gistionnaire de disque de windows.

    Celui-ci provoque un genre de rafraichissement des disques et partitions
    disponible sur la machine. A partir de ce momement, les lettre F et G
    deviennent accéssible dans explorer.

    j'aimerais provoquer ce rafraichissement dans mon programme...
    Est-ce que quelqu'un aurait une petite idée du mécanisme en action
    lorsque le gestionnaire de disque de windows s'ouvre?

    J'imagine que quelques call sur quelques API s'impose?

    PS: Je suis sur W2k avec Delphi 5.
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  2. #2
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    commance par:
    GetLogicalDriveStrings

    The GetLogicalDriveStrings function fills a buffer with strings that specify valid drives in the system.

    DWORD GetLogicalDriveStrings(

    DWORD nBufferLength, // size of buffer
    LPTSTR lpBuffer // address of buffer for drive strings
    );


    Parameters

    nBufferLength

    Specifies the maximum size, in characters, of the buffer pointed to by lpBuffer. This size does not include the terminating null character.

    lpBuffer

    Points to a buffer that receives a series of null-terminated strings, one for each valid drive in the system, that end with a second null character. The following example shows the buffer contents with <null> representing the terminating null character.

    c:\<null>d:\<null><null>


    Return Values

    If the function succeeds, the return value is the length, in characters, of the strings copied to the buffer, not including the terminating null character. Note that an ANSI-ASCII null character uses one byte, but a Unicode null character uses two bytes.
    If the buffer is not large enough, the return value is greater than nBufferLength. It is the size of the buffer required to hold the drive strings.
    If the function fails, the return value is zero. To get extended error information, use the GetLastError function.

    Remarks

    Each string in the buffer may be used wherever a root directory is required, such as for the GetDriveType and GetDiskFreeSpace functions.

    See Also

    GetDriveType, GetDiskFreeSpace, GetLogicalDrives
    et
    GetLogicalDrives

    The GetLogicalDrives function returns a bitmask representing the currently available disk drives.

    DWORD GetLogicalDrives(VOID)


    Parameters

    This function has no parameters.

    Return Values

    If the function succeeds, the return value is a bitmask representing the currently available disk drives. Bit position 0 (the least-significant bit) is drive A, bit position 1 is drive B, bit position 2 is drive C, and so on.
    If the function fails, the return value is zero.

    See Also

    GetLogicalDriveStrings

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    j'avais déjà tester
    DWORD GetLogicalDrives(VOID)
    et il me revoit seulement ce que explorer voit...

    je crois plutôt que ca prendrait quelque chose du genre
    SHChangeNotify...mais j'ai pas réussi avec ca non plus... étant
    donnée que physiquement, y a pas vraiment d'ajout de disque...
    (c'est une supposition)

    présentement, je suis en cours de test avec
    FindFirstVolumeMountPoint,GetVolumeNameForVolumeMountPoint, etc...
    mais bon... j'avance à pas de tortue...
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Avec l'API CreateFile tu peux 'ouvrir' une partition, MSDN renvoie vers
    DeviceIOControl
    http://msdn.microsoft.com/library/de...eiocontrol.asp

    Regarde si il y a une piste de ce coté là.

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    Merci Laurent!

    je crois bien qu'avec
    DeviceIOControl et IOCTL_DISK_UPDATE_PROPERTIES

    "The IOCTL_DISK_UPDATE_PROPERTIES control code invalidates the cached partition table and re-enumerates the device.
    "
    Je crois que j'aurais exactement le résultat souhaité!
    à suivre....
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    Mon seul VRAI problème.....

    j'ai quand même fait le test
    et j'ai le message d'erreur suivant:
    "incorrect fonction"
    je crois donc que la doc dit encore vrai...
    MSDN Dit:
    IOCTL_DISK_UPDATE_PROPERTIES
    Requires Windows Vista or Windows XP.
    Bon c'est quand même rassurant....

    Je suis avec w2k...
    faut ce creuser encore les neuronnes....
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Eric Boisvert
    MSDN Dit:
    Désolé je n'avais pas vue
    Enfin ce qu'on peut voir c'est que les versions plus récentes proposent plus d'API que les précédentes mais avec un train de retard.
    Et WMI ?
    Sinon, place ce post en résolu, et reposte dans le forum Dev Windows, il y a de fines lames

    ps:
    J'ai regardé sur CodeProject mais je n'ai rien trouvé de concluant.

  8. #8
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut
    Je crois bien que j'en suis venu a bout....
    j'ai pas terminé completement mes tests mais c'est très concluant....

    en gros.. ca passe par
    SetVolumeMountPoint avec win2k

    à suivre...j'envois bientot l'unité résultante...
    pourrait la mettre dans la faq....

    faudrait que quelqu'un test le petit bout pour XP....
    avec DeviceIOControl et IOCTL_DISK_UPDATE_PROPERTIES...

    mais bon.. c'est peut-être un peu pointue?
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  9. #9
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Eric Boisvert
    pourrait la mettre dans la faq....
    Oui ou dans la section sources.
    Citation Envoyé par Eric Boisvert
    mais bon.. c'est peut-être un peu pointue?
    Si tu proposes un exe, à coeur vaillant rien d'impossible

Discussions similaires

  1. comment insatllé le windows 7 sur un nouveau pc
    Par hanou88 dans le forum Windows
    Réponses: 5
    Dernier message: 19/06/2015, 06h35
  2. Réponses: 14
    Dernier message: 06/11/2010, 17h30
  3. Windows nouveau disque dur
    Par klass dans le forum Windows Vista
    Réponses: 2
    Dernier message: 18/10/2010, 15h46
  4. [Disque Dur] Comment ajouter un nouveau disque dur et un nouveau RAM ?
    Par andrianiaina dans le forum Composants
    Réponses: 4
    Dernier message: 12/08/2010, 20h10
  5. Réponses: 1
    Dernier message: 30/07/2010, 08h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo