OVH Cloud OVH Cloud

Croix de fermeture.

7 réponses
Avatar
Alain CROS
Bonjour.

Je cherche à rétablir le fonctionnement de la croix de fermeture sur une MsgBox.
Si quelqu'un a une piste !

Merci.

Alain CROS.

7 réponses

Avatar
Alain CROS
Bonjour.

Personne ?

C'est vrai que d'habitude, on cherche plutôt à supprimer la croix de fermeture.
J'ai essayé de changer le style de la fenêtre, de restaurer le menu système etc... mais rien n'y fait.
Je suis toujours intéressé par une piste.
Merci d'avance.

Alain CROS.

"Alain CROS" a écrit dans le message de news:
Bonjour.

Je cherche à rétablir le fonctionnement de la croix de fermeture sur une MsgBox.
Si quelqu'un a une piste !

Merci.

Alain CROS.




Avatar
Michel Pierron
Bonsoir Alain;
Une idée comme ça; tu pourrais créer un message avec les boutons OK et
Cancel (OK par défaut) auquel cas la croix de fermeture serait accessible et
masquer le bouton Cancel avant l'affichage dans une procédure de hooking.
MP

"Alain CROS" a écrit dans le message de
news:
Bonjour.

Je cherche à rétablir le fonctionnement de la croix de fermeture sur une
MsgBox.

Si quelqu'un a une piste !

Merci.

Alain CROS.




Avatar
Alain CROS
Bonjour.

Merci Michel.
Ce n'est pas satisfaisant mais je m'en contenterais pour le moment.

Alain CROS.

"Michel Pierron" a écrit dans le message de news:
Bonsoir Alain;
Une idée comme ça; tu pourrais créer un message avec les boutons OK et
Cancel (OK par défaut) auquel cas la croix de fermeture serait accessible et
masquer le bouton Cancel avant l'affichage dans une procédure de hooking.
MP

"Alain CROS" a écrit dans le message de
news:
Bonjour.

Je cherche à rétablir le fonctionnement de la croix de fermeture sur une
MsgBox.

Si quelqu'un a une piste !

Merci.

Alain CROS.








Avatar
Michel Pierron
Bonsoir Alain;
Testé avec XP uniquement:
Option Explicit
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Private Declare Function SetWindowsHookEx& Lib "user32" Alias
"SetWindowsHookExA" _
(ByVal idHook&, ByVal lpfn&, ByVal hmod&, ByVal dwThreadId&)
Private Declare Function UnhookWindowsHookEx& Lib "user32" (ByVal hHook&)
Private Declare Function SetWindowLong& Lib "user32" Alias "SetWindowLongA"
_
(ByVal hWnd&, ByVal nIndex&, ByVal dwNewLong&)
Private Declare Function GetClassName& Lib "user32" Alias "GetClassNameA" _
(ByVal hWnd&, ByVal lpClassName$, ByVal nMaxCount&)
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long _
, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long _
, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Type CWPSTRUCT
lParam As Long
wParam As Long
Message As Long
hWnd As Long
End Type

Private MyHook&

Sub MsgBoxReset()
Const Title As String = "MsgBox personnalisé..."
Const Prompt As String = "Cliquez sur la croix pour quitter !"
MyHook = SetWindowsHookEx(4, AddressOf WndProc, 0, GetCurrentThreadId)
MsgBox Prompt, 0, Title
End Sub

Private Function WndProc&(ByVal nCode&, ByVal wParam&, MyStruct As
CWPSTRUCT)
If Not MyStruct.Message = &H1 Then Exit Function
Dim hWnd&: hWnd = MyStruct.hWnd
If GetWindowClass(hWnd) = "#32770" Then
SetWindowLong hWnd, -16, &H0 Or &H800000 Or &H400000 Or &H80000 Or
&H40000
SetWindowPos hWnd, 0, 0, 0, 0, 0, &H20 Or &H2 Or &H4 Or &H1
End If
UnhookWindowsHookEx MyHook
End Function

Private Function GetWindowClass$(ByVal hWnd&)
Dim tbuf$, ins%
tbuf = String(255, 0)
Call GetClassName(hWnd, tbuf, 256)
ins = InStr(tbuf, Chr(0))
tbuf = IIf(ins, Left(tbuf, ins - 1), tbuf)
GetWindowClass = LCase(tbuf)
End Function

MP

"Alain CROS" a écrit dans le message de
news:
Bonjour.

Merci Michel.
Ce n'est pas satisfaisant mais je m'en contenterais pour le moment.

Alain CROS.

"Michel Pierron" a écrit dans le message de news:


Bonsoir Alain;
Une idée comme ça; tu pourrais créer un message avec les boutons OK et
Cancel (OK par défaut) auquel cas la croix de fermeture serait
accessible et


masquer le bouton Cancel avant l'affichage dans une procédure de
hooking.


MP

"Alain CROS" a écrit dans le message de
news:
Bonjour.

Je cherche à rétablir le fonctionnement de la croix de fermeture sur
une



MsgBox.
Si quelqu'un a une piste !

Merci.

Alain CROS.












Avatar
Alain CROS
Bonjour.

Merci Michel mais ça ne fonctionne pas sur Win98.

Plusieurs fois dans tes messages apparaît une ligne tel que :
SetWindowLong hWnd, -16, &H0 Or &H800000 Or &H400000 Or &H80000 Or &H40000
avec &H0 Or ...
Ce paramètre sert il à forcer quelque chose ou ... ?
Merci encore.

Alain CROS.
Avatar
Michel Pierron
Bonjour Alain;
Désolé, mais je ne peux pas tester actuellement sous Win98.
Les constantes sont les suivantes:
SetWindowLong hWnd, -16, &H0 Or &H800000 Or &H400000 Or &H80000 Or &H40000
GWL_STYLE& = -16
WS_OVERLAPPED = &H0
WS_BORDER = &H800000
WS_DLGFRAME = &H400000
WS_SYSMENU = &H80000
WS_THICKFRAME = &H40000
Pour info: WS_CAPTION = WS_BORDER Or WS_DLGFRAME

La procédure SetWindowPos force la mise à jour de la fenêtre et n'est pas
utile avec XP; en fait, avec XP, il suffit de:
If GetWindowClass(hWnd) = "#32770" Then
SetWindowLong hWnd, -16, GetWindowLong(hWnd, -16) Or &H80000
End If

MP

"Alain CROS" a écrit dans le message de
news:
Bonjour.

Merci Michel mais ça ne fonctionne pas sur Win98.

Plusieurs fois dans tes messages apparaît une ligne tel que :
SetWindowLong hWnd, -16, &H0 Or &H800000 Or &H400000 Or &H80000 Or &H40000
avec &H0 Or ...
Ce paramètre sert il à forcer quelque chose ou ... ?
Merci encore.

Alain CROS.




Avatar
Michel Pierron
Bonsoir Alain;
As-tu essayé de créer le msgbox par API qui donne accès aussi à la croix de
fermeture sous XP.
Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" _
(ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String _
, ByVal wType As Long) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long

Sub MsgBox_OkOnly()
Dim hwnd As Long
hwnd = GetForegroundWindow
MessageBox hwnd, "Cliquez la croix pour test !" _
, Application.Caption, &H0& + &H40&
End Sub

MP

"Alain CROS" a écrit dans le message de
news:
Bonjour.

Merci Michel mais ça ne fonctionne pas sur Win98.

Plusieurs fois dans tes messages apparaît une ligne tel que :
SetWindowLong hWnd, -16, &H0 Or &H800000 Or &H400000 Or &H80000 Or &H40000
avec &H0 Or ...
Ce paramètre sert il à forcer quelque chose ou ... ?
Merci encore.

Alain CROS.