Salut tout le monde,
J'aimerais bien savoir comment protéger un GUI sous MATLAB par un mot de passe.
C'est comme mettre une clé de licence.
Salut tout le monde,
J'aimerais bien savoir comment protéger un GUI sous MATLAB par un mot de passe.
C'est comme mettre une clé de licence.

Bonjour,
Petite recherche avec le mot clé "password":
Une autre alternative en utilisant (encore une fois) Uicomponent :
Le mot de passe est identique au nom d'utilisateur ici dans cet 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
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 function test figure('units','pixel','position',[100 100 300 200],... 'menubar','none','toolbar','none',... 'name','Login','numbertitle','off') movegui('center') up = uipanel(... 'units','normalized',... 'position',[.1 .1 .8 .8],... 'fontname','arial',... 'fontsize',12); y = .2; iy = (1-2*y)/3; uicontrol(up,'style','text','units','normalized',... 'position',[.05 y+2*iy-0.03 .3 y],'string','User: ',... 'fontname','arial','fontunits','points','fontsize',12,'hor','left') uicontrol(up,'style','text','units','normalized',... 'position',[.05 iy-0.03 .3 y],'string','Password: ',... 'fontname','arial','fontunits','points','fontsize',12,'hor','left') pop = uicontrol(up,'style','popup','units','normalized',... 'position',[.4 y+2*iy .55 y],'string',{'aaaa' 'bbbbb' 'ccccc'},... 'fontname','arial','fontunits','points','fontsize',12,'hor','left', ... 'tag','popusers'); pass = uicomponent(up,'style','JPasswordField', ... 'tag','pass',... 'units','normalized'); set(pass,'position',[.4 iy .55 y],'KeyPressedCallback',@kpcb); function kpcb(obj,event) if event.getKeyCode==10 checkpass elseif event.getKeyCode==27 pass.Text = ''; end end function checkpass str = get(pop,'string'); str = cellstr(str); v = get(pop,'value'); if strcmp(pass.Text,str{v}) % Mot de passe correct close else % Mot de passe incorrect pass.Text = ''; beep end end end
Il suffit d'appuyer sur la touche Entrée pour vérifier le mot de passe saisi.
C'est portable et compilable sans soucis avec le MATLAB Compiler.
Ton programme est génial mais comment peut on récupérer le nom de l'utilisateur qui se connecte car si on renvoie la variable v à travers les fonctions : 'checkpass' puis 'kpcb' Matlab nous informe que cette variable à plusieurs sessions... et impossible de récupérer cette variable dans le set qui gère le callback ...

Bonjour,
Il te suffit d'utiliser le principe des fonctions imbriquées:
Utilisation:
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
66function user = test figure('units','pixel','position',[100 100 300 200],... 'menubar','none','toolbar','none',... 'name','Login','numbertitle','off') movegui('center') up = uipanel(... 'units','normalized',... 'position',[.1 .1 .8 .8],... 'fontname','arial',... 'fontsize',12); y = .2; iy = (1-2*y)/3; uicontrol(up,'style','text','units','normalized',... 'position',[.05 y+2*iy-0.03 .3 y],'string','User: ',... 'fontname','arial','fontunits','points','fontsize',12,'hor','left') uicontrol(up,'style','text','units','normalized',... 'position',[.05 iy-0.03 .3 y],'string','Password: ',... 'fontname','arial','fontunits','points','fontsize',12,'hor','left') pop = uicontrol(up,'style','popup','units','normalized',... 'position',[.4 y+2*iy .55 y],'string',{'aaaa' 'bbbbb' 'ccccc'},... 'fontname','arial','fontunits','points','fontsize',12,'hor','left', ... 'tag','popusers'); pass = uicomponent(up,'style','JPasswordField', ... 'tag','pass',... 'units','normalized'); set(pass,'position',[.4 iy .55 y],'KeyPressedCallback',@kpcb); user = []; uiwait function kpcb(obj,event) if event.getKeyCode==10 checkpass elseif event.getKeyCode==27 pass.Text = ''; end end function checkpass str = get(pop,'string'); str = cellstr(str); v = get(pop,'value'); if strcmp(pass.Text,str{v}) % Mot de passe correct user = str{v}; close else % Mot de passe incorrect pass.Text = ''; beep end end end
Code : Sélectionner tout - Visualiser dans une fenêtre à part utilisateur = test
Ha merci, je connaissais pas cette fonction ...
Disons aussi que je n'ai jamais utilisé les fonctions imbriquées![]()
je n ai pas bien compris votre reponse. je suis encore un debutant,
je dispose d un GUI que j ai creer sous matlab, intitule Hydro.m et Hydro.fig.
je veux les proteger par un GUI qui vous demander le nom d utilisateur et le mot de passe.
si le nom d utilisateur et le mot de passe sont correctes, le GUI Hydro s ouvre, sinon il te donne un message d erreur.
les codes que vous avez mis je sais pas comment les utiliser, est ce que je dois les mettre dans mon GUI Hydro, au debut de mon code ou bien quoi.
si vous pouviez me les indiquer pas a pas.
cordialement
Tu crées la fonction Test que Dut et Winjerome nous ont gentiment programmé.
Tu crées un nouveau script 'Interface' ou tu fait appel a tes interfaces :
Ta figure Hydro.fig a été crée à partir de ta fonction Hydro je présume
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 clear all close all clc list_User={'NOM1' NOM2'}; id_user= Interface_Login(list_User); Hydro(id_user)![]()
oui je sais creer cette fonction mais, est ce que je dois la mettre dans un nouveau fichier .m file ou quoi?????
Oui de la même façon de tu crées une fonction File -> New -> Function...
Tu copie colle la fonction test et tu sauvegarde.
Ps: Pense a mettre tes paths on ne sait jamais !
Partager