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

 Delphi Discussion :

Forcer l'effacement d'un fichier


Sujet :

Delphi

  1. #21
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ Droïde Système7,Hello, rien n'est bête en Delphi, en effet j'avais testé le chemin, et même j'ai placé deux bouttons pour la procédure "deltree" et "deletefile".

    L'application est placée directement dans le dossier "Backgrounds" ou se trouve l'image.

    Code pour la procédure "Deltree" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.Button5Click(Sender: TObject);
    begin
     
    wd :=  Path[CSIDL_SYSTEM] ;//GetWinFolder_V1($0025); C:\Windows\System32
     
    Dossier := 'oobe\Info\Backgrounds';
     
    DelTree(wd + dossier);
     
    showmessage(wd + dossier) ;
     
    end;
    Code pour la procédure "Deletefile" :

    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
     
    procedure TForm1.Button4Click(Sender: TObject);
    begin
    chappli := ExtractFilePath(Application.ExeName);
     
     
    fileSource := chappli + 'BackgroundDefault.jpg' ;
     
     showmessage(filesource) ;
     
    if FileExists(pchar(filesource)) then
     
             Deletefile(pchar(filesource))
     
          else
          showmessage('Le logon par défaut est ok');
     
    end;
    Dans ce cas le chemin est correct et pourtant mon fichier ne s'éfface pas.

    Edit : Je pensais à une chôse, je suis sous Seven 64 bits !

    @+,

    Cincap

  2. #22
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ Tous, j'ai trouvé.

    Merci pour l'aide.

    @+,

    Cincap

  3. #23
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par cincap Voir le message
    @ Tous, j'ai trouvé.

    Merci pour l'aide.

    @+,

    Cincap
    On pourrait savoir comment tu as fait ?

  4. #24
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Citation Envoyé par ero-sennin Voir le message
    On pourrait savoir comment tu as fait ?
    Bàaaaa oui alors !

    Seven 64 bits en rapport ?

  5. #25
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ ero-sennin, bien entendu, c'est le but du forum.

    Fonction pour 64 bits:

    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
     
    Function ChangeFSRedirection(bDisable: Boolean): Boolean;
     
    Type TWow64DisableWow64FsRedirection = Function(Var Wow64FsEnableRedirection: LongBool): LongBool; StdCall; 
          TWow64EnableWow64FsRedirection  = Function(var Wow64FsEnableRedirection: LongBool): LongBool; StdCall;
     
      Var
        hHandle: THandle;
        Wow64DisableWow64FsRedirection: TWow64DisableWow64FsRedirection;
        Wow64EnableWow64FsRedirection:  TWow64EnableWow64FsRedirection;
        Wow64FsEnableRedirection:       LongBool;
     
    begin
     
    Result := True;
     
    try
        hHandle := GetModuleHandle('kernel32.dll');
        @Wow64EnableWow64FsRedirection  := GetProcAddress(hHandle, 'Wow64EnableWow64FsRedirection');
        @Wow64DisableWow64FsRedirection := GetProcAddress(hHandle, 'Wow64DisableWow64FsRedirection');
     
        if bDisAble then begin
         If ((hHandle <> 0) and (@Wow64EnableWow64FsRedirection <> nil) and (@Wow64DisableWow64FsRedirection <> nil)) Then
          Wow64DisableWow64FsRedirection(Wow64FsEnableRedirection);
        end;
     
        if not bDisAble then
        If ((hHandle <> 0) and (@Wow64EnableWow64FsRedirection <> nil) and (@Wow64DisableWow64FsRedirection <> nil)) Then
          Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection);
     
    Except Result := False;
    end;
     
    end;
    Appel de la fonction :

    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
     
    procedure TForm1.BDefautClick(Sender: TObject);
    Var
    filename : String ;
    begin
     
      wd :=  GetWinFolder_V1($0025); //Path[CSIDL_SYSTEM] ;
      Dossier := '\oobe\info\Backgrounds';
     
     fileDest := wd + Dossier + '\BackgroundDefault.jpg';
     
     filename := filedest ;
     
     ChangeFSRedirection(True);
     
     if FileExists(FileName) then begin
           deletefile(FileName);
           showmessage('Le logon par défaut est réactivé !') ;
     
    ChangeFSRedirection(False);
     
      end;
    end;
    Il faut impérativement encadrer la fonction de gestion de fichier (FileExists, OpenFile, DeleteFile, CreateFile,...).

    Même chose dans les cas de recherche de fichier en encadrant la totalité de la recherche avec les fonctions (FindFirst,FindNext et FindClose).

    Edit, il faut ceci evidemment : Uses ShellAPI, Windows;

    @+,

    Cincap

  6. #26
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Au moins nous ne restons pas sur notre faim

    Autrement dit, la version 64 bits impose certaines obligations spéciales par rapport aux autres versions de Windows.

    La FAQ serait contente d'accueillir...


  7. #27
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ tous, à condition de lancer l'application avec les droits Administrateurs.

    En déletant l'image modifiée du background, je retrouve celle d'origine qui est dans une dll nommée "imageres.dll" (comme sous Vista) il est donc inutile de faire une procédure de backup de cette image, d'ou mon insistance pour déleter cette image.

    En effet, Sven contrôle si il y a un jpg (maximum 245k) dans le dossier Backgrounds, sinon il utilise sa dll.

    @+,

    Cincap

  8. #28
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    [...] à condition de lancer l'application avec les droits Administrateurs.
    Ahhhh oki, je pensais que ça exemptait l'emploi d'un manifest.

  9. #29
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ Droïde Système7,

    Ahhhh oki, je pensais que ça exemptait l'emploi d'un manifest.
    En fait, si tu joints un fichier Manifest, tu auras le bouclier sur l'icône de ton application et automatiquement avec le doubleclick tu lances cette application avec les droits Administrateurs.

    Mais si tu ne joints pas de fichier Manifest, il suffit alors de lancer ton application avec le click droit et "Executer en tant qu'Administrateur".

    Cela fonctionne dans les deux cas.

    J'ai testé sur deux pc différents sous Seven 32 et 64bits.

    @+,

    Cincap

  10. #30
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Hello Cincap,

    Intéressante cette discussion

    Oui mais alors si j'ai bien compris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
       Wow64DisableWow64FsRedirection: TWow64DisableWow64FsRedirection;
    ...
    Si tu n'avais pas codé de la sorte, ça aurait fonctionné impec sous 32, mais pas sous 64 bits ?

    @+

  11. #31
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ Droïde Système7, salut, en fait, j'ai testé une fois l'application finie avec la fonction en place sur un autre PC supposé fonctionné en 32bits.

    Donc je ne suis pas certain que cela aurait fonctionné sur ce pc sans cette fonction en tenant compte de cette info.

    Petite info de mon coté.
    Pour les système en 64bits tout ce qui est placé dans C:\Windows\System32\oobe\info\backgrounds\ n'est pas visible...

    mais est déplacé dans C:\Windows\SysWOW64\oobe\info\backgrounds
    On dirai un lien symbolique, mais ce n'est pas un lien symbolique....

    D'ou l'utilité de cette fonction qui crée une redirection en soit.

    Quant à l'accès à la base de registre "clé HKLM" même en tant qu'Administrateur ce n'est pas évident.

    J'ai aussi constaté qu'avec un click droit sur l'icône de l'application, puis choisir "propriétés" puis l'onglet "compatibilité" en dessous on peut checker sur "Niveau de privilège"

    @+,

    Cincap

  12. #32
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Re Cincap,

    [...] Pour les système en 64bits tout ce qui est placé dans C:\Windows\System32\oobe\info\backgrounds\ n'est pas visible...

    mais est déplacé dans C:\Windows\SysWOW64\oobe\info\backgrounds [...]
    N'est-ce pas l'équivalent de la virtualisation à la sauce Vista 32 ça ?

    Autrement dit, le système refuse tes ajouts en sa forteresse de \System32\ et les place ailleurs en les virtualisant au passage.

    Tout le monde y gagne :
    - Ces ajouts répondent au chemin en question (quoique... )
    - Tout fonctionne convenablement

    @+

  13. #33
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ Droïde Système7, en effet, sauf que maintenant, ma photo se copie bien dans le répertoire "C:\Windows\System32\oobe\info\backgrounds\" et surtout me permet de renommer, deleter ect.... grace à la fonction.

    @+,

    Cincap

  14. #34
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Rusé le Cincap


  15. #35
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Hello,

    Je sais que le souci est résolu, mais :

    Citation Envoyé par Droïde Système7 Voir le message
    Avais-tu tenté sous DeleteFile(...) ?
    Pardon de m'auto-citer, mais avais-tu également tenté de tester sous :

    Windows.DeleteFile ?

    @+

  16. #36
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    Bonsoir à toutes et à tous,

    @ Droïde Système7, bien entendu, sans succès sur Seven 64bits, par contre sur Seven 32bits et Vista, Windows.delete.file() ou delete.file() cela fonctionnait.

    Sur Seven 64bits, tu n'as pas directement accès au dossier "Windows\System32".

    Au cas ou tu aurais une info pour passer un fichier *.cmd ou *.bat afin d'accéder avec Delphi à la base de registre, fais moi un signe.

    N.B qu'en tant qu'administrateur, tu sais y accéder en répondant aux messages d'alertes.

    @+,

    Cincap

  17. #37
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Hello Cincap

    Très intéressantes tes infos, merci.

    Au cas ou tu aurais une info pour passer un fichier *.cmd ou *.bat afin d'accéder avec Delphi à la base de registre, fais moi un signe.
    Baaaa le plus efficace serait déjà que tu créer un autre thread bien distinct

    Tu pourras dire si tu souhaites seulement lire ou les deux. Quoique ta question peut être prise sous différents jours ; ou bien simplement lancer la commande RegEdit.exe sous Dos ?

    @+

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/06/2007, 15h27
  2. [ORA-00157] J'ai effacé tous les fichiers de données
    Par sniperseb dans le forum Oracle
    Réponses: 14
    Dernier message: 02/02/2006, 11h15
  3. [Configuration] problème pour forcer le téléchargement d'un fichier
    Par All Bran dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 02/01/2006, 16h23
  4. [HTML] forcer l'enregistrement d'un fichier
    Par krfa1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 28/11/2005, 23h58
  5. [VB6] Ecrire/Modifier/Effacer ds un fichier text-4 Chs/Lg
    Par Jonathan_Korvitch dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 24/12/2002, 18h54

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