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
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
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!
Voila!
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"); }
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?Un peu comme si le résultat correspondait à des variables que l'on peut réutiliser?
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?
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 )
utilises cette procédure de cette manière par exemple :
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;
Code : Sélectionner tout - Visualiser dans une fenêtre à part sh_cmd('smbclient -L nom_hote');
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à!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager