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

EDI Delphi Discussion :

[Kylix] Interface graphique pour lognes de commande linux


Sujet :

EDI Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 126
    Points : 49
    Points
    49
    Par défaut Interface graphique pour lognes de commande linux
    Salut j'aimerais créer une interface graphique pour ligne de commande linux. J'aimerais par exemple à l'aide de Tbutton exécuter la commande smbmount qui permet de monter des partages windows....

    Comment dois je m'y prendre?

    Merci d'avance

  2. #2
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Points : 62
    Points
    62
    Par défaut
    Très simple, tu crées une fiche où il y a ton bouton et dans la fonction du callback du clic sur ce bouton, tu insère un appel système pour l'exécution de smbmount.

    Dans la pratique, en mode C++ de Kylix, ca ressemble à ca!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void __fastcall TMyForm::MyButtonClick(TObject* Sender)
    {
        system("smbmount blablabla et params");
    }
    Voila!
    Dack

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 126
    Points : 49
    Points
    49
    Par défaut
    Un peu comme si le résultat correspondait à des variables que l'on peut réutiliser?

  4. #4
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Points : 62
    Points
    62
    Par défaut
    Un peu comme si le résultat correspondait à des variables que l'on peut réutiliser?
    Je ne comprends pas. Peux-tu préciser stp?
    Dack

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 126
    Points : 49
    Points
    49
    Par défaut
    Comment dire...

    Lorsque je tape smbclient -L nom_hote

    cela me renvoit dans le terminal tous les noms de partage.
    A l'aide de mon interface graphique j'aimerais que l'on voit ses dossiers partagées commeqd tu vas dans le voisinage réseau de windows. Et que une fois que tu as cliqué sur un partage pour entrer dedans , une commande effectue le smbmount dans par exemple /tmp/pc285xx et poursuivre la visualisation avec konqueror.

    En fait je souhaiterais vraiment développer smbclient et smbmount en graphique.

    Tu comprends mieux?

  6. #6
    hal
    hal est déconnecté
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Il faut peut etre que tu te serves de la 'libc' avec popen :
    FILE *popen (const char *command, const char *mode);

    A ma connaissance, il n'y a pas de fonction (pour kylix) qui te retourne la sortie d'une commande shell, par contre tu peux utiliser cette procédure (mais qui est surement à améliorer )

    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
    procedure sh_cmd(commande:string);
    var
      OUTPUT: PIOFile;
      line: PChar;
      txt: string;
      str: string;
      INPUT:string;
      rb: integer;
    const
      BufferSize: Integer = 1000;
    begin
      INPUT:=commande;
      OUTPUT := popen(PChar(INPUT),'r');
      GetMem(Line,BufferSize);
      SetLength(txt,0);
     
      if Assigned(OUTPUT) then
      begin
        while FEOF(OUTPUT)=0 do
        begin
          rb := libc.fread(line,1,BufferSize,OUTPUT);
          SetLength(Txt,length(txt)+rb);
          MemCpy(@txt[length(txt)-(rb-1)],line,rb);
     
          form1.LIGNE.Lines.Add(txt); //tout est dans txt
        end;
      end;
     
      libc.pclose(OUTPUT);
      wait(nil);
      FreeMem(Line,BufferSize);
    end;
    utilises cette procédure de cette manière par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sh_cmd('smbclient -L nom_hote');

  7. #7
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Points : 62
    Points
    62
    Par défaut
    Tu peux aussi utiliser un PIPE vers lequel tu reroutes la sortie standard.

    Je m'explique:
    1) Tu copies le descripteur de stdout (tu gardes la valeur de la copie)
    2) tu crées un pipe
    3) Tu fermes le descripteur de stdout (il y a maintenant un emplacement libre)
    4) tu copies le descripteur de l'entrée du pipe (descr. d'écriture) qui va venir se mettre à la place de l'emplacement libre et il sera utilisé comme stdout. Ton appli console va donc écrire toutes ses sorties dans le pipe. Tu n'auras qu'à les lire là.

    Ensuite, tu restaures l'état initial des descripteurs:
    5) Tu fermes les descripteur du pipe (le descripteur en lecture, en écriture et la copie du descripteur en écriture)
    6) tu copies la copie du descripteur de stdout (elle se remet à sa place initiale)
    7) tu fermes la copie de stdout (faite en 1) )

    Et voilà!
    Dack

Discussions similaires

  1. interface graphique pour des commandes linux
    Par A7med dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 24/10/2007, 16h49
  2. Interface graphique pour projet gtk en C sous Linux
    Par troumad dans le forum GTK+ avec C & C++
    Réponses: 8
    Dernier message: 12/02/2007, 13h28
  3. Debugger graphique pour C sur GNU/Linux
    Par stephane eyskens dans le forum Autres éditeurs
    Réponses: 8
    Dernier message: 20/08/2006, 12h15
  4. Interface graphique pour utilisateur
    Par Missvan dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 14/02/2005, 09h56

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