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

API, COM et SDKs Delphi Discussion :

[SHELL API] Liste des Icônes dans le casier (et position)..


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 45
    Points : 41
    Points
    41
    Par défaut [SHELL API] Liste des Icônes dans le casier (et position)..
    Bonjour à tous.

    Je cherche à obtenir la liste des Icônes (Handles, et Names) inscrites dans le Casier (Tray), ainsi que leur position relatives à l'écran, afin de pouvoir faire surgir à partir d'elles une bulle d'aide (Hint ou ToolTip) de ma composition.

    Je sais déjà créer et faire apparaitre ces Bulles n'importe où sur l'écran, ce qu'il me manque ce sont les coordonnées des Icones du Casier (j'ai les coordonnées du Casier, mais cela ne suffit pas), ainsi que leurs nom (ou celui des Application qu'elles représentrent), ou le Handle de l'Application qui leur est rattaché.

    J'ai déjà essayé de Lister les fenètres enfant du Casier, sans succès hélas.

    D'avance merci pour vos suggestions.

    Amicalement,

    ARDILLER.

  2. #2
    Membre expert
    Avatar de Bestiol
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 515
    Points : 3 894
    Points
    3 894
    Par défaut
    Première 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
    'renvoie le Hwnd du tray
    Public Function GethWndTray() As Long
    Dim hwnd As Long, hwnd2 As Long 'handle
    'on descend dans la hiérarchie parent-enfant
    hwnd = FindWindow("Shell_TrayWnd", vbNullString)
    hwnd = FindWindowEx(hwnd, ByVal 0&, "TrayNotifyWnd", vbNullString)
    hwnd2 = FindWindowEx(hwnd, ByVal 0&, "SysPager", vbNullString) 'uniquement XP
    If (hwnd2 = 0) Then hwnd2 = hwnd ' ME,2000
    'jusqu'à obtenir le handle de la barre d'outils faisant de tray
    hwnd2 = FindWindowEx(hwnd2, ByVal 0&, "ToolbarWindow32", vbNullString) ' ME, 2000, XP...
    If (hwnd2 = 0) Then
        GethWndTray = hwnd ' 95,98
    Else
        GethWndTray = hwnd2 ' ME, 2000, XP...
    End If
    End Function
    En Delphi :

    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
    //REnvoie le Handle du Systray
    function GethWndTray: THandle;
    var
      Hdl, Hdl2: THandle;
    begin
      Hdl  := 0;
      Hdl2 := 0;
     
      //On descend dans la hiérarchie parent-enfant
      Hdl  := FindWindow('Shell_TrayWnd', nil);
      Hdl  := FindWindowEx(Hdl, 0, 'TrayNotifyWnd', nil); 
      Hdl2 := FindWindowEx(Hdl, 0, 'SysPager', nil); //Uniquement XP
     
      If Hdl2 = 0 then
        Result := Hdl   //Windows 9x
      else
        Result := Hdl2; //Windows ME, 2000, XP ...
    end;

    J'aimerais bien t'en faire plus mais c'est assez long et il y a des trucs à chercher... La déclaration de la deuxième fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function GetTrayIcons() As Tray()
    montre qu'elle renvoie un "Array Of Tray", et Tray n'est pas déclaré dans le code. Ca doit être une structure définie quelque part dans windows. Regarde dans le SDK Windows à TB_GETBUTTON tu trouveras certainement quelque chose.

    Quelques ptits trucs pour t'aider à finir la traduction :
    -Comme tu l'as remarqué, Dim sert à déclarer des variables. Mais on n'est pas obligé de déclarer en VB, alors fais bien attention ! Toutefois l'auteur du code a l'air d'avoir fait la chose sérieusement ^^

    -Les parenthèses remplacent les crochets d'un tableau. Donc ceci :
    ça donne en Delphi la déclaration suivante :
    L'accès à la xième valeur du tableau se fait par Icons(x).

    -La comparaison ('=' en Delphi) et l'assignation (':=') ne sont pas différenciés au niveau de VB.

    -doit correspondre à :
    -Attention à la syntaxe pour les appels de fonctions : en VB on n'est pas obligé de mettre les paramètres entre parenthèses

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim Icons(nIcons - 1)
    doit correspondre à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetLength(Icons, nIcons - 1);
    -Les boucles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do ... Loop While Condition
    En Delphi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do ... Until not Condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i = X to Y ... Next
    En Delphi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i := X to Y do begin ... end;
    -Ne t'occupe pas des "ByVal" dans les passages de paramètres, ça indique juste un passage par valeur plutôt que par référence (ByRef). C'est la différence entre les passages const et var dans les paramètres d'une fonction en Delphi.

    -Ne t'occupe pas non plus des "&" qui terminent parfois certains nombres. C'est juste de l'optimisation de compilation.

    Voilà je pense qu'avec tout ça tu devrais pouvoir te débrouiller !

    Si t'as des questions hésite pas ! ^^

    Bonne prog' et bon courage !
    Bestiol.
    Mea est trop forte, elle flotte : mea coule pas !

    Basically this boot sector (Win95) code is 32 bit extension for a 16 bit patch to an 8 bit boot sector originally coded for a 4 bit microprocessor, written by a 2 bit company, that can't stand 1 bit of competition.

    olance.developpez.com
    Servez-vous, profitez, abusez de la FAQ Delphi !!

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 45
    Points : 41
    Points
    41
    Par défaut Pas encore terminé....
    Merci de tes conseils, Bestiol.

    Voici ce a quoi je suis imparfaitement parvenu, jusqu'à lors.

    Les zones de Codes reprennent le code original en VB indiqué en commentaire en fin de chaque ligne.

    Déclarations
    Elles sont necessaires pour avoir accès aux fonction de l'API décrites dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    uses ShellApi, PsAPI, CommCtrl {type : TTBButton};
     
    type
      TTBButtons = array of TTBButton;
    1 ere fonction. Elle a pour but de récupérer le Handle du Casier :
    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
     
    //Ma traduction en Delphi (merci à Bestiol)         // Le source en VB Original
    //Renvoie le Handle du Systray                      // 'renvoie le Hwnd du tray
    function GethWndTray: THandle;                      // Public Function GethWndTray() As Long
    var   Hdl, Hdl2: THandle;                           // Dim hwnd As Long, hwnd2 As Long 'handle
    begin
    Hdl  := 0;                                          // 'on descend dans la hiérarchie parent-enfant
    Hdl2 := 0;                                          // hwnd = FindWindow("Shell_TrayWnd", vbNullString)
                                                        // hwnd = FindWindowEx(hwnd, ByVal 0&, 
                                                        //        "TrayNotifyWnd", vbNullString)
    //On descend dans la hiérarchie parent-enfant       // hwnd2 = FindWindowEx(hwnd, ByVal 0&, "SysPager",
                                                        //         vbNullString) 'uniquement XP
    Hdl  := FindWindow('Shell_TrayWnd', nil);           // If (hwnd2 = 0) Then hwnd2 = hwnd ' ME,2000
    Hdl  := FindWindowEx(Hdl, 0, 'TrayNotifyWnd', nil); // jusqu'à obtenir le handle de la barre d'outils 
                                                        // faisant office de tray
    //Uniquement XP                                     // hwnd2 = FindWindowEx(hwnd2, ByVal 0&, 
                                                        //  "ToolbarWindow32", vbNullString) ' ME, 2000, XP
    Hdl2 := FindWindowEx(Hdl, 0, 'SysPager', nil);
     
    If Hdl2 = 0 then                                    // If (hwnd2 = 0) Then
      Result := Hdl   //Windows 9x                      // GethWndTray = hwnd ' 95,98
    else                                                // Else
      Result := Hdl2; //Windows ME, 2000, XP ...        // GethWndTray = hwnd2 ' ME, 2000, XP...
                                                        // End If
    end;                                                // End Function
    Elle fonctionne, et renvoie un Handle non-nul (donc sûrement valide). Et elle correspond au tutoriel sur la Barre des Tâches proposé dans ce Site.

    La seconde procedure touche une partie qui m'est inconnue (je ne suis qu'un amateur), mais doit être implémenté avant la troisième (car un appel à cette procedure est effectué dans celle-ci) :
    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
    35
    36
     
                                                        // 'renvoie le nom du processu du PID spécifié
                                                        // 'sous NT/2000/XP..., il faut utliser PSAPI
    procedure GetProcessNameFromPID_NT                  // '==========================================
              (pid: Cardinal; out lpName: string) ;     // 'IN pid : identifiant du processus
    var hP : Thandle ; //handle du processus            // 'OUT lpName : nom et chemin du processus
          hMod : Thandle ; //handle de l'exe            // Public Sub GetProcessNameFromPID_NT(pid As Long, 
                                                        //                                  lpName As String)
          ret : Cardinal ;                              // Dim hP As Long 'handle du processus
    begin                                               
    //on demande un handle du processus                 
    hP := OpenProcess                                   // hP = OpenProcess(PROCESS_QUERY_INFORMATION Or 
                                                        //               PROCESS_VM_READ, False, pid)
          (PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
          False, pid) ;                                 
    //si succès                                         // If (hP) Then
    If hP<>0 Then                                       // Dim hMod As Long 'handle de l'exe
      begin                                             // Dim ret As Long
      //on demande le handle de l'exe de ce processus   
      EnumProcessModules(hP, PDWord(hMod), 4, ret) ;    // EnumProcessModules hP, hMod, 4&, ret
      //si succès                                       
      If hMod<> 0 Then                                  // If (hMod) Then
        begin
        //on alloue de l'espace mémoire                 
        SetLength(lpName, 255) ;//???                   // lpName = Space(255)
        //on demande le nom et le chemin de l'exe       
        GetModuleFileNameExA(hP, hMod,                  // GetModuleFileNameExA hP, hMod, lpName, 255
            PAnsiChar(lpName), 255) ;                   
        //on supprime le NULL                           
        SetLength(lpName, Length(lpName)-1); //???      // lpName = Left$(lpName, InStr(lpName, 
                                                        //                                   vbNullChar) - 1)
        End ;                                           // End If
      //on ferme de handle du processus                 
      CloseHandle(hP) ;                                 // CloseHandle hP
      end ;                                             // End If
    end ;                                               // End Sub
    La troisième récupère un ensemble d'enregistrement contenant les données des icônes situées dans le Casier (en fait encapsulé dans le composant SysPager de celui-ci, qui est -je crois- l'ancètre du Contrôle TPageScroller de Delphi) :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
                                               // 'renvoie la liste des icones présentes dans le tray
                                               // 'comme les infos se trouvent dans Explorer.exe et non dans
                                               //  notre processus
                                               // 'on doit allouée de la mémoire dans Explorer.exe pour 
                                               //  pouvoir fournir un pointeur valide vers un TBBUTTON à 
                                               //  SendMessage
    function GetTrayIcons : TTBButtons;        // 'cette fonction ne fonctionne que sous NT/2000/XP (car 
                                               //  VirtualAllocEx n'est pas présent sous 9x)
    Var    hProc : THandle ;                   // Public Function GetTrayIcons() As Tray()
           hTray : THandle ;                   // Dim hProc As Long 'handle de Explorer.exe
           pid : Integer ;                     // Dim hTray As Long 'hWnd du tray
           ptrVM : Integer ;                   // Dim pid As Long 'identifiant de Explorer.exe
           ret : Cardinal ;                    // Dim ptrVM As Long 'pointeur vers la zone mémoire pour
                                               //  TBBUTTON
           ptrTip : Integer;                   // Dim ret As Long 'valeur de retour
           tbut : TTBButton;                   // Dim ptrTip As Long 'pointeur vers une chaîne Unicode 
                                               //  (Tip ou Path)
           TChar : Integer ;                   // Dim tbut As TBBUTTON 'les infos sur le bouton
           x : Integer ;                       // Dim TChar As Integer 'contient un caractère unicode
           nIcons : Integer ;                  // Dim x As Long 'compteur
           Icons : TTBButtons ;                // Dim nIcons As Long 'nombre d'icones dans le tray
           O : Cardinal; // ajouté & à revoir  // Dim Icons() As Tray 'tableau temporaire des icones dans 
                                               //  le tray
    begin
    try
    //on demande le hWnd du tray                            
    hTray := GethWndTray;                                   // hTray = GethWndTray
    //si erreur                                             
    If hTray = 0 Then Exit ;                                // If hTray = 0 Then Exit Function
    //on demande l'identifiant de Explorer.exe              
    GetWindowThreadProcessId(hTray, @pid) ;                 // GetWindowThreadProcessId hTray, pid
    //on demande un handle de Explorer.exe                  
    hProc := OpenProcess(PROCESS_VM_READ, False, pid) ;     // hProc = OpenProcess(PROCESS_VM, 0, pid)
    // ou PROCESS_VM_OPERATION : PROCESS_VM n'existe pas    
     
    //si erreur                                             
    If hProc = -1 Then                                      // If hProc = -1 Then Err.Raise &H80070000 
      begin                                                 //                  & Err.LastDllError
      Showmessage('Impossible d''obtenir Explorer.exe.') ;  
      Exit ;                                                
      End ;
    //on alloue de la mémoire pour TBBUTTON                 
    //ptrVM := VirtualAllocEx(hProc, @O, SizeOf(tbut),      // ptrVM = VirtualAllocEx(hProc, ByVal 0&, 
    //         MEM_COMMIT, PAGE_READWRITE);                 //   Len(tbut), MEM_COMMIT, PAGE_READWRITE)
     
    //si erreur                                             
    If ptrVM = 0 Then                                       // If ptrVM = 0 Then Err.Raise &H80070000 
      begin                                                 //                  & Err.LastDllError  
      Showmessage('Impossible d''allouer de la mémoire');   
      Exit ;                                                
      End ;
    //on demande le nombre de boutons dans le tray         
    nIcons := SendMessage(hTray, TB_BUTTONCOUNT, 0, 0) ;    // nIcons = SendMessage(hTray, TB_BUTTONCOUNT, 
                                                            //          ByVal 0&, ByVal 0&)
    //on redimensionne le tableau au nombre d'icones       
    SetLength(Icons, nIcons) ;                              // ReDim Icons(nIcons - 1)
     
    //pour chaque icone                               
    For x := 0 To nIcons -1 do                        // For x = 0 To nIcons - 1
      begin                                           
      //on demande les infos sur le bouton            
      SendMessage(hTray, TB_GETBUTTON, x, ptrVM) ;    // SendMessage hTray, TB_GETBUTTON, x, ByVal ptrVM
      //on lit les infos sur le bouton                
      ReadProcessMemory(hProc, @ptrVM, @tbut,         // ReadProcessMemory hProc, ByVal ptrVM, tbut, 
             Sizeof(tbut), ret) ;                     //                   Len(tbut), ret
      //on extrait les données utiles                 
      Icons[x].dwData := tbut.dwData;                 // Icons(x).dwData = tbut.dwData
      Icons[x].fsState := tbut.fsState;               // Icons(x).fsState = tbut.fsState
      Icons[x].fsStyle := tbut.fsStyle;               // Icons(x).fsStyle = tbut.fsStyle
      Icons[x].iBitmap := tbut.iBitmap;               // Icons(x).iBitmap = tbut.iBitmap
      Icons[x].idCommand := tbut.idCommand;           // Icons(x).idCommand = tbut.idCommand
      Icons[x].iString := tbut.iString;               // Icons(x).iString = tbut.iString
      //le Tip                                        
      ptrTip := tbut.iString;                         // ptrTip = tbut.iString
      repeat                                              // Do
        //on lit chaque caractère unicode               
        ReadProcessMemory(hProc, @ptrTip, @TChar, 2, ret);// ReadProcessMemory hProc, ByVal ptrTip, 
                                                          //                   TChar, 2&, ret
        //Icons[x].sTip := Icons[x].sTip & ChrW$(TChar)   // Icons(x).sTip = Icons(x).sTip & ChrW$(TChar)
     
        // pas de sTip dans la structure TBBUTTON :
       { typedef struct _TBBUTTON  \\ tbb
        int iBitmap;
        int idCommand;
        BYTE fsState;
        BYTE fsStyle;
        DWORD dwData;
        int iString;
         TBBUTTON, NEAR* PTBBUTTON, FAR* LPTBBUTTON;
        typedef const TBBUTTON FAR* LPCTBBUTTON; }
     
        ptrTip := ptrTip + 2;                                  // ptrTip = ptrTip + 2
        //jusqu'au NULL                                        
      until TChar = 0;                                         // Loop While Tchar
     
      //on lit les données sur l'icone (Path...)               
      ReadProcessMemory(hProc, @tbut.dwData, @Icons[x], 36, ret); // ReadProcessMemory hProc, 
                                                               //  ByVal tbut.dwData, Icons(x).hwnd, 
                                                               //  36&, ret
      //on demande le PID du processus                         
      GetWindowThreadProcessId(pid, @Icons[x]);                // GetWindowThreadProcessId Icons(x).hwnd, pid
      //on lit le chemin et le nom de l'application propriétaire  
    GetProcessNameFromPID_NT(pid, Icons(x).uniPath             // GetProcessNameFromPID_NT pid, 
                                                               //            Icons(x).uniPath
      end ;                                                    // Next
    // 'on renvoie le tout                                           
    finally 
    Result := Icons;                                    // GetTrayIcons = Icons
    //Cleanup:  // ???                                  // Cleanup:
    //on libère la mémoire allouée                      
    VirtualFreeEx(hProc, @ptrVM, 0, MEM_RELEASE);       // VirtualFreeEx hProc, ByVal ptrVM, 0&, MEM_RELEASE
    //on ferme le handle de Explorer.exe                
    CloseHandle(hProc);                                 // CloseHandle hProc
    end;
    end ;
    Certaines instructions me sont inconnues :
    Il est aussi fait référence à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        //Icons[x].sTip := Icons[x].sTip & ChrW$(TChar)
    "Icons(x).sTip " est inconnu dans la classe TTBButton.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //ptrVM := VirtualAllocEx(hProc, @O, SizeOf(tbut),      
    //         MEM_COMMIT, PAGE_READWRITE);
    Ces deux parties ne me disent vraiment rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        SetLength(lpName, 255) ;//???                   // lpName = Space(255)
    et...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        SetLength(lpName, Length(lpName)-1); //???      // lpName = Left$(lpName, InStr(lpName, vbNullChar) - 1)
    Je ne suis pas pointu en pointeurs (tiens, c'est drôle !), et j'ignore si mes transtypages et autres "@" ajouté devant les variables dans mes procedures correctes.

    Voilà. ce serait un effet de votre bonté de m'aider à compléter ces procédures.

    Amicalement,

    ARDILLER.

  4. #4
    Membre expert
    Avatar de Bestiol
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 515
    Points : 3 894
    Points
    3 894
    Par défaut
    'lut !

    Alors pour ce qui est du SetLength correspondant au Space(255) je pense que c'est bon...
    Pour ta seconde hésitation avec lpName = Left$( ... ) j'avoue que je ne sais pas vraiment non plus, il faudrait demander à quelqu'un qui fait du VB !

    (non contrairement à ce qu'on peut penser, je n'en fais pas ! J'ai quitté le côté obscur il y a un moment ! )

    Mais en fait il y a quelque chose qui me "tracasse" :
    Tu dis ne pas trouver le champ sTip dans le type TTBButton, mais en regardant le code VB on trouve d'autres champs utilisés qui n'y sont pas :
    hwnd et uniPath

    Le problème, c'est que si on regarde dans la MSDN, ces champs n'y sont pas mentionnés non plus !
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/toolbar/structures/tbbutton.asp

    A mon avis, il doit y avoir une autre structure quelque part, qui ait été mise à jour !

    Je te tiens au courant si je trouve quelque chose !

    Bonne prog' !
    Bestiol.
    Mea est trop forte, elle flotte : mea coule pas !

    Basically this boot sector (Win95) code is 32 bit extension for a 16 bit patch to an 8 bit boot sector originally coded for a 4 bit microprocessor, written by a 2 bit company, that can't stand 1 bit of competition.

    olance.developpez.com
    Servez-vous, profitez, abusez de la FAQ Delphi !!

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 45
    Points : 41
    Points
    41
    Par défaut Epilogue...
    Merci de tes conseils avisés, Bestiol.

    Afin d'en avoir le coeur net, je me suis inscrit sur le Site en question (CodeS-SourceS pour ne pas le nommer -c'est gratuit-).

    Après quelques recherches, il s'avère que les sources sont aussi disponibles en Delphi (par le même auteur), et effectivement, il manque des déclarations de types (TTray, en particulier) qui se trouvent sur d'autres unités qui peuvent être téléchargées (ce que j'ai fait, MAIS il faut être inscrit). Ainsi qu'une DLL du même auteur dont certaines fonctions sont appelées par les unités en question.

    Un éxécutable de démo est fourni également, qui fonctionne parfaitement, il ennumère les Icônes inscrites dans le Casier, et donne tout un tas d'indications sur celles-ci, comme l'adresse de l'application qui les a installé, leur Status (Caché ou visibles, ainsi que d'autres dont je n'avais jamais entendu parler). On peut même lancer, depuis la TListView utiliser pour les présenter, le menu surgissant associé à chacune d'elles.

    la Dll en question est necessaire pour obtenir les données voulues, et le source de celle-ci est apparemment disponible en C ou C++ sur le même site.

    Pour ceux qui sont interressé par le sujet, voici donc le résultat de mes investigations :

    Suivez le Lien indiqué dans le post original plus haut, inscrivez-vous à ce site, et recherchez les autres sources posées par l'auteur en question.

    Pour des raison évidentes de place, tout d'abord, de respect ensuite pour l'auteur, je ne posterais pas ici les sources en question.

    Merci de vos conseils, et de votre disponibilité à tous (surtout Bestiol).

    Amicalement,

    ARDILLER.

    PS : Je mets le tag Résolu ici.
    Je délesterais ce Post dans un mois.

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

Discussions similaires

  1. Liste des communes dans la fenêtre de l'API Geoportail
    Par daniel.m dans le forum IGN API Géoportail
    Réponses: 2
    Dernier message: 28/01/2014, 15h44
  2. [AC-2010] Faire apparaître des icônes dans une liste déroulante
    Par Sami Xite dans le forum IHM
    Réponses: 1
    Dernier message: 28/09/2010, 19h09
  3. Liste des formulaires dans ListeBox
    Par gbuxo dans le forum Access
    Réponses: 2
    Dernier message: 08/04/2006, 11h23
  4. Réponses: 6
    Dernier message: 16/03/2006, 18h32
  5. Chargement de la liste des imprimantes dans TPrinterDialog
    Par bernie.noel dans le forum Composants VCL
    Réponses: 6
    Dernier message: 22/02/2006, 16h57

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