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

Scripts/Batch Discussion :

GUI : Question "imagelocation" à partir d'une .DLL [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2020
    Messages : 3
    Par défaut GUI : Question "imagelocation" à partir d'une .DLL
    Bonjour a tous!

    Je programme une application windows en Powershell et j'ai un défi au niveau de la classe "system.Windows.Forms.PictureBox".
    J'ai beau lire la docu de Microsoft je ne trouve pas de réponse donc j'espère que la communauté aura une réponse

    Je désire afficher une image dans un picturebox provenant de la DLL: C:\Windows\System32\shell32.dll plutôt que de convertir l'image en Base64 puis inclure le code a l'intérieur de mon Form(ceci fait gonfler la taille du programme).
    Donc ma question est: Est-ce qu'il y a un moyen d'utiliser une image inclu dans une DLL et l'afficher dans un PictureBox?
    Actuellement je n'ai pas d'erreur, mais rien n'est visible sur mon Form.


    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Add-Type -AssemblyName System.Windows.Forms
     
    $PictureBox1                      = New-Object system.Windows.Forms.PictureBox
    $PictureBox1.width             = 60
    $PictureBox1.height            = 30
    $PictureBox1.location          = New-Object System.Drawing.Point(71,81)
    $PictureBox1.imageLocation = "C:\Windows\System32\shell32.dll, 27"
    $PictureBox1.SizeMode        = [System.Windows.Forms.PictureBoxSizeMode]::zoom
     
    $Form.controls.AddRange(@($PictureBox1))
    return $form.ShowDialog()
    Images attachées Images attachées  

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Voici

    Code powershell : 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
    $code = @"
    using System;
    using System.Drawing;
    using System.Runtime.InteropServices;
     
    namespace System
    {
        public class IconExtractor
        {
     
         public static Icon Extract(string file, int number, bool largeIcon)
         {
          IntPtr large;
          IntPtr small;
          ExtractIconEx(file, number, out large, out small, 1);
          try
          {
           return Icon.FromHandle(largeIcon ? large : small);
          }
          catch
          {
           return null;
          }
     
         }
         [DllImport("Shell32.dll", EntryPoint = "ExtractIconExW", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
         private static extern int ExtractIconEx(string sFile, int iIndex, out IntPtr piLargeVersion, out IntPtr piSmallVersion, int amountIcons);
     
        }
    }
    "@
     
    Add-Type -TypeDefinition $code -ReferencedAssemblies System.Drawing
    Add-Type -AssemblyName System.Windows.Forms
     
    $Icon = [System.IconExtractor]::Extract("C:\Windows\System32\shell32.dll", 27, $true)
     
    $PictureBox1                      = New-Object system.Windows.Forms.PictureBox
    $PictureBox1.width             = 60
    $PictureBox1.height            = 30
    $PictureBox1.location          = New-Object System.Drawing.Point(71,81)
    $PictureBox1.Image = $Icon
    $PictureBox1.SizeMode        = [System.Windows.Forms.PictureBoxSizeMode]::zoom
     
    $form = New-Object System.Windows.Forms.Form
    $form.Size = New-Object System.Drawing.Size(300,200)
    $form.StartPosition = 'CenterScreen'
     
    $form.controls.AddRange(@($PictureBox1))
    $form.ShowDialog()

    https://superuser.com/questions/1342...a-known-dll-id

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2020
    Messages : 3
    Par défaut
    Wow tout fonctionne!
    Maintenant je suis confronté a un léger problème au niveau de la taille car avec le paramètre a "ZOOM" la taille s'adapte, mais occasionne de la distorsion au niveau de l'image.
    Je désire utiliser la version 16x16, mais les ID sont invalide (plus haut que 326).
    Une idée?

    merci

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Essaie de passer le dernière paramètre à faux. En théorie ça devrait le faire.
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    $Icon = [System.IconExtractor]::Extract("C:\Windows\System32\shell32.dll", 27, $false)


    Discutions intéressante sur les api d'extractions d'icones : https://stackoverflow.com/questions/...extract-icon-o

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Avril 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2020
    Messages : 3
    Par défaut
    Fantastique j'ai fait la modif et tout est nickel!
    Merci


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

Discussions similaires

  1. creer un fichier lib à partir d'une DLL
    Par benoit70 dans le forum MFC
    Réponses: 12
    Dernier message: 28/09/2008, 22h58
  2. Problème lancement excel à partir d'une DLL
    Par irnbru dans le forum MFC
    Réponses: 8
    Dernier message: 03/11/2005, 12h00
  3. Réponses: 2
    Dernier message: 04/10/2005, 11h12
  4. [DLL] utiliser une DLL a partir d' une DLL et un .def
    Par venomelektro dans le forum MFC
    Réponses: 9
    Dernier message: 07/12/2004, 14h01
  5. pb de récup de handle à partir d'une dll
    Par yokito dans le forum Langage
    Réponses: 2
    Dernier message: 20/08/2002, 12h29

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