Page 1 sur 1

[..] Message à l'ouverture d'un fichier

Posté : mer. 05 oct. 2011 18:17
par Doc
Bonjour à tous, je me suis mis en tête de faire un petit script permettant lors de l'ouverture d'un fichier de demander un mot de passe.

Seulement, je ne trouve pas de fonction me permettant lors de l'ouverture du fichier d'afficher par exemple, une Msgbox

Voiçi le type de code, Run étant une tentative raté (normal...) :

Code : Tout sélectionner

$Chemin = "C:\Users\Doc\Downloads\Recherche.png"
If Run($Chemin) Then
    MsgBox(64, "Information", "Fenêtre ouverte !")
EndIf
 
Merci d'avance :D

Doc

Re: [...]Message à l'ouverture d'un fichier

Posté : mer. 05 oct. 2011 18:21
par moi

Code : Tout sélectionner

shellexecute($chemin)

Re: [...]Message à l'ouverture d'un fichier

Posté : mer. 05 oct. 2011 18:26
par Doc
Le ShellExecute ne convient pas, il ouvre automatiquement le fichier, je veux que la Msgbox s'affiche lorsque l'utilisateur lui même ouvre le fichier.

Re: [...] Message à l'ouverture d'un fichier

Posté : mer. 05 oct. 2011 19:38
par mikell
Ce genre de truc devrait le faire
► Afficher le texte

Re: [...] Message à l'ouverture d'un fichier

Posté : mer. 05 oct. 2011 19:42
par Tlem
Cela manque de clarté. :shock:

