Problème de compréhension de l'API Windows

Résolu
Lyc@n Messages postés 219 Date d'inscription dimanche 24 octobre 2010 Statut Membre Dernière intervention 22 février 2014 - 30 sept. 2013 à 19:38
Lyc@n Messages postés 219 Date d'inscription dimanche 24 octobre 2010 Statut Membre Dernière intervention 22 février 2014 - 1 oct. 2013 à 00:59
Bonjour tout le monde! Voilà, pour un projet j'ai décidé d'apprendre à me servir de l'API de Windows avec VB.net, je n'ai jamais eu à m'en servir avant et je galère énormement! Je ne comprend pas les codes! Par exemple j'ai tanté de lister les fenêtres ouvertes dans Windows avec EnumWindows pour remplir une listbox, et je voudrais que la fenêtre s'affiche quand on double clic dessus dans la listbox, j'ai fais des recherches et trouvé un code, j'ai tenté de comprendre le code mais j'ai vraiment du mal! Pourtant je ne débute pas dans le VB.net (je suis pas pro non plus). J'ai pourtant lus plusieurs tutoriels mais j'ai du mal à tout cerner, par exemple, ce "hWnd", je ne comprend pas à quoi il correspond vraiment... Juste pour vous montrer voilà le code que j'ai trouvé:

Private windowList As New ArrayList
    Private errMessage As String

    Public Delegate Function MyDelegateCallBack(ByVal hwnd As Integer, ByVal lParam As Integer) As Boolean
    Declare Function EnumWindows Lib "user32" (ByVal x As MyDelegateCallBack, ByVal y As Integer) As Integer

    Declare Auto Function GetClassName Lib "user32" _
        (ByVal hWnd As IntPtr, _
        ByVal lpClassName As System.Text.StringBuilder, _
        ByVal nMaxCount As Integer) As Integer

    Declare Auto Function GetWindowText Lib "user32" _
       (ByVal hWnd As IntPtr, _
       ByVal lpClassName As System.Text.StringBuilder, _
       ByVal nMaxCount As Integer) As Integer

    Private Function EnumWindowProc(ByVal hwnd As Integer, ByVal lParam As Integer) As Boolean

        'working vars
        Dim sTitle As New StringBuilder(255)
        Dim sClass As New StringBuilder(255)

        Try

            Call GetClassName(hwnd, sClass, 255)
            Call GetWindowText(hwnd, sTitle, 255)

            windowList.Add(sClass.ToString & ", " & hwnd & ", " & sTitle.ToString)
        Catch ex As Exception
            errMessage = ex.Message
            EnumWindowProc = False
            Exit Function
        End Try

        EnumWindowProc = True

    End Function

    Public Function getWindowList(ByRef wList As ArrayList, Optional ByVal errorMessage As String = "") As Boolean

        windowList.Clear()

        Try
            Dim del As MyDelegateCallBack
            del = New MyDelegateCallBack(AddressOf EnumWindowProc)
            EnumWindows(del, 0)
            getWindowList = True
        Catch ex As Exception
            getWindowList = False
            errorMessage = errMessage
            Exit Function
        End Try

        wList.Clear()
        wList = windowList

    End Function


Je ne demande pas à ce qu'on me prémache un code pour que je le colle bêtement dans mon projet (j'ai horreur de ce type de comportement!), ce que je voudrais c'est juste comprendre le fonctionnement de l'API de Windows qui m'échappe complétement! J'ai peut être l'air bête mais je suis très motivé et j'ai vraiment envis d'apprendre à m'en servir parce que je sais que ça pourrait me débloquer pleins de possibilités. Quelqu'un aurait il le courage de m'expliquer brévement ce code pour me donner une idée ou de me donner le lien d'un tutoriel clair sur l'API de Windows? Merci beaucoup!

3 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 30/09/2013 à 19:50
Bonjour,

