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 :

[D6][Windows 11 64 bits] Copier une photo dans le dossier Windows sans être ddministrateur


Sujet :

Delphi

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 423
    Points : 1 326
    Points
    1 326
    Par défaut [D6][Windows 11 64 bits] Copier une photo dans le dossier Windows sans être ddministrateur
    Bonjour à toutes et à tous,

    Quelqu'un connait t'il l'astuce pour copier une photo dans le dossier Windows sans Manifest et sans click droit en Administrateur.

    En fait c'est pour l'image de fond de l'écran qui doit se trouver dans le dossier Windows à moins que elle peut être dans n'importe quel autre dossier ?

    En Administrateur cela fonctionne mais j'obtiens la boite pour le choix.

    Merci d'avance.

    @+,

    cincap

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Utilise plutôt SystemParametersInfo SPI_SETDESKWALLPAPER et lit : https://www.developpez.net/forums/d2...ecran-windows/
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 423
    Points : 1 326
    Points
    1 326
    Par défaut
    @ ShaiLeTroll, merci de ta suggestion, dans une autre application j'utilise ce que tu me conseilles mais dans celle avec le hook pour afficher un calendrier sur le bureau j'utilise une autre façon.

    Je choisis la photo, je crée une clé dans le registre puis à l'ouverture de l'application j'affiche le calendrier sur le bureau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
     PapierPeint := o_GetPathWinFolders(CSIDL_WINDOWS)+ '\MonPapierPeint.bmp';
     
     Lecturewallpaper;
    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 TMonHookCalendrier.LectureWallpaper;
    Begin
       With TRegistry.Create(KEY_ALL_ACCESS OR KEY_WOW64_64KEY) Do
       Try
          RootKey:=HKEY_CURRENT_USER;
          If OpenKey('Control Panel\Desktop',False) Then
          Begin
            If ValueExists('Wallpaper') Then
            FWallpaper := ReadString('Wallpaper') Else
            FWallpaper := '';
            CloseKey;
         End;
       Finally
         Free;
       End;
    End;
    J'ai essayé une autre façon mais sans succès.



    @+,

    cincap

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Pour créer une sorte de Widget sur le bureau, tu peux aussi dessiner dessus directement au lieu de changer l'image de fond.
    Même, faire une fenêtre transparente où tu te débrouilles pour qu'elle se restaure même en cas de Win+D, est à étudier.

    Faudrait regarder d'ailleurs comment développer un vrai Widget


    EDIT : tiens essaye ça, ça dessine sur le bureau, l'astuce c'est de combiner ces deux codes
    Tu récupères le contenu du bureau, tu dessines sur cet extrait et tu remets ça à l'écran, le plus difficile c'est de trouver le bon moment, avec les Hooks pour choper les messages de Paint du bureau et des fenêtres qui sont par dessus ta zone de calendrier.

    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 TFrmWindowsRegions.BtnDrawOnDesktopClick(Sender: TObject);
    var
      hDesktopWindow: HWND;
      hDesktopWindowDC: HDC;
      hSolidBrush: HBRUSH;
    begin
      // GetDesktopWindow() fourni le Handle du Bureau
      // GetWindowDC(...) si tu lui fourni le Handle du Bureau, tu obtiens une sorte de Canvas pour dessiner dessus
      // DrawFrameControl(...) tu lui fourni ton Canvas, et ça devrait simuler le dessin d'une fenêtre ...
      // ReleaseDC(...) Comme d'habitude, on laisse la place propre ...
     
      hDesktopWindow := GetDesktopWindow();
      hDesktopWindowDC := GetWindowDC(HDesktopWindow);
      if hDesktopWindowDC > 0 then
      begin
        hSolidBrush := CreateSolidBrush($00FF0000);
        FrameRect (hDesktopWindowDC, Rect(0, 0, 100, 100), hSolidBrush);
        DeleteObject(hSolidBrush);
     
        DrawFrameControl(hDesktopWindowDC, Rect(10, 10, 90, 90), DFC_BUTTON, 0);
        ReleaseDC(hDesktopWindow, hDesktopWindowDC);
      end;
    end;
    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
    procedure TFrmWindowsRegions.PaintBoxDesktopPaint(Sender: TObject);
    var
      hDesktopWindow: HWND;
      hDesktopWindowDC: HDC;
      hWindowDC: HDC;
    begin
      // GetDesktopWindow() fourni le Handle du Bureau
      // GetWindowDC(...) si tu lui fourni le Handle du Bureau, tu obtiens une sorte de Canvas pour dessiner dessus
      // DrawFrameControl(...) tu lui fourni ton Canvas, et ça devrait simuler le dessin d'une fenêtre ...
      // ReleaseDC(...) Comme d'habitude, on laisse la place propre ...
     
      hDesktopWindow := GetDesktopWindow();
      hDesktopWindowDC := GetWindowDC(HDesktopWindow);
      if hDesktopWindowDC > 0 then
      begin
        BitBlt(PaintBoxDesktop.Canvas.Handle, 0, 0, PaintBoxDesktop.Width, PaintBoxDesktop.Height, hDesktopWindowDC, 0, 0, SRCCOPY);
     
        ReleaseDC(hDesktopWindow, hDesktopWindowDC);
      end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 423
    Points : 1 326
    Points
    1 326
    Par défaut
    @ ShaiLeTroll, merci pour ta suggestion.

    En testant j'ai remarqué que mon problème pouvait être résolut simplement en modifiant le chemin de la sauvegarde.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     PapierPeint :=  'C:\MonPapierPeint.bmp' ; //o_GetPathWinFolders(CSIDL_WINDOWS)+ '\MonPapierPeint.bmp';
     
     Lecturewallpaper;
    Je peus donc fermer ce topic.

    Encore merci.

    @+,

    cincap

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/01/2019, 21h23
  2. Déplacer une photo dans un dossier
    Par DavT27 dans le forum Langage
    Réponses: 5
    Dernier message: 08/06/2017, 17h01
  3. Réponses: 17
    Dernier message: 18/05/2010, 16h38
  4. Insérer une photo dans un dossier
    Par kamnouz dans le forum Langage
    Réponses: 2
    Dernier message: 19/01/2009, 11h33
  5. Copier une image dans un dossier
    Par L'aigle de Carthage dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 02/05/2007, 19h54

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