Vous voulez afficher une boite de dialogue demandant la saisie d'un mot de passe lorsqu'un utilisateur ouvre un fichier spécifique (Ou n'importe quel fichier) par le biais de l'explorer de Windows ?
Ou bien,
Vous voulez afficher une boite de dialogue demandant la saisie d'un mot de passe lorsqu'un utilisateur choisit l'ouverture d'un fichier par le biais d'un selecteur de fichiers AutoIt ?

Pour le cas 1, cela va être plutôt délicat selon le type de fichier.
L'utilisation de la gestion des droits Windows serait bien plus approprié.

Pour le cas 2, cela sera plus simple (mais j'ai comme l'impression que c'est plutôt le cas 1 que vous recherchez ... :mrgreen: ).

Re: [...] Message à l'ouverture d'un fichier

Posté : mer. 05 oct. 2011 20:40
par Doc
En clair, voici le script qui permet de choisir un fichier où mettre un mot de passe :

Code : Tout sélectionner

#RequireAdmin
#include <Constants.au3>
#include <EditConstants.au3>
#Include <File.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <Crypt.au3>
#Region ### START Koda GUI section ### Form=C:\Users\Sam\Desktop\AutoIT\FileProtect\Koda\FileProtect.kxf
Global $FileProtect = GUICreate("Configuration de FileProtect", 500, 255, 192, 124)
GUISetBkColor(0xFFFFFF)
Global $Chemin = GUICtrlCreateInput("", 120, 72, 265, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
Global $Recherche = GUICtrlCreatePic(@ScriptDir & "\Data\Images\Recherche.jpg", 225, 8, 50, 50)
GUICtrlSetTip($Recherche, "Parcourir")
Global $Protection = GUICtrlCreatePic(@ScriptDir & "\Data\Images\Bouclier.jpg", 230, 170, 50, 50)
GUICtrlSetTip($Protection, "Sécuriser le fichier")
Global $Demarrage = GUICtrlCreateCheckbox("Protection au Démarrage", 8, 235, 145, 17)
$MsgBoxDemarrage = 0
Global $Label1 = GUICtrlCreateLabel("Mot de Passe pour le fichier (Obligatoire) :", 152, 104, 200, 17)
Global $Input2 = GUICtrlCreateInput("", 120, 136, 265, 21, BitOR($ES_CENTER,$ES_PASSWORD,$ES_AUTOHSCROLL))
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Dim $Algo = $CALG_3DES
Dim $CheminFileProtect = @ScriptDir
Dim $FichierDemarrage = @ScriptDir & "\Data\Fichiers\Demarrage.ini"
Dim $Add = @ScriptDir & "\Data\Fichiers\Add.ini"


If Not FileExists($FichierDemarrage) Then
    MsgBox(16, "Erreur", "Le fichier 'Data\Fichiers\Demarrage.ini' est introuvable !")
    Exit
EndIf
While 1

 $Msg = GUIGetMsg()

 If $Msg = $GUI_EVENT_CLOSE Then  Exit

 If $Msg = $Recherche Then
Dim $FichierProtection = FileOpenDialog("FileProtect", "C:\", "Tous (*.*)", 1)
    GUICtrlSetData($Chemin, $FichierProtection)
EndIf

If _IsChecked($Demarrage) Then
FileOpen($FichierDemarrage)
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "FileProtect.exe", "REG_SZ", $CheminFileProtect)
_FileWriteToLine($FichierDemarrage, 1, "Lancement du Logiciel au démarrage de l'ordinateur = True", 1)
While $MsgBoxDemarrage = 0
MsgBox(64, "Information", "Le logiciel ce lançera au démarrage de l'ordinateur.")
$MsgBoxDemarrage = 1
FileClose($FichierDemarrage)
WEnd
Else
$MsgBoxDemarrage = 0
_FileWriteToLine($FichierDemarrage, 1, "Lancement du Logiciel au démarrage de l'ordinateur = False", 1)
RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "FileProtect.exe")
EndIf

If $Msg = $Protection Then

Dim $FichierProtection = @ScriptDir & "\Data\Fichiers\Protection.ini"

FileOpen($FichierProtection, 1)
FileOpen($Add, 1)

Dim $FichierProteger = GUICtrlRead($Chemin)
Dim $Pass = GUICtrlRead($Input2)
Dim $PassCrypt = _Crypt_EncryptData($Pass, "Password", $Algo)
Dim $AddValue = FileReadLine($Add, 1)

If $AddValue = "" Then
    MsgBox(16, "Erreur", "Le fichier Data\Fichiers\Add.ini est corrompu, veuillez entrer une valeur différente de 0.")
    Exit
EndIf

If $AddValue = "0" Then
    MsgBox(16, "Erreur", "Le fichier Data\Fichiers\Add.ini est corrompu, veuillez entrer une valeur différente de 0.")
    Exit
EndIf

If $FichierProteger = "" Then
MsgBox(16, "Erreur", "Il n'y a aucun fichier à proteger !")
ElseIf $Pass = "" Then
    MsgBox(16, "Erreur", "Il n'y a aucun Mot de Passe !")
ElseIf $Pass And $Chemin <> "" Then
_FileWriteToLine($FichierProtection, $AddValue, $FichierProteger, 1)
$AddValue = $AddValue + 1
_FileWriteToLine($Add, 1, $AddValue, 1)
_FileWriteToLine($FichierProtection, $AddValue, $PassCrypt, 1)
$AddValue = $AddValue + 1
_FileWriteToLine($Add, 1, $AddValue, 1)
FileClose($FichierProtection)
FileClose($Add)
MsgBox(64, "Information", "Fichier protegé avec succès !")
EndIf
EndIf

If Not ProcessExists("FileProtect.exe") Then
    Run(@ScriptDir & "\FileProtect.exe")
EndIf

WEnd


Func _IsChecked($Check)
    Return BitAnd(GUICtrlRead($Check),$GUI_CHECKED) = $GUI_CHECKED
EndFunc
Ensuite, je voudrais un autre script qui en fonction du fichier à proteger choisit par l'utilisateur, affiche une InputBox qui demande un mot de passe pour démarrer le fichier.

(Il me manque juste la partie pour l'affichage de l'inputbox à l'ouverture du fichier...)

J'espère que c'est plus clair :P

Doc

Re: [...] Message à l'ouverture d'un fichier

Posté : mer. 05 oct. 2011 23:03
par Tlem
Doc a écrit :J'espère que c'est plus clair :P
Non !!!

Comment ce fichier est-il sensé être lancé ?

Re: [...] Message à l'ouverture d'un fichier

Posté : mer. 05 oct. 2011 23:35
par Doc
Hum, je vais essayer de décrire par étapes :

Etape 1 - L'utilisateur sélectionne un fichier (Exemple.txt), et lui met un mot de passe.

Etape 2 - L'utilisateur essaye d'ouvrir Exemple.txt mais avant l'ouverture du Fichier une InputBox apparaît et demande le mot de passe.

Etape 3 - Si le mot de passe est bon, le fichier s'ouvre, sinon il ne s'ouvre pas.

Voila ce que je voudrais faire, le problème est que je ne trouve pas comment faire pour que le script détecte l'ouverture de Exemple.txt...

Re: [...] Message à l'ouverture d'un fichier

Posté : jeu. 06 oct. 2011 00:21
par Tlem
Vous ne répondez malheureusement toujours pas à ma question :
Comment ce fichier est-il sensé être lancé ?

Malgré votre réponse évasive, j'entrevois la possibilité que vous cherchez à intercepter le lancement ou l'ouverture d'un fichier par un double clic dessus ! :mrgreen:
Et dans ce cas, ma réponse pour le cas N°1 de mon message http://www.autoitscript.fr/forum/viewto ... 065#p56065 reste la solution.

L'interception du lancement d'un fichier/programme reste possible sous certaines conditions, mais j'ai bien peur que selon différents critères la totalité des actions possibles ne soient pas envisageable.
Pour un fichier, celui-ci peut être lancé par :
- Un double clic
- Un clic droit, puis exécuter
- Par le menu démarrer puis exécuter
- Par le lancement à partir d'un programme tiers (batch, script, etc ...)
et sans doute d'autres méthodes auxquelles je ne pense pas à cette heure avancée de la soirée.

Comme je l'ai dit, il reste possible d'intercepter le lancement de certains type de fichiers, tel par exemple un fichier texte.
Il suffit de vérifier si dans le titre d'une application en cours ou qui vient d'être lancée, le nom du fichier en cours d'édition s'y trouve. Ceci dit, la protection reste illusoire, car il suffit de renommer le fichier ou de le copier sur une clé USB pour le lire à partir d'un autre PC.

Bref, faites ce que vous voulez, mais pour moi, la seule et unique manière de protéger un fichier d'une lecture non désirée reste la gestion des droits utilisateurs par Windows.

Re: [...] Message à l'ouverture d'un fichier

Posté : jeu. 06 oct. 2011 01:43
par mikell
Tlem a écrit :Il suffit de vérifier si dans le titre d'une application en cours ou qui vient d'être lancée, le nom du fichier en cours d'édition s'y trouve.
Tiens ? comment diable n'y a-t-on pas pensé avant :mrgreen:
(disons, 5 posts avant... :P )

Re: [...] Message à l'ouverture d'un fichier

Posté : jeu. 06 oct. 2011 07:50
par Tlem
@mikell, je n'avais effectivement pas regardé votre code en détail.
Ceci dit, j'ai l'intime conviction que ce n'est pas ce que Doc souhaite faire, donc c'est pour cela que je répète en détails les possibilités. :mrgreen: