Lyc@n
Messages postés219Date d'inscriptiondimanche 24 octobre 2010StatutMembreDernière intervention22 février 2014
-
30 sept. 2013 à 19:38
Lyc@n
Messages postés219Date d'inscriptiondimanche 24 octobre 2010StatutMembreDernière intervention22 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!
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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 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.
Lyc@n
Messages postés219Date d'inscriptiondimanche 24 octobre 2010StatutMembreDernière intervention22 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
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!
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 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.
Lyc@n
Messages postés219Date d'inscriptiondimanche 24 octobre 2010StatutMembreDernière intervention22 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!
30 sept. 2013 à 21:11
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.