Ta question serait donc, pour résumer : "comprendre le fonctionnement de l'API de Windows qui m'échappe complétement" !
Et la réponse est : elle est composée de librairies dynamiques (.dll) hébergeant, chacune d'entre elles, des fonctions utilisables selon certaines modalités (déclarations, passages de paramètres, etc...).
Aucune de ces fonctions ne peut être utilisée valablement sans avoir d'abord été "bûchée" (Sites de Microsoft). Elles utilisent toutes des paramètres, des constantes et des drapeaux (flags) dont la connaissance est essentielle, connaissance sans laquelle on ne peut les utiliser.
Aucune fonction d'aucune librairie de l'Api de Windows n'est semblable à l'autre. Chacune doit être décortiquée.
2
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 sept. 2013 à 21:11
En aucun cas, cependant, on ne saurait "comprendre" l'utilisation d'une fonction de l'Api de Windows en se contentant de copier/coller ce que l'on a trouvé sur le Web.
Un bon exemple : le code que tu montres. Il est écrit pour VB.Net alors que tu dis (la section dans laquelle tu as ouvert cette discussion) travailler sous VB6.
Il se trouve que le typage des paramètres et des valeurs retournées par une fonction n'est pas le même dans un langage et dans l'autre ! (tu as copié du code utilisant, depuis VB.Net et non depuis VB6 des fonctions de l'Api de Windows ! Pas bon de chez pas bon.
0
Lyc@n Messages postés 219 Date d'inscription dimanche 24 octobre 2010 Statut Membre Dernière intervention 22 février 2014
30 sept. 2013 à 21:12
D'accord, j'avais déjà compris le principe de .dll, mais tu m'a un peu éclairer avec le terme "flags", je vois un peu plus la chose, mais par exemple, j'ai trouvé ce code pour afficher une boite de dialogue simple, juste pour m'entrainer:

    Declare Auto Function Mbox Lib "user32.dll" Alias "MessageBox" (ByVal hWnd As Integer, ByVal txt As String, ByVal caption As String, ByVal Typ As Integer) As Integer

    Const MB_ICONQUESTION = &H20L
    Const MB_YESNO = &H4
    Const IDYES = 6
    Const IDNO = 7


Mais je ne comprend pas ça:

Const MB_ICONQUESTION = &H20L
    Const MB_YESNO = &H4
    Const IDYES = 6
    Const IDNO = 7


Je déclare des constantes, jusqu'ici tout est normal, mais qu'est ce que ce &H20L, ce &H4, ce 6 et ce 7? Comment doit je savoir qu'il faut que j'assigne ces valeurs à ces constantes? J'ai bien installé le Microsoft SDK Windows 7 ou j'ai vaguement compris qu'il y avait de la documentation la dessus mais je n'ai rien trouvé. De même, j'ai entendus parlé du visualisateur d'API mais je n'ai rien trouvé. Peut tu m'expliquer comment ca marche en gros ou bien un lien ou je pourrait trouver de la doc? En tout cas merci beaucoup!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 sept. 2013 à 21:27
Ma réponse est dans mon tout premier message : étude non de vb, mais de la fonction que tu utilises. Cette étude commence ici : http://msdn.microsoft.com/en-us/library/windows/desktop/ms645505%28v=vs.85%29.aspx et n'a rien à voir avec Visual Basic !
Pour le reste (les "viewers" existant) : Plus rien à voir avec la présente discussion.
PS : frappe donc AllAPI sur Google.
0
Lyc@n Messages postés 219 Date d'inscription dimanche 24 octobre 2010 Statut Membre Dernière intervention 22 février 2014
1 oct. 2013 à 00:59
Merci beaucoup! Je vais regarder tout ça! Désolé mais c'est vraiment la toute première fois que je touche aux API de Windows et je n'ai pas envie de copier-coller des codes sans rien comprendre. Merci!
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
30 sept. 2013 à 22:03
Hello,
J'ai déplacé ta demande dans la section VB.Net.
Dis-moi si cela ne convient pas.
0
Rejoignez-nous