Api pour dégriser la croix fermer de n'importe quelle fenêtre (la réactiver en fait) / et puis aussi pour la griser

Contenu du snippet

J'avais trouvé pas mal de sources pour griser la croix fermer mais aucune pour la dégriser. Donc j'ai essayé pas mal de combinaisons (bien 50 au moins) avec différentes API et puis ça a enfin marché ! Ouf ! (en plus avec un truc tout con j'avai les boules lol)

donc moi j'ai testé sur les fenêtres que j'avai grisé auparavant, ça marche et puis aussi sur Nero en pleine gravure, et ça marche aussi !
Donc dites moi si chez vous ça marche pas mais normalement aucun problème.

MadMatt

Source / Exemple :


' Je met un petit exemple avant (tout con mais bon) :
Private Sub form_load ()
DesactiveCroix Me.Hwnd  ' Désactive la croix de la fenêtre actuelle
ActiveCroix Me.Hwnd       ' Réactive
' Je précise qu'il faut envoyer dans la fonction le handle de la fenêtre à manipuler.
' Pour trouver le handle d'une form d'un projet Visual Basic il faut utiliser ".Hwnd" après le nom de la form
End Sub

' METTEZ TOUT çA DANS UN MODULE ET UTILISEZ LES FONCTIONS
' Déclare les API
' pour dégriser ou griser un item du menu sytème d'une fenêtre
Declare Function EnableMenuItem Lib "user32" (ByVal hMenu As Long, ByVal wIDEnableItem As Long, ByVal wEnable As Long) As Long
Public Declare Function GetSystemMenu Lib "user32" (ByVal HWnd As Long, ByVal bRevert As Long) As Long
Public Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Public Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Public Declare Function DrawMenuBar Lib "user32" (ByVal HWnd As Long) As Long
Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Public Const MF_BYPOSITION = &H400&
Public Const MF_REMOVE = &H1000&
Public Const SC_CLOSE = &HF060

' Fonctions :
' Réactive la croix fermer
Public Function ActiveCroix(ByVal HWnd As Long) ' il faut lui préciser le handle de la fenêtre
    On Error Resume Next
    ' ici je dégrise grâce à true qui remet le menu à zéro
    hMenu = GetSystemMenu(HWnd, True)
    DrawMenuBar HWnd
End Function

' Désactive la croix fermer
Public Function DesactiveCroix(ByVal HWnd As Long)
     On Error Resume Next
     Dim hMenu As Long
     hMenu = GetSystemMenu(HWnd, 0)
     RemoveMenu hMenu, SC_CLOSE, MF_BYCOMMAND
     DrawMenuBar HWnd
End Function

Conclusion :


voilà, à vous les commentaires et la note !
;-)

PS : pour la fonction qui désactive la croix elle vient du site mais je l'ai mise pour pouvoir tester chez vous.

A voir également

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.