Bonjour,

Me revoilà, cela fait quelques semaines que je n'avais pas de question pour vous !

J'ai récupéré un code sur un autre forum pour créer une Msgbox personnalisé, or ce code ne fonctionne pas sur le 64bits, j'ai essayé de chercher sur les différents forums et ainsi faire par moi-même mais sans succès. Je demande donc votre aide.

Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#If Win64 Then
    Private Declare PtrSafe Function SetWindowsHookEx& Lib "USER32" Alias "SetWindowsHookExA" _
        (ByVal idHook&, ByVal lpfn&, ByVal hmod&, ByVal dwThreadId&)
    Private Declare PtrSafe Function GetCurrentThreadId& Lib "kernel32" ()
    Private Declare PtrSafe Function CallNextHookEx& Lib "USER32" _
            (ByVal hHook&, ByVal CodeNo&, ByVal wParam&, ByVal lParam&)
    Private Declare PtrSafe Function GetWindow& Lib "USER32" (ByVal hWnd&, ByVal wCmd&)
    Private Declare PtrSafe Function SetWindowText& Lib "USER32" Alias "SetWindowTextA" _
            (ByVal hWnd&, ByVal lpString$)
    Private Declare PtrSafe Function UnhookWindowsHookEx& Lib "USER32" (ByVal hHook&)
    Private msgHook&
    Private TitreBtn$(1 To 2)
#Else
    Private Declare Function SetWindowsHookEx& Lib "USER32" Alias "SetWindowsHookExA" _
        (ByVal idHook&, ByVal lpfn&, ByVal hmod&, ByVal dwThreadId&)
    Private Declare Function GetCurrentThreadId& Lib "kernel32" ()
    Private Declare Function CallNextHookEx& Lib "USER32" _
            (ByVal hHook&, ByVal CodeNo&, ByVal wParam&, ByVal lParam&)
    Private Declare Function GetWindow& Lib "USER32" (ByVal hWnd&, ByVal wCmd&)
    Private Declare Function SetWindowText& Lib "USER32" Alias "SetWindowTextA" _
            (ByVal hWnd&, ByVal lpString$)
    Private Declare Function UnhookWindowsHookEx& Lib "USER32" (ByVal hHook&)
    Private msgHook&
    Private TitreBtn$(1 To 2)
#End If
 
Function MsgBoxPerso(Prompt$, Optional Title$, Optional Icon&, Optional Caption1$ = "Oui", _
    Optional Caption2$ = "Non", Optional Cancel As Boolean = False) As Byte
Dim Rep%, hInstance&
    TitreBtn(1) = Caption1
    TitreBtn(2) = Caption2
    msgHook = SetWindowsHookEx(5, AddressOf CaptionBoutons, hInstance, GetCurrentThreadId())
    Rep = MsgBox(Prompt, Icon + IIf(Cancel, vbYesNoCancel, vbYesNo), Title)
    MsgBoxPerso = Application.Max(Rep - 5, 0)
    Erase TitreBtn
End Function
 
Function CaptionBoutons&(ByVal nCode&, ByVal wParam&, ByVal lParam&)
Dim hWndChild&
  If nCode < 0 Then
    CaptionBoutons = CallNextHookEx(msgHook, nCode, wParam, lParam)
    Exit Function
  End If
  If nCode = 5 Then
    hWndChild = GetWindow(wParam, 5)
    Call SetWindowText(hWndChild, TitreBtn(1))
    hWndChild = GetWindow(hWndChild, 2)
    Call SetWindowText(hWndChild, TitreBtn(2))
    UnhookWindowsHookEx msgHook
  End If
  CaptionBoutons = False
End Function
Merci par avance pour le temps que vous m'accorderez.

Bonne journée.

Antoine.