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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

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