Hit-Parade .VB Research Center . Compteur
Accueil ~  Code ~  Programmes ~  Api ~  Forum ~  Cours ~  Livres ~  Quiz ~  Annuaire
~ Edito ~
12/03/2006 @ 13:39
Depuis la dernière mise à jour (qui remonte à... oulala plusieurs mois), un petit ménage de printemps s'impose. Ca tombe bien, c'est presque la période.
Au menu, et progressivement sur les jours à venir, rafraîchissement de plusieurs fonctions et procédures, nouvelles APIs et nouveaux programmes.

~ Rechercher ~

  

~ Annuaire VB ~
 Rechercher un site :
  

~ Partenaires ~

Fonction GetSystemMenu

Declare Function GetSystemMenu Lib "user32" ( _
                 
ByVal hwnd As Long, _
                 ByVal bRevert As Long) As Long
Versions :
. Windows 95/98 : Oui
. Windows NT : A partir de 3.1
. Windows 2000/XP : Oui

Description :
Cette fonction permet de récupérer le handle du menu système d'une fenêtre (celui qui se "cache" derrière l'icône en haut à gauche).
hWnd est le handle de la fenêtre sur laquelle vous désirez travailler.
bRevert accepte comme valeur "Vrai" ou "Faux". En le mettant à "Vrai", cela permet de restaurer le menu système initial, à "Faux", vous récupérez le handle du menu système pour pouvoir le modifier.

Exemple d'utilisation :

' Origine : fred - chapeaux.ronds@wanadoo.fr

' Le code qui suis permet de désactiver les boutons "X", "min", "max".
' Créer un nouveau projet vb et coller le code suivant dans
' "déclaration" puis essayer les trois boutons les uns après les autres
' (pour cela enlever l'apostrophe devant "no_min" et "no_max").

Option Explicit

Private Declare Function
DeleteMenu Lib "user32" (ByVal _
                hMenu
As Long, ByVal nPosition As Long, _
               
ByVal wFlags As Long) As Long
Private Declare Function
GetSystemMenu Lib "user32" (ByVal _
                hwnd
As Long, ByVal bRevert As Long) As Long
Private Declare Function
GetWindowLong Lib "user32" Alias _
                "GetWindowLongA" (
ByVal hwnd As Long, ByVal _
                nIndex
As Long) As Long
Private Declare Function
SetWindowLong Lib "user32" Alias _
                "SetWindowLongA" (
ByVal hwnd As Long, ByVal _
                nIndex
As Long, ByVal dwNewLong As Long) As Long

Private Const
GWL_STYLE = (-16)
Private Const MF_BYCOMMAND = &H0&
Private Const MF_BYPOSITION = &H400
Private Const SC_MINIMIZE = &HF020
Private Const SC_MAXIMIZE = &HF030
Private Const SC_CLOSE = 6
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000

Private Sub no_x()
' Désactiver X
Dim hMenu As Long, k As Long
hMenu = GetSystemMenu(hwnd, False)
k = DeleteMenu(hMenu, SC_CLOSE, MF_BYPOSITION)
End Sub

Private Sub
no_min()
' Désactiver 'minimiser'
Dim hMenu As Long, k As Long
hMenu = GetSystemMenu(hwnd, False)
k = DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND)
k = GetWindowLong(hwnd, GWL_STYLE)
k = k Xor WS_MINIMIZEBOX
SetWindowLong hwnd, GWL_STYLE, k
End Sub

Private Sub
no_max()
' Désactiver 'maximiser'
Dim hMenu As Long, k As Long
hMenu = GetSystemMenu(hwnd, False)
k = DeleteMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND)
k = GetWindowLong(hwnd, GWL_STYLE)
k = k Xor WS_MAXIMIZEBOX
SetWindowLong hwnd, GWL_STYLE, k
End Sub

Private Sub
Form_Load()
no_x
' no_min
' no_max
End Sub

Retour à la liste des API

Visual Basic Research Center - (c) 2000/2002 -  Webmaster : docvb (chez) free (point) fr