Page 1 sur 1
[..] Désactiver un bouton
Posté : jeu. 14 mai 2009 10:45
par Ramzi
Bonjour tout le monde,
ma question et la suivante: Est-ce qu'il est possible à l'aide d'un scripte de faire désactiver ou griser les deux boutons (Réduire et Agrandir) d'une fenêtre.
Merci
bonne journée
Re: [..] Désactiver un bouton
Posté : jeu. 14 mai 2009 13:31
par Iste
Une fenetre crée par ton script ? oui
Faut regarder dans les style (apres un rapide coup doeil j'ai pas retrouvé le style en question)
Par contre,pour une fenetre autre. Ca va etre dur, voir peut etre impossible
Il faudrait peut etre penser a un script qui restore la fenetre automatiquement
Re: [..] Désactiver un bouton
Posté : jeu. 14 mai 2009 14:08
par Ramzi
Bonjour Iste,
cette fenêtre qui m'intéresse n'est pas une fenêtre d'un scripte!!!!!!!!!!!!
et pour la solution "restaure la fenêtre" tu peut me donner le scripte qui fait cette opération.
merci
Re: [..] Désactiver un bouton
Posté : jeu. 14 mai 2009 15:21
par sylvanie
Bonjour,
normalement un appel à la fonction EnableMenuItem de user32.dll permet ceci. En pratique ça marche bien avec la croixde fermeture et les menu "classiques" présents dans une barre, mais il semble que les boutons de réductions et agrandissement sont un peu rétissants.
Par contre la fonction RemoveMenu de la même dll neutralise bien les actions de ces boutons.
Voici un petit exple qui agit sur scite lui même si on le lance depuis cet éditeur bien-sûr ...
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiMenu.au3>
Opt('GUICloseOnEsc', 0)
;Global Const $SC_CLOSE = 0xF060
;Global Const $SC_MINIMIZE = 0xF020
;Global Const $MF_GRAYED = 0x00000001
;Global Const $MF_DISABLED = 0x02
;Const $SC_MAXIMIZE = 0xF030
;Const $SC_MOVE = 0xF010
;Const $SC_RESTORE = 0xF120
;Const $SC_SIZE = 0xF000
;Const $MF_BYCOMMAND = 0
;Const $MF_BYPOSITION = 0x400
$hGUI = WinGetHandle("")
$hMenu=_GUICtrlMenu_GetSystemMenu($hGUI,0)
ConsoleWrite($hMenu&@CRLF)
DllCall('user32.dll', 'int', 'RemoveMenu', 'hwnd', $hMenu, 'uint', $SC_MINIMIZE, 'uint', 0)
DllCall('user32.dll', 'int', 'RemoveMenu', 'hwnd', $hMenu, 'uint', $SC_MAXIMIZE, 'uint', 0)
DllCall('user32.dll', 'int', 'RemoveMenu', 'hwnd', $hMenu, 'uint', $SC_RESTORE, 'uint', 0)
DllCall('user32.dll', 'int', 'RemoveMenu', 'hwnd', $hMenu, 'uint', $SC_SIZE, 'uint', 0)
DllCall('user32.dll', 'int', 'RemoveMenu', 'hwnd', $hMenu, 'uint', $SC_MOVE, 'uint', 0)
DllCall('user32.dll', 'int', 'EnableMenuItem', 'hwnd', $hMenu, 'uint', $SC_MINIMIZE, 'uint', $MF_GRAYED)
DllCall('user32.dll', 'int', 'EnableMenuItem', 'hwnd', $hMenu, 'uint', $SC_MAXIMIZE, 'uint', $MF_GRAYED)
DllCall('user32.dll', 'int', 'EnableMenuItem', 'hwnd', $hMenu, 'uint', $SC_RESTORE, 'uint', $MF_GRAYED)
DllCall('user32.dll', 'int', 'EnableMenuItem', 'hwnd', $hMenu, 'uint', $SC_CLOSE, 'uint', $MF_GRAYED) ;< --- c'est le seul qui marche
ConsoleWrite(@error&@CRLF)
Pas de panique, une fermeture et une réouverture de l'appli remets bien sûr les boutons fonctionnels...
Re: [..] Désactiver un bouton
Posté : jeu. 14 mai 2009 16:53
par Ramzi
Bonjour,
merci sylvanie pour ton aide, mais le probléme c'est que j'ai rein compris
en plus l'éxecution de scripte donne des erreur
Re: [..] Désactiver un bouton
Posté : jeu. 14 mai 2009 17:50
par sylvanie
Pour l'explication en plus simplifiée :
- il existe un appel (EnableMenuItem) à une dll qui permet entre autre de neutraliser des contrôles (boutons/menus) pour tout type de fenêtre (ou presque)
- pas de chance ça ne marche pas pour les boutons réduire/restaurer comme tu le souhaites
- mais il existe une autre fonction (RemoveMenu), qui marche, permettant de neutraliser l'action qui se cache dérière un bouton/menu. Du coups le bouton est là, mais il ne fait plus rien
pour l'erreur, il faudrait en dire un peu plus ... un petit copier coller du message d'erreur serait bienvenu
Re: [..] Désactiver un bouton
Posté : jeu. 14 mai 2009 19:15
par Tlem
J'ai trouvé une solution sur le forum Anglais.
Le script d'origine à été créé par SmOke_N.
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
ShellExecute("notepad.exe")
WinWait("Sans titre - Bloc-notes")
$hGUI = WinGetHandle("Sans titre - Bloc-notes")
_WinRemoveMinMaxBox($hGUI)
Func _WinRemoveMinMaxBox($h_wnd)
Local Const $GWL__STYLE = -16
Local Const $WS__MAXIMIZEBOX = 0x0010000
Local Const $WS__MINIMIZEBOX = 0x0020000
If IsString($h_wnd) Then $h_wnd = WinGetHandle($h_wnd)
Local $a_old_style = DllCall("user32.dll", "int", "GetWindowLong", "hwnd", $h_wnd, "int", $GWL__STYLE)
If @error Then Return SetError(1, 0, 0)
Local $i_style = 0
If BitAND($a_old_style[0], $WS__MAXIMIZEBOX) Then $i_style = BitOR($i_style, $WS__MAXIMIZEBOX)
If BitAND($a_old_style[0], $WS__MINIMIZEBOX) Then $i_style = BitOR($i_style, $WS__MINIMIZEBOX)
If Not $i_style Then Return $a_old_style[0]
Local $a_set_window = DllCall("user32.dll", "int", "SetWindowLong", "hwnd", $h_wnd, "int", $GWL__STYLE, "long", $a_old_style[0] - $i_style)
If @error Then Return SetError(2, 0, 0)
; Cheap way to refresh the title bar
WinSetTitle($h_wnd, "", WinGetTitle($h_wnd))
Return $a_set_window[0]
EndFunc
Re: [..] Désactiver un bouton
Posté : jeu. 14 mai 2009 19:33
par sylvanie
ouah ! Elle est très bien cette méthode ^^
Re: [..] Désactiver un bouton
Posté : ven. 15 mai 2009 10:34
par Ramzi
Bonjour,
Merci beaucoup Tlem et sylvanie, vraiment ce dernier code et très intéressent
Bonne journée
A bientôt
Re: [..] Désactiver un bouton
Posté : ven. 15 mai 2009 22:19
par Tlem
@Ramzi
Puisque votre question est résolue, vous pouvez ré-éditer votre premier message pour mettre la balise qui va bien [R].

Re: [..] Désactiver un bouton
Posté : sam. 16 mai 2009 23:27
par Ramzi
Bonjour,
mais avec des fenêtre du Bureau à distance ce code ne marche pas,et je ce pas pourquoi !!!!!!!!!!!!!
Bon week-end
Re: [..] Désactiver un bouton
Posté : sam. 16 mai 2009 23:50
par Tlem
Sans doute parce qu'ils ne sont pas dans la barre du menu système.
Vous parlez bien des boutons dans la barre centrale en haut ?
Re: [..] Désactiver un bouton
Posté : lun. 18 mai 2009 10:42
par Ramzi
Bonjour,
oui je parle des bouton
réduire et agrandir de cette fenêtre
y a t'il une solution à ce problème???
Merci d'avance
bonne journée
Re: [..] Désactiver un bouton
Posté : lun. 18 mai 2009 20:23
par Tlem
Il me semble que vous pouvez paramétrer l'affichage ou non de cette barre.
Par contre, comme ce n'est pas une barre de fenêtre classique, je doute que vous puissiez faire quelque chose pour masquer les fonctions à l'aide d'un programme externe.