50 lines
2.4 KiB
VB.net
50 lines
2.4 KiB
VB.net
|
|
Imports System.Text
|
|||
|
|
Imports System.Runtime.InteropServices
|
|||
|
|
|
|||
|
|
Public Class clsMsg
|
|||
|
|
Private Shared mLabels() As String '' Desired new labels
|
|||
|
|
Private Shared mLabelIndex As Integer '' Next caption to update
|
|||
|
|
|
|||
|
|
Public Shared Sub PatchMsgBox(ByVal labels() As String)
|
|||
|
|
''--- Updates message box buttons
|
|||
|
|
mLabels = labels
|
|||
|
|
Application.OpenForms(0).BeginInvoke(New FindWindowDelegate(AddressOf FindMsgBox), GetCurrentThreadId())
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Shared Sub FindMsgBox(ByVal tid As Integer)
|
|||
|
|
''--- Enumerate the windows owned by the UI thread
|
|||
|
|
EnumThreadWindows(tid, AddressOf EnumWindow, IntPtr.Zero)
|
|||
|
|
End Sub
|
|||
|
|
|
|||
|
|
Private Shared Function EnumWindow(ByVal hWnd As IntPtr, ByVal lp As IntPtr) As Boolean
|
|||
|
|
''--- Is this the message box?
|
|||
|
|
Dim sb As New StringBuilder(256)
|
|||
|
|
GetClassName(hWnd, sb, sb.Capacity)
|
|||
|
|
If sb.ToString() <> "#32770" Then Return True
|
|||
|
|
''--- Got it, now find the buttons
|
|||
|
|
mLabelIndex = 0
|
|||
|
|
EnumChildWindows(hWnd, AddressOf FindButtons, IntPtr.Zero)
|
|||
|
|
Return False
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
Private Shared Function FindButtons(ByVal hWnd As IntPtr, ByVal lp As IntPtr) As Boolean
|
|||
|
|
Dim sb As New StringBuilder(256)
|
|||
|
|
GetClassName(hWnd, sb, sb.Capacity)
|
|||
|
|
If sb.ToString() = "Button" And mLabelIndex <= UBound(mLabels) Then
|
|||
|
|
''--- Got one, update text
|
|||
|
|
SetWindowText(hWnd, mLabels(mLabelIndex))
|
|||
|
|
mLabelIndex += 1
|
|||
|
|
End If
|
|||
|
|
Return True
|
|||
|
|
End Function
|
|||
|
|
|
|||
|
|
''--- P/Invoke declarations
|
|||
|
|
Private Delegate Sub FindWindowDelegate(ByVal tid As Integer)
|
|||
|
|
Private Delegate Function EnumWindowDelegate(ByVal hWnd As IntPtr, ByVal lp As IntPtr) As Boolean
|
|||
|
|
Private Declare Auto Function EnumThreadWindows Lib "user32.dll" (ByVal tid As Integer, ByVal callback As EnumWindowDelegate, ByVal lp As IntPtr) As Boolean
|
|||
|
|
Private Declare Auto Function EnumChildWindows Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal callback As EnumWindowDelegate, ByVal lp As IntPtr) As Boolean
|
|||
|
|
Private Declare Auto Function GetClassName Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal name As StringBuilder, ByVal maxlen As Integer) As Integer
|
|||
|
|
Private Declare Auto Function GetCurrentThreadId Lib "kernel32.dll" () As Integer
|
|||
|
|
Private Declare Auto Function SetWindowText Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal text As String) As Boolean
|
|||
|
|
End Class
|