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

C++Builder Discussion :

Formater une disquette ou un flash disque.


Sujet :

C++Builder

  1. #1
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut Formater une disquette ou un flash disque.
    Bonjour à tous,

    Je cherche à comprendre comment peut-on formater une disquette 3"1/2, ou un flash disque automatiquement en cliquant sur un bouton.

    Le choix entre la disquette ou le flash disque est seléctionné par deux radiobutton.

    Ce programme n'a rien de mal, juste pour l'utiliser dans un magasin de vente de matériels informatique.

    Merci de m'aider svp.

    @+

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Je tente une p'tite réponse ....

    Peut on imaginer d'utiliser la commande system(...) ?
    Cela donnerais qqchose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void __fastcall TForm::ButtonClick(TObject *Sender)
    {
    system("FORMAT ..."); //avec l'indication du disque en fonction du choix de l'utilisateur...
    }
    Bon, c'est juste un idée comme ça...en espérant t'aider.

    @ +

  3. #3
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    La méthode la plus simple et la plus facile a mettre en place est
    d'utiliser le formatage du gestionnaire de fichier. Pour cela il faudra
    utiliser les fonctions API WinExec, FindWindow, SetActiveWindow, ...
    L'API Winexec permet de charger en tâche de fond le gestionnaire de
    fichier.

  4. #4
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    Comment FORMATER UNE DISQUETTE tu peu utiliser aussi l'API SHFormatDrive. Cette API reproduit exactement les mêmes fenêtres que le formatage par l'explorateur Windows.

    voici un exemple en Delphi montrant comment formater une disquette;

    Project1.dpr :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    program Project1;
    uses
      Forms,
      unit1 in 'unit1.pas' {Form1};
     
    {$R *.RES}
     
    begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.


    unit1.pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Label1: TLabel;
        Label2: TLabel;
        GroupBox1: TGroupBox;
        RadioButtonDriveB: TRadioButton;
        RadioButtonDriveA: TRadioButton;
        GroupBox2: TGroupBox;
        RadioButtonRapide: TRadioButton;
        RadioButtonComplet: TRadioButton;
        RadioButtonCopierSystem: TRadioButton;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
     
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.DFM}
    const SHFMT_DRV_A = 0;
    const SHFMT_DRV_B = 1;
     
    const SHFMT_ID_DEFAULT = $FFFF;
     
    const SHFMT_OPT_QUICKFORMAT = 0;
    const SHFMT_OPT_FULLFORMAT  = 1;
    const SHFMT_OPT_SYSONLY     = 2;
     
    const SHFMT_ERROR    = -1;
    const SHFMT_CANCEL   = -2;
    const SHFMT_NOFORMAT = -3;
     
     
    function SHFormatDrive(hWnd : HWND;
                           Drive : Word;
                           fmtID : Word;
                           Options : Word) : Longint
       stdcall; external 'Shell32.dll' name 'SHFormatDrive';
       // on "récupère" ainsi la fonction SHFormatDrive contenu dans la DLL Shell32.dll sous le nom SHFormatDrive
     
    procedure TForm1.Button1Click(Sender: TObject);
    var OptionParDefaut:Word;
        drive:word;
        ResultatFormatage:integer;
    begin
      if RadioButtonRapide.Checked then OptionParDefaut:=SHFMT_OPT_QUICKFORMAT else
        if RadioButtonComplet.Checked then OptionParDefaut:=SHFMT_OPT_FULLFORMAT else
          OptionParDefaut:= SHFMT_OPT_SYSONLY;
     
      if RadioButtonDriveA.Checked then drive:= SHFMT_DRV_A else
         drive:=SHFMT_DRV_B;
      Label2.Caption:='Formatage en cours';
      try
        ResultatFormatage:=ShFormatDrive(Handle, drive, SHFMT_ID_DEFAULT, OptionParDefaut);
        case ResultatFormatage of
          SHFMT_ERROR : Label2.Caption:='Erreur au formatage';
          SHFMT_CANCEL: Label2.Caption:='Arrêt par l''utilisateur';
          SHFMT_NOFORMAT:Label2.Caption:='?'
        else Label2.Caption:='Formatage terminé';
        end;
      except end;
    end;
     
     
     
    end.

  5. #5
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Bonjours à tous,

    J'ai essauyé la solution avec <[ syetem("Format a:\\"); ]> mais rien ne se passe, une fenetre dos s'affiche et elle se ferme imediatement.

    La solution avec SHFormatDrive me semble interéssante, j'ai fais un nouveau projet mais rien ne se passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit1.h"
     
    const SHFMT_DRV_A = 0;
    const SHFMT_DRV_B = 1;
     
    const SHFMT_ID_DEFAULT = 0xFFFF;
     
    const SHFMT_OPT_QUICKFORMAT = 0;
    const SHFMT_OPT_FULLFORMAT  = 1;
    const SHFMT_OPT_SYSONLY     = 2;
     
    const SHFMT_ERROR    = -1;
    const SHFMT_CANCEL   = -2;
    const SHFMT_NOFORMAT = -3;
     
    typedef long int (__stdcall *MYDLLFUNC2) (HWND hWnd, Word Drive,  Word fmtID,  Word Options ) ;
     
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Word OptionParDefaut,    drive, ResultatFormatage ;
     
    if (RadioButtonRapide -> Checked)
       OptionParDefaut = SHFMT_OPT_QUICKFORMAT ;
    else
       if (RadioButtonComplet -> Checked)
          OptionParDefaut = SHFMT_OPT_FULLFORMAT ;
       else
          OptionParDefaut = SHFMT_OPT_SYSONLY ;
     
     
    if(RadioButtonDriveA -> Checked)
        drive = SHFMT_DRV_A ;
    else
        drive = SHFMT_DRV_B ;
     
    Label2 -> Caption = "Formatage en cours" ;
     
    try
      {
        HINSTANCE hinstDLL;
        MYDLLFUNC2 ImpFuncDLL;
        TDateTime dtAfter, dtBefore;
        int iRet;
     
        if((hinstDLL=LoadLibrary("Shell32.dll")))
           {
             ImpFuncDLL = (MYDLLFUNC2)GetProcAddress(hinstDLL, "ShFormatDrive");
             if(ImpFuncDLL)
                ResultatFormatage = ImpFuncDLL(Handle, drive, SHFMT_ID_DEFAULT, OptionParDefaut);
             FreeLibrary(hinstDLL);
           }
     
       switch(ResultatFormatage)
          {
            case SHFMT_ERROR            : Label2 -> Caption = "Erreur au formatage";
            case SHFMT_CANCEL           : Label2 -> Caption = "Arrêt par l''utilisateur";
            case SHFMT_NOFORMAT         : Label2 -> Caption = "?" ;
            default : Label2 -> Caption = "Formatage terminé";
          }
      }
     catch(...)
     {
     
     }
     
    }
    //---------------------------------------------------------------------------
    Pouvez-vous m'aider svp .


    @+

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Peut etre en appelant par programme la fenetre de formatage disquette, si cela est possible.

  7. #7
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    essaie avec ça peu etre que je me trompe,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    AnsiString cmd="le repertoire windows"+
    "RUNDLL32.EXE SHELL32DLL,SHFormatDrive";
     
    long RetVal = winexec(cmd, 1);
    utilise l'API GetWindowsDirectory pour extraire le repertoire windows

    peut etre ça va t'aider

  8. #8
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    tiens ça marche parfaitement chez moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    #define SHFMT_ID_DEFAULT   0xFFFF
    #define SHFMT_OPT_QUICK    0x0000
    #define SHFMT_OPT_FULL     0x0001
    #define SHFMT_OPT_SYSONLY  0x0002
    #define SHFMT_ERROR    0xFFFFFFFFL
    #define SHFMT_CANCEL   0xFFFFFFFEL
    #define SHFMT_NOFORMAT 0xFFFFFFFDL
     
    extern "C" DWORD WINAPI 
    SHFormatDrive(HWND, UINT, UINT, UINT);
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    int Res = SHFormatDrive(Handle,
        0, SHFMT_ID_DEFAULT, SHFMT_OPT_FULL);
      if (Res < 0) {
        String S;
        switch (Res) {
          case SHFMT_ERROR : {
            S = "Error formatting disk.";
            break;
          }
          case SHFMT_CANCEL : {
            S = "Format cancelled.";
            break;
          }
          case SHFMT_NOFORMAT : 
            S = "This disk cannot be formatted.";
        }
        MessageBox(Handle, S.c_str(),
          "Error", MB_ICONEXCLAMATION);
      }
      else
        MessageBox(
          Handle, "Disk formatted successfully!",
          "My Application", MB_OK);
     
    }
    //---------------------------------------------------------------------------

  9. #9
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    bonjour
    attention a la casse la donction s'appelle SHFormatDrive et non ShFormatDrive

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ImpFuncDLL = (MYDLLFUNC2)GetProcAddress(hinstDLL, "SHFormatDrive");
    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  10. #10
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Bonjour à tous;

    Oui, maintenant le formatage s'éffectue en affichant la boite de formatage de Windows. Effectivement, mais étant donné que je ne veux formater que la disquette "A:\ ~ Lecteur(0)" pourquoi je devrais afficher celle de windows: Comment le faire ??.

    Peutons réaliser un formatage par nos propres moyens sans celles de Windows ?.


    @+

  11. #11
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    je ne crois pas que cela est possible sans passer par les apis windows,
    peut etre avec l'assembleur et l'interruption 13h du BIOS (juste une idée)

  12. #12
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Bonjour à tous,

    Reste toujours util comment formater sans afficher la boite de dialogue de formatage de windows, (un formatage en arriére plan).


    @+

  13. #13
    Membre expérimenté Avatar de Mattetfamilly
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Par défaut
    Et un ShellExecute?
    Je ne suis pas certains de la façon de répartir les paramètres dans le ShellExecute...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    AnsiString Leparametre;
    //initialisation du lecteur:
    Leparametre=lecteur; // en lettre exemple Leparametre="a:"
    //intialisation des options:
    if(optionsyst)
    Leparametre=Leparametre+" /s";
     
    ShellExecute("Format","Format a:",NULL,Leparametre.c_str(),NULL);
    Ce code devrait ouvrir une fenêtre Dos durant le formatage...

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/02/2007, 19h14
  2. Dé-formater une disquette ?
    Par zoom61 dans le forum Autres Logiciels
    Réponses: 11
    Dernier message: 04/07/2006, 08h00
  3. Protéger une disquette contre la copie
    Par benzaza dans le forum Assembleur
    Réponses: 20
    Dernier message: 16/01/2005, 10h42
  4. Copier un .com sur le 1er secteur d'une disquette
    Par zdra dans le forum Assembleur
    Réponses: 5
    Dernier message: 23/08/2002, 18h03
  5. historique d'une disquette
    Par bashou dans le forum MFC
    Réponses: 2
    Dernier message: 24/06/2002, 11h35

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