0/5 (3 avis)
Snippet vu 16 056 fois - Téléchargée 32 fois
#Region "Copyright" '************************************************************************ '* Auteur * Proviste / Coq * '* Date Création * 07/12/04 * '* Derniere Modification * 25/12/04 * '************************************************************************ '* * * '* Module * clsHwndInfos * '* * * '* Description * Operation et information sur les hwnd * '* * * '* * * '************************************************************************ #End Region #Region "Imports" '-_-' Imports System.Runtime.InteropServices #End Region Public Class clsHwndInfo #Region " Declaration" #Region " Enum Window Style :o" Private Enum enWindowStyles WS_BORDER = &H800000 WS_CAPTION = &HC00000 WS_CHILD = &H40000000 WS_CLIPCHILDREN = &H2000000 WS_CLIPSIBLINGS = &H4000000 WS_DISABLED = &H8000000 WS_DLGFRAME = &H400000 WS_EX_ACCEPTFILES = &H10& WS_EX_DLGMODALFRAME = &H1& WS_EX_NOPARENTNOTIFY = &H4& WS_EX_TOPMOST = &H8& WS_EX_TRANSPARENT = &H20& WS_EX_TOOLWINDOW = &H80& WS_GROUP = &H20000 WS_HSCROLL = &H100000 WS_MAXIMIZE = &H1000000 WS_MAXIMIZEBOX = &H10000 WS_MINIMIZE = &H20000000 WS_MINIMIZEBOX = &H20000 WS_OVERLAPPED = &H0& WS_POPUP = &H80000000 WS_SYSMENU = &H80000 WS_TABSTOP = &H10000 WS_THICKFRAME = &H40000 WS_VISIBLE = &H10000000 WS_VSCROLL = &H200000 '\\ New from 95/NT4 onwards WS_EX_MDICHILD = &H40 WS_EX_WINDOWEDGE = &H100 WS_EX_CLIENTEDGE = &H200 WS_EX_CONTEXTHELP = &H400 WS_EX_RIGHT = &H1000 WS_EX_LEFT = &H0 WS_EX_RTLREADING = &H2000 WS_EX_LTRREADING = &H0 WS_EX_LEFTSCROLLBAR = &H4000 WS_EX_RIGHTSCROLLBAR = &H0 WS_EX_CONTROLPARENT = &H10000 WS_EX_STATICEDGE = &H20000 WS_EX_APPWINDOW = &H40000 WS_EX_OVERLAPPEDWINDOW = (WS_EX_WINDOWEDGE Or WS_EX_CLIENTEDGE) WS_EX_PALETTEWINDOW = (WS_EX_WINDOWEDGE Or _ WS_EX_TOOLWINDOW Or WS_EX_TOPMOST) End Enum #End Region #Region " GetWindowLong Diverses Declaration" <DllImport("user32.dll", CharSet:=CharSet.Ansi, EntryPoint:="GetWindowLong")> _ Private Shared Function GetWindowLong32(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Integer End Function <DllImport("user32.dll", CharSet:=CharSet.Ansi, EntryPoint:="GetWindowLong")> _ Private Shared Function GetWindowLongPtr(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As IntPtr End Function <DllImport("user32.dll", CharSet:=CharSet.Ansi, EntryPoint:="GetWindowLong")> _ Private Shared Function GetWindowLong64(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Long End Function #End Region #Region " GetClassLong Diverses Declaration" <DllImport("user32.dll", CharSet:=CharSet.Ansi, EntryPoint:="GetClassLong", SetLastError:=True)> _ Private Shared Function GetClassLong32(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Integer End Function <DllImport("user32.dll", CharSet:=CharSet.Ansi, EntryPoint:="GetClassLong", SetLastError:=True)> _ Private Shared Function GetClassLongPtr(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As IntPtr End Function <DllImport("user32.dll", CharSet:=CharSet.Ansi, EntryPoint:="GetClassLong", SetLastError:=True)> _ Private Shared Function GetClassLong64(ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Long End Function #End Region <DllImport("user32.dll", CharSet:=CharSet.Ansi, EntryPoint:="SendMessage")> _ Private Shared Function SendMessagePtr(ByVal hwnd As IntPtr, _ ByVal wMsg As Int32, _ ByVal wParam As Integer, _ ByVal lParam As Integer) As IntPtr End Function '-sendmessage Private Declare Function SendMessage _ Lib "user32" _ Alias "SendMessageA" _ (ByVal hwnd As IntPtr, _ ByVal wMsg As Int32, _ ByVal wParam As Integer, _ ByVal lParam As System.Text.StringBuilder) As Integer Private Declare Function SendMessage _ Lib "user32" _ Alias "SendMessageA" _ (ByVal hwnd As IntPtr, _ ByVal wMsg As Int32, _ ByVal wParam As Integer, _ ByVal lParam As Integer) As Integer Private Const WM_SETTEXT = &HC Private Const WM_GETTEXT = &HD Private Const WM_GETTEXTLENGTH = &HE Private Const WM_SETICON = &H80 Private Const WM_GETICON = &H7F Private Const ICON_SMALL = 0 Private Const ICON_BIG = 1 Private Const Icon_BIG_XP = 2 Private Enum enGetWindowLong GWL_EXSTYLE = (-20) GWL_HINSTANCE = (-6) GWL_HWNDPARENT = (-8) GWL_ID = (-12) GWL_STYLE = (-16) GWL_USERDATA = (-21) GWL_WNDPROC = (-4) End Enum Private Enum enGetWindowLongPtr GCLP_MENUNAME = (-8) GCLP_HBRBACKGROUND = (-10) GCLP_HCURSOR = (-12) GCLP_HICON = (-14) GCLP_HMODULE = (-16) GCLP_WNDPROC = (-24) GCLP_HICONSM = (-34) End Enum Private Const GCL_CBCLSEXTRA = -20 Private Const GCL_CBWNDEXTRA = -18 Private Const GCL_HCURSOR = -12 Private Const GCL_HICON = -14 Private Const GCL_HMODULE = -16 Private Const GCL_MENUNAME = -8 Private Const GCL_STYLE = -26 Private Const GCL_WNDPROC = -24 Private Const GCL_HICONSM = -34 Private myHwndPtr As IntPtr #End Region #Region " Procédures" #Region " Publiques" ''' ----------------------------------------------------------------------------- ''' <summary> ''' Crée une nouvelle instance de la classe. ''' </summary> ''' <param name="hwndptr">Hwndptr qui sera traité</param> ''' <remarks> ''' </remarks> ''' <history> ''' Proviste 28/12/2004 Created ''' </history> ''' ----------------------------------------------------------------------------- Public Sub New(ByVal hwndptr As IntPtr) NewInst(hwndptr) End Sub ''' ----------------------------------------------------------------------------- ''' <summary> ''' Crée une nouvelle instance de la classe ''' </summary> ''' <param name="hwnd"></param> ''' <remarks> ''' </remarks> ''' <history> ''' Proviste 28/12/2004 Created ''' </history> ''' ----------------------------------------------------------------------------- Public Sub New(ByVal hwnd As Long) NewInst(New IntPtr(hwnd)) End Sub #End Region #Region " Privées" Private Sub NewInst(ByVal hwndptr As IntPtr) myHwndPtr = hwndptr End Sub #End Region #End Region #Region " Property" ''' ----------------------------------------------------------------------------- ''' <summary> ''' Cette propriété renvoie ou définie le texte associé à un hwnd. ''' </summary> ''' <value>Valeur de type string</value> ''' <remarks> ''' </remarks> ''' <history> ''' Proviste 28/12/2004 Created ''' </history> ''' ----------------------------------------------------------------------------- Public Property WindowText() As String Get Dim wdsTxtBuilt As System.Text.StringBuilder Dim wdsTxtLength As Integer wdsTxtLength = SendMessage(myHwndPtr, WM_GETTEXTLENGTH, 0, 0) + 1 wdsTxtBuilt = New System.text.StringBuilder(Chr(0), wdsTxtLength) SendMessage(myHwndPtr, WM_GETTEXT, wdsTxtLength, wdsTxtBuilt) Return wdsTxtBuilt.ToString End Get Set(ByVal Value As String) SendMessage(myHwndPtr, WM_SETTEXT, Value.Length, New System.Text.StringBuilder(Value)) End Set End Property ''' ----------------------------------------------------------------------------- ''' <summary> ''' Retourne une valeur booléene pour savoir si l'objet associée au hwnd ( à priori une feuille ) est affichée dans la barre des tâche. ''' </summary> ''' <value>True : la form associée au hwnd passé en paramètre est affichée dans la barre des tâches</value> ''' <remarks> ''' </remarks> ''' <history> ''' Proviste 01/12/2005 Created ''' </history> ''' ----------------------------------------------------------------------------- Public ReadOnly Property ShownInTaskBar() As Boolean Get If myHwndPtr.Size = 8 Then 'win64 Dim wStyles As Long wStyles = GetWindowLong64(myHwndPtr, enGetWindowLong.GWL_STYLE) If (wStyles And enWindowStyles.WS_VISIBLE) = enWindowStyles.WS_VISIBLE Then Dim wStylesEx As Long wStylesEx = GetWindowLong32(myHwndPtr, enGetWindowLong.GWL_EXSTYLE) If (wStylesEx And enWindowStyles.WS_EX_TOOLWINDOW) = enWindowStyles.WS_EX_TOOLWINDOW Then Return False Else Return ((wStyles And enWindowStyles.WS_EX_APPWINDOW) = enWindowStyles.WS_EX_APPWINDOW) OrElse _ ((wStyles And enWindowStyles.WS_POPUP) = enWindowStyles.WS_POPUP) End If Else Return False End If Else Dim wStyles As Integer wStyles = GetWindowLong32(myHwndPtr, enGetWindowLong.GWL_STYLE) If (wStyles And enWindowStyles.WS_VISIBLE) = enWindowStyles.WS_VISIBLE Then Dim wStylesEx As Integer wStylesEx = GetWindowLong32(myHwndPtr, enGetWindowLong.GWL_EXSTYLE) If (wStylesEx And enWindowStyles.WS_EX_TOOLWINDOW) = enWindowStyles.WS_EX_TOOLWINDOW Then Return False Else Return ((wStyles And enWindowStyles.WS_EX_APPWINDOW) = enWindowStyles.WS_EX_APPWINDOW) OrElse _ ((wStyles And enWindowStyles.WS_POPUP) = enWindowStyles.WS_POPUP) End If Else Return False End If End If End Get End Property ''' ----------------------------------------------------------------------------- ''' <summary> ''' Retourne une valeur booléene pour savoir si l'objet associé au hwnd est visible ( indépendement du fait qu'il soit caché ou non ) ''' </summary> ''' <value>Renvoie True si l'objet est visible</value> ''' <remarks> ''' </remarks> ''' <history> ''' Proviste 01/12/2005 Created ''' </history> ''' ----------------------------------------------------------------------------- Public ReadOnly Property Visible() As Boolean Get If myHwndPtr.Size = 8 Then 'win64 Return ((GetWindowLong64(myHwndPtr, enGetWindowLong.GWL_EXSTYLE) And enWindowStyles.WS_VISIBLE) = enWindowStyles.WS_VISIBLE) Else Return ((GetWindowLong32(myHwndPtr, enGetWindowLong.GWL_EXSTYLE) And enWindowStyles.WS_VISIBLE) = enWindowStyles.WS_VISIBLE) End If End Get End Property ''' ----------------------------------------------------------------------------- ''' <summary> ''' Renvoie ou définie le handle de l'icone associé à la fenetre ''' </summary> ''' <value></value> ''' <remarks> ''' </remarks> ''' <history> ''' Proviste 01/12/2005 Created ''' </history> ''' ----------------------------------------------------------------------------- Public ReadOnly Property hIcon() As IntPtr Get Dim hIcn As IntPtr hIcn = SendMessagePtr(myHwndPtr, WM_GETICON, ICON_BIG, 0) If hIcn.ToString = "0" Then Return GetClassLongPtr(myHwndPtr, GCL_HICON) Else Return hIcn End If End Get ' Set(ByVal Value As IntPtr) ' 'MsgBox(SetClassLong(myHwndPtr, GCL_HICON, Value)) ' End Set End Property ''' ----------------------------------------------------------------------------- ''' <summary> ''' Renvoie ou définie le handle de l'icone 16*16 associé à la fenetre ''' </summary> ''' <value></value> ''' <remarks> ''' </remarks> ''' <history> ''' Proviste 01/12/2005 Created ''' </history> ''' ----------------------------------------------------------------------------- Public ReadOnly Property hIconSmall() As IntPtr Get Dim hIcn As IntPtr hIcn = SendMessagePtr(myHwndPtr, WM_GETICON, ICON_SMALL, 0) If hIcn.Equals(IntPtr.Zero) Then Return GetClassLongPtr(myHwndPtr, GCL_HICONSM) Else Return hIcn End If End Get ' Set(ByVal Value As IntPtr) ' ' End Set End Property #End Region End Class
14 juil. 2009 à 20:26
4 nov. 2005 à 00:28
NETWedge@Hotmail.com
4 avril 2005 à 17:17
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.