je travaille sur ce code qui me permet de protéger un fichier puis de le cacher mais le problème est que j'arrive pas à enlever l'attribut caché.(la protection elle s'enleve).
voici le code:
Code : Tout sélectionner
;Lock Folder
;l'application permet de donner des droits d'acces au fichiers et dossiers
;projet initialisé le 15 Juillet 2006 à 13h 44 Mn
Enumeration
#menu1
#bt_Fermer
#bt_Mode_Expert
#fen1
#fen2
#fen3
#ProtegerFichier
#SupprimerProtectionFichier
#ProtegerDossier
#SupprimerProtectionDossier
#ChangerPassword
#Password
#Password2
#Parametres
#Aide
#A_Propos
#Enregistrement
#Afficheur
#MenuFermer
#bt_Valider
#bt_Annuler
#bt_Annuler2
#bt_Appliquer
#BarreOutils
#TB
#TBbutton1:#TBbutton2
#fenetreApropos
#bt_Ok
#bt_Ok2
EndEnumeration
#Passwordfile = "C:\pwd.mic"
#infofile = "C:\InfoLocker.txt"
#Access_None = "n"
#Access_Read = "r"
#Access_Write = "w"
#Access_Change = "c"
#Access_Full = "f"
#G=Chr(34)
;création de la fenetre principale et de ses composants
Procedure FenetrePrincipale()
OpenWindow(#fen1, 0, 0, 600, 460,"PC-DEV Locker (Démonstration)V 1.00 Beta 1", #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_TitleBar)
CreateGadgetList(WindowID(#fen1))
If CreateMenu(#menu1,WindowID(#fen1))
MenuTitle("Fichier")
MenuItem(#ProtegerFichier, "Proteger Fichier")
MenuItem(#SupprimerProtectionFichier, "Enlever Protection Fichier")
MenuItem(#ProtegerDossier, "Proteger Dossier")
MenuItem(#SupprimerProtectionDossier, "Enlever Protection Dossier")
MenuItem(#MenuFermer, "Fermer")
MenuTitle("Options")
MenuItem(#ChangerPassword, "Changer de Mot de Passe")
MenuItem(#Parametres, "paramètres")
MenuTitle("Aide")
MenuItem(#Aide, "Aide")
MenuItem(#Enregistrement, "Enregistrement")
MenuItem(#A_Propos, "A Propos")
ButtonGadget(#TBbutton1,0,5,100,20,"Proteger Fichier")
ButtonGadget(#TBbutton2,110,5,140,20,"Enlever Protection Fichier")
EndIf
LoadFont(0,"Arial",10,#PB_Font_Bold)
ListViewGadget(#Afficheur,5,30,590,360)
SetGadgetFont(#Afficheur,FontID(0))
ButtonGadget(#bt_Mode_Expert, 10, 395, 80, 20, "Mode Expert")
DisableGadget(#bt_Mode_Expert,1)
ButtonGadget(#bt_Fermer, 510, 395, 80, 20, "Fermer")
CreateStatusBar(0, WindowID(#fen1))
AddStatusBarField(450)
AddStatusBarField(150)
SetGadgetColor(#Afficheur, #PB_Gadget_BackColor,$5C0E09)
SetGadgetColor(#Afficheur, #PB_Gadget_FrontColor,$F7EAA0)
;fin de la création de l'interface
EndProcedure
Procedure.s ShowAccess(Fichier.s); Affiche les listes DACL des fichiers spécifiés.
Protected Handle.l, result.s
Handle = RunProgram("cacls", #G+Fichier+#G, "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
If Handle
While ProgramRunning(Handle)
result + ReadProgramString(Handle) + #CRLF$
Wend
CloseProgram(Handle)
EndIf
ProcedureReturn result
EndProcedure
Procedure.l DenyAccess(Fichier.s, Utilisateur.s) ; Refuse l'accès à l'utilisateur spécifié.
Protected Handle.l, result.l
Handle = RunProgram("cacls", #G+Fichier+#G + " /d " + Utilisateur, "", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Write|#PB_Program_Read)
If Handle
result = WriteProgramStringN(Handle, "O") ; Répond 'Oui' à la confirmation
CloseProgram(Handle)
EndIf
ProcedureReturn result
EndProcedure
Procedure.l ReplaceAccess(Fichier.s, Utilisateur.s, Access.s) ; Remplace les droits d'accès de l'utilisateur spécifié.
Protected Handle.l, result.l
Handle = RunProgram("cacls", #G+Fichier+#G + " /p " + Utilisateur + ":" + Access, "", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Write|#PB_Program_Read)
If Handle
result = WriteProgramStringN(Handle, "O") ; Répond 'Oui' à la confirmation
CloseProgram(Handle)
EndIf
ProcedureReturn result
EndProcedure
Procedure ProtegerFichier();Aucun accès autorisé pour le fichier
Filtre$ = "Texte (*.log)|*.txt;*.bat|PureBasic (*.pb)|*.pb|Tous les fichiers (*.*)|*.*"
Filtre = 2
Fichier$ = OpenFileRequester("Sélectionner un Fichier", FichierParDefaut$, Filtre$, Filtre)
If Fichier$
AddGadgetItem(#Afficheur, -1, Fichier$)
DenyAccess(Fichier$, "BUILTIN\Administrateurs")
Else
MessageRequester("PC-DEV Locker","Aucun fichier n'a été sélectionné !",#MB_ICONERROR | #MB_OK)
EndIf
EndProcedure
Procedure ProtegerFichierCache();Aucun accès autorisé pour le fichier caché
Protected Nombre_Elements
Nombre_Elements = CountGadgetItems(#Afficheur) - 1
Filtre$ = "Texte (*.log)|*.txt;*.bat|PureBasic (*.pb)|*.pb|Tous les fichiers (*.*)|*.*"
Filtre = 2
Fichier$ = OpenFileRequester("Sélectionner un Fichier", FichierParDefaut$, Filtre$, Filtre)
If Fichier$
AddGadgetItem(#Afficheur, -1, Fichier$)
Debug SetFileAttributes(Fichier$,#PB_FileSystem_Hidden|#PB_FileSystem_System)
DenyAccess(Fichier$, "BUILTIN\Administrateurs")
Else
MessageRequester("PC-DEV Locker","Aucun fichier n'a été sélectionné !",#MB_ICONERROR | #MB_OK)
EndIf
EndProcedure
Procedure EnleverProtectionFichier()
Protected Selection$
Selection$ = GetGadgetText(#Afficheur)
If Selection$
ReplaceAccess(Selection$, "BUILTIN\Administrateurs", #Access_Full)
num=GetGadgetState(#Afficheur)
RemoveGadgetItem(#Afficheur,num)
Else
MessageRequester("PC-DEV Locker","Sélectionner un fichier dans la liste !",#MB_ICONERROR | #MB_OK)
EndIf
EndProcedure
Procedure EnleverProtectionFichierCache()
Protected Nombre_Elements
Nombre_Elements = CountGadgetItems(#Afficheur) - 1
Fichier$ = GetGadgetText(#Afficheur)
If Fichier$
ReplaceAccess(Fichier$, "BUILTIN\Administrateurs", #Access_Full) And SetFileAttributes(Fichier$,#PB_FileSystem_Normal)
num=GetGadgetState(#Afficheur)
RemoveGadgetItem(#Afficheur,num)
Else
MessageRequester("PC-DEV Locker","Sélectionner un fichier dans la liste !",#MB_ICONERROR | #MB_OK)
EndIf
EndProcedure
;protection des dossiers
Procedure ProtegerDossier();Aucun accès autorisé pour le Dossier
Protected Nombre_Elements
Nombre_Elements = CountGadgetItems(#Afficheur) - 1
CheminInitial$ = ""
Chemin$ = PathRequester("Choisissez un répertoire",CheminInitial$)
If Chemin$
Longueur = Len(Chemin$)
Resultat$ = RSet(Chemin$,Longueur-1)
AddGadgetItem(#Afficheur, -1, Resultat$)
DenyAccess(Resultat$, "BUILTIN\Administrateurs")
Else
MessageRequester("PC-DEV Locker","Aucun dossier n'a été sélectionné !",#MB_ICONERROR | #MB_OK)
EndIf
EndProcedure
;enlever protection des dossiers
Procedure EnleverProtectionDossier()
Selection$ = GetGadgetText(#Afficheur)
If Selection$
Longueur = Len(Selection$)
Resultat$ = RSet(Selection$,Longueur-1)
;ReplaceAccess(Selection$, "BUILTIN\Administrateurs", #Access_Read)
ReplaceAccess(Selection$, "BUILTIN\Administrateurs", #Access_Full)
num=GetGadgetState(#Afficheur)
RemoveGadgetItem(#Afficheur,num)
Else
MessageRequester("PC-DEV Locker","Sélectionner un dossier dans la liste !",#MB_ICONERROR | #MB_OK)
EndIf
;Debug Resultat$
EndProcedure
Procedure EnregistrerListeFiles();enregistre les elements protégés dans un fichier
Protected Nombre_Elements
Nombre_Elements = CountGadgetItems(#Afficheur)
Nombre_Elements = Nombre_Elements - 1
;enregistrer les infos dans un fichier
If CreatePreferences(#infofile)
PreferenceComment("Listes des Fichiers et dossiers protégés")
PreferenceComment(" ")
For i = 0 To Nombre_Elements
WritePreferenceString(Str(i+1)+" "+"FilesFolders",""+GetGadgetItemText(#Afficheur,i,0))
PreferenceComment("")
Next i
ClosePreferences()
EndIf
EndProcedure
Procedure ChargerInfoListe()
OpenPreferences(#infofile)
Protected Nombre_Elements
Nombre_Elements = 1
Repeat
FilesFolders.s = ReadPreferenceString(Str(Nombre_Elements)+" "+"FilesFolders","")
If FilesFolders <> ""
AddGadgetItem(#Afficheur, -1, FilesFolders.s)
EndIf
Nombre_Elements + 1
Until FilesFolders =""
ClosePreferences()
EndProcedure
FenetrePrincipale():ChargerInfoListe()
Repeat
;fermeture de la fenetre principale avec la croix de la fenetre
Select WindowEvent()
Case #PB_Event_CloseWindow
Sortie = 1
;action concernant les menus
Case #PB_Event_Menu
Select EventMenu()
Case #MenuFermer: Sortie =1
EndSelect
;fermeture de la fenetre principale et la fenetre parametres
Case #PB_Event_Gadget
Select EventGadget()
Case #TBbutton1
ProtegerFichierCache()
Case #TBbutton2
EnleverProtectionFichierCache()
Case #bt_Fermer
Sortie = 1
EndSelect
EndSelect
Until Sortie = 1
EnregistrerListeFiles()