Option ExplicitConst MB_DEFBUTTON1 = &H0&
Const MB_DEFBUTTON2 = &H100&
Const MB_DEFBUTTON3 = &H200&
Const MB_ICONASTERISK = &H40&
Const MB_ICONEXCLAMATION = &H30&
Const MB_ICONHAND = &H10&
Const MB_ICONINFORMATION = MB_ICONASTERISK
Const MB_ICONQUESTION = &H20&
Const MB_ICONSTOP = MB_ICONHAND
Const MB_OK = &H0&
Const MB_OKCANCEL = &H1&
Const MB_YESNO = &H4&
Const MB_YESNOCANCEL = &H3&
Const MB_ABORTRETRYIGNORE = &H2&
Const MB_RETRYCANCEL = &H5&
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 FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const BM_CLICK = &HF5
Dim i As Long
Private Sub Command1_Click()
Timer1.Enabled = True
MessageBox Me.hwnd, "this is test", App.Title, MB_OK + MB_ICONEXCLAMATION
Timer1.Enabled = False
i = 0
End SubPrivate Sub Form_Load()
Timer1.Enabled = False
Timer1.Interval = 1000
End SubPrivate Sub Timer1_Timer()i = i + 1
If i >= 10 Then
Dim dlghwnd As Long
Dim buttonhwnd As Long
dlghwnd = FindWindow("#32770", App.Title)
buttonhwnd = GetDlgItem(dlghwnd, 2) '其中的2,用spy++获得
SendMessage buttonhwnd, BM_CLICK, 0&, ByVal 0&
End IfEnd Sub这段代码里面
dlghwnd = FindWindow("#32770", App.Title)
参数#32770是怎么取得,
buttonhwnd = GetDlgItem(dlghwnd, 2) '其中的2,用spy++获得
2用spy++获得,其它msgbox也是2吗
Const MB_DEFBUTTON2 = &H100&
Const MB_DEFBUTTON3 = &H200&
Const MB_ICONASTERISK = &H40&
Const MB_ICONEXCLAMATION = &H30&
Const MB_ICONHAND = &H10&
Const MB_ICONINFORMATION = MB_ICONASTERISK
Const MB_ICONQUESTION = &H20&
Const MB_ICONSTOP = MB_ICONHAND
Const MB_OK = &H0&
Const MB_OKCANCEL = &H1&
Const MB_YESNO = &H4&
Const MB_YESNOCANCEL = &H3&
Const MB_ABORTRETRYIGNORE = &H2&
Const MB_RETRYCANCEL = &H5&
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 FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const BM_CLICK = &HF5
Dim i As Long
Private Sub Command1_Click()
Timer1.Enabled = True
MessageBox Me.hwnd, "this is test", App.Title, MB_OK + MB_ICONEXCLAMATION
Timer1.Enabled = False
i = 0
End SubPrivate Sub Form_Load()
Timer1.Enabled = False
Timer1.Interval = 1000
End SubPrivate Sub Timer1_Timer()i = i + 1
If i >= 10 Then
Dim dlghwnd As Long
Dim buttonhwnd As Long
dlghwnd = FindWindow("#32770", App.Title)
buttonhwnd = GetDlgItem(dlghwnd, 2) '其中的2,用spy++获得
SendMessage buttonhwnd, BM_CLICK, 0&, ByVal 0&
End IfEnd Sub这段代码里面
dlghwnd = FindWindow("#32770", App.Title)
参数#32770是怎么取得,
buttonhwnd = GetDlgItem(dlghwnd, 2) '其中的2,用spy++获得
2用spy++获得,其它msgbox也是2吗
解决方案 »
- 跪求:介绍一下Internet Transfer控件的用法!
- VB简单的问题!请指教!
- 如何动态调整listview得column得宽度
- 讨论!!VB版主daisy8675想封群众的呼声!!!! 强烈抗议!!请群众擦亮自己的眼睛!!!
- 这个问题怎么解决-关于MSHFlexGrid控件的一个简单问题,我不会,各位仁兄请帮帮忙
- 使用Webbrowser控件的submit提交后怎么样可以识别返回的网页中的字符串?
- 我想作个关于损坏的jpg图像修复软件
- 谁有水晶报表8.0的序列号,请告知小弟,不胜感激!
- 给我点建议吧!
- 如何防止窗口在视频窗口上闪烁
- 疑惑:为什么提示找不到动态链接库??????
- 新建一WORD文档!在其上放置1个commandbutton和30个combobox.我想实现运行后点击command!所有的combobox都添加相同的值!怎么实现????
======================
用spy++可以查出来的呀!
Option Explicit
Public Const MAX_PATH As Long = 260&
Public Const API_TRUE As Long = 1&
Public Const API_FALSE As Long = 0&
Public g_hBoldFont As Long
Public Const MSGBOXTEXT As String = "Have you ever seen a standard message box with a different font than all the others on the system?"
Public Const WM_SETFONT As Long = &H30
Public Const NV_CLOSEMSGBOX As Long = &H5000&
Public Const NV_MOVEMSGBOX As Long = &H5001&
Public Const NV_MSGBOXCHNGFONT As Long = &H5002&
Public Const MB_ICONQUESTION As Long = &H20&
Public Const MB_TASKMODAL As Long = &H2000&
Public Const SWP_NOSIZE As Long = &H1&
Public Const SWP_NOZORDER As Long = &H4&
Public Const HWND_TOP As Long = 0& Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Declare Function LockWindowUpdate& Lib "user32" (ByVal hwndLock&)
Public Declare Function GetActiveWindow& Lib "user32" ()
Public Declare Function GetDesktopWindow& Lib "user32" ()
Public Declare Function FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$)
Public Declare Function FindWindowEx& Lib "user32" Alias "FindWindowExA" (ByVal hWndParent&,ByVal hWndChildAfter&, ByVal lpClassName$, ByVal lpWindowName$)
Public Declare Function SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)
Public Declare Function MoveWindow& Lib "user32" (ByVal hWnd&, ByVal x&, ByVal y&, ByVal nWidth&, ByVal nHeight&, ByVal bRepaint&)
Public Declare Function ScreenToClientLong& Lib "user32" Alias "ScreenToClient" (ByVal hWnd&, lpPoint&)
Public Declare Function GetDC& Lib "user32" (ByVal hWnd&)
Public Declare Function ReleaseDC& Lib "user32" (ByVal hWnd&, ByVal hDC&)
Public Const DT_WORDBREAK As Long = &H10&
Public Const DT_CALCRECT As Long = &H400&
Public Const DT_EDITCONTROL As Long = &H2000&
Public Const DT_END_ELLIPSIS As Long = &H8000&
Public Const DT_MODIFYSTRING As Long = &H10000
Public Const DT_PATH_ELLIPSIS As Long = &H4000&
Public Const DT_RTLREADING As Long = &H20000
Public Const DT_WORD_ELLIPSIS As Long = &H40000
Public Declare Function DrawText& Lib "user32" Alias "DrawTextA" (ByVal hDC&, ByVal lpsz$, ByVal cchText&, lpRect As RECT, ByVal dwDTFormat&)
Public Declare Function SetForegroundWindow& Lib "user32" (ByVal hWnd&)
Public Declare Function GetClassName& Lib "user32" Alias "GetClassNameA" (ByVal hWnd&, ByVal lpClassName$, ByVal nMaxCount&)
Public Declare Function GetWindowRect& Lib "user32" (ByVal hWnd&, lpRect As RECT)
Public Declare Function SetWindowPos& Lib "user32" (ByVal hWnd&, ByVal hWndInsertAfter&, ByVal x&, ByVal y&, ByVal cx&, ByVal cy&, ByVal wFlags&)
Public Declare Function MessageBox& Lib "user32" Alias "MessageBoxA" (ByVal hWnd&, ByVal lpText$, ByVal lpCaption$, ByVal wType&)
Public Declare Function SetTimer& Lib "user32" (ByVal hWnd&, ByVal nIDEvent&, ByVal uElapse&, ByVal lpTimerFunc&)
Public Declare Function KillTimer& Lib "user32" (ByVal hWnd&, ByVal nIDEvent&)
Public Sub TimerProc(ByVal hWnd&, ByVal uMsg&, ByVal idEvent&, ByVal dwTime&)
KillTimer hWnd, idEvent
Select Case idEvent
Case NV_CLOSEMSGBOX '<-- we want to close this messagebox after 4 seconds
Dim hMessageBox&
hMessageBox = FindWindow("#32770", "Self Closing Message Box")
If hMessageBox Then
Call SetForegroundWindow(hMessageBox)
SendKeys "{enter}"
End If
Case NV_MOVEMSGBOX '<-- we want to move this messagebox
Dim hMsgBox&, xPoint&, yPoint&
Dim stMsgBoxRect As RECT, stParentRect As RECT
hMsgBox = FindWindow("#32770", "Position A Message Box")
If hMsgBox Then
Call GetWindowRect(hMsgBox, stMsgBoxRect)
Call GetWindowRect(hWnd, stParentRect)
xPoint = stParentRect.Left + (((stParentRect.Right - stParentRect.Left) \ 2) - ((stMsgBoxRect.Right - stMsgBoxRect.Left) \ 2))
yPoint = stParentRect.Top + (((stParentRect.Bottom - stParentRect.Top) \ 2) - ((stMsgBoxRect.Bottom - stMsgBoxRect.Top) \ 2))
If xPoint < 0 Then xPoint = 0
If yPoint < 0 Then yPoint = 0
If (xPoint + (stMsgBoxRect.Right - stMsgBoxRect.Left)) > (Screen.Width \ Screen.TwipsPerPixelX) Then
xPoint = (Screen.Width \ Screen.TwipsPerPixelX) - (stMsgBoxRect.Right - stMsgBoxRect.Left)
End If
If (yPoint + (stMsgBoxRect.Bottom - stMsgBoxRect.Top)) > (Screen.Height \ Screen.TwipsPerPixelY) Then
yPoint = (Screen.Height \ Screen.TwipsPerPixelY) - (stMsgBoxRect.Bottom - stMsgBoxRect.Top)
End If
Call SetWindowPos(hMsgBox, HWND_TOP, xPoint, yPoint, API_FALSE, API_FALSE, SWP_NOZORDER Or SWP_NOSIZE)
End If
Call LockWindowUpdate(API_FALSE) Case NV_MSGBOXCHNGFONT '<-- we want to change the font for this messagebox
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
' NOTE: Changing the font of a message box is not recomemded!!
' This portion of the demo is just provided to show some of the possibilities
' for manipulating other windows using the Windows API.
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
hMsgBox = FindWindow("#32770", "Change The Message Box Font")
If hMsgBox Then
Dim hStatic&, hButton&, stMsgBoxRect2 As RECT
Dim stStaticRect As RECT, stButtonRect As RECT
hStatic = FindWindowEx(hMsgBox, API_FALSE, "Static", MSGBOXTEXT)
hButton = FindWindowEx(hMsgBox, API_FALSE, "Button", "OK")
If hStatic Then
Call GetWindowRect(hMsgBox, stMsgBoxRect2)
Call GetWindowRect(hStatic, stStaticRect)
Call GetWindowRect(hButton, stButtonRect)
Call SendMessage(hStatic, WM_SETFONT, g_hBoldFont, ByVal API_TRUE)
With stStaticRect
Call ScreenToClientLong(hMsgBox, .Left)
Call ScreenToClientLong(hMsgBox, .Right)
Dim nRectHeight&, nHeightDifference&, hStaticDC&
nHeightDifference = .Bottom - .Top
hStaticDC = GetDC(hStatic)
nRectHeight = DrawText(hStaticDC, MSGBOXTEXT, (-1&), stStaticRect, T_CALCRECT Or DT_EDITCONTROL Or DT_WORDBREAK)
Call ReleaseDC(hStatic, hStaticDC)
nHeightDifference = nRectHeight - nHeightDifference
Call MoveWindow(hStatic, .Left, .Top, .Right - .Left, nRectHeight, API_TRUE)
End With
With stButtonRect
Call ScreenToClientLong(hMsgBox, .Left)
Call ScreenToClientLong(hMsgBox, .Right)
Call MoveWindow(hButton, .Left, .Top + nHeightDifference, .Right - .Left, .Bottom - .Top, API_TRUE)
End With
With stMsgBoxRect2
' resize and reposition the messagebox
Call MoveWindow(hMsgBox, .Left, .Top - (nHeightDifference \ 2), .Right - .Left, (.Bottom - .Top) + nHeightDifference, API_TRUE)
End With
End If
End If
Call LockWindowUpdate(API_FALSE)
End SelectEnd Sub
' demo project showing how to use the API to manipulate a messagebox
' by Bryan Stafford of New Vision Software® - [email protected]
' this demo is released into the public domain "as is" without
' warranty or guaranty of any kind. In other words, use at
' your own risk.Private Sub Command1_Click()
' this shows a messagebox that will be dismissed after 4 seconds
' set the callback timer and pass our application defined ID (NV_CLOSEMSGBOX)
' set the time for 4 seconds (4000& microseconds)
SetTimer hWnd, NV_CLOSEMSGBOX, 4000&, AddressOf TimerProc ' call the messagebox API function
Call MessageBox(hWnd, "4 ÃëÖÓºó´Ë¶Ô»°¿ò×Ô¶¯¹Ø±Õ", _
"Self Closing Message Box", MB_ICONQUESTION Or MB_TASKMODAL)
End SubPrivate Sub Command2_Click()
' this positions the messagebox in the desired location on the screen.
' the location is defined in the callback timer function
' lock the desktop so that the initial position is not shown
Call LockWindowUpdate(GetDesktopWindow())
' set the callback timer with our application defined ID (NV_MOVEMSGBOX)
' set the time for 10 microseconds to allow the messagebox time to become active
SetTimer hWnd, NV_MOVEMSGBOX, 10&, AddressOf TimerProc ' call the messagebox API function
Call MessageBox(hWnd, "¶Ô»°¿ò¾ÓÖÐÓÚ´°Ì壨¶ø²»ÊÇÆÁÄ»£©?", _
"Position A Message Box", MB_ICONQUESTION Or MB_TASKMODAL)End SubPrivate Sub Command3_Click()
' this changes th font for the message text of the messagebox.
' the routine in the callback timer function
' lock the desktop so that the initial font is not shown
Call LockWindowUpdate(GetDesktopWindow())
' set the callback timer with our application defined ID (NV_MSGBOXCHNGFONT)
' set the time for 10 microseconds to allow the messagebox time to become active
SetTimer hWnd, NV_MSGBOXCHNGFONT, 10&, AddressOf TimerProc ' call the messagebox API function
Call MessageBox(hWnd, MSGBOXTEXT, "Change The Message Box Font", MB_ICONQUESTION Or MB_TASKMODAL)End SubPrivate Sub Form_Load() ' we will use the font from the form to change the text in one of our message boxes
' first, set the attributes of the font that we will want to display.
With Font
.Bold = True
.Italic = True
End With
' next, grab a handle to the form's font and store it in the global variable for use later.
' don't change the font on the form or the value in the global variable will be invalid.
Dim IFont As IFont
Set IFont = Font g_hBoldFont = IFont.hFont
Set IFont = Nothing
End Sub