Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Const WM_CLOSE = &H10 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 Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow 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 FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long Private Const SW_SHOWNORMAL = 1 Private Const SWP_SHOWWINDOW = &H40 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 Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long Private Function GetHwnd(buttonHwnd As Long, MenuHwnd As Long) As Boolean Dim LhWnd As Long Dim StartMenuHwnd As Long LhWnd = FindWindow("Shell_TrayWnd", vbNullString) buttonHwnd = FindWindowEx(LhWnd, 0, "Button", vbNullString) StartMenuHwnd = FindWindow("DV2ControlHost", vbNullString) If StartMenuHwnd = 0 Then StartMenuHwnd = FindWindow("BaseBar", vbNullString) End If MenuHwnd = StartMenuHwnd End Function Private Sub Command1_Click() Dim hwnd As Long, bHwnd As Long Dim myRect As RECT GetHwnd bHwnd, hwnd SendMessage bHwnd, BM_CLICK, 0&, 0& '开始 按钮 GetWindowRect hwnd, myRect '理论上是开始菜单,可见开始菜单其实是个“窗体” 'ShowWindow hwnd, SW_SHOWNORMAL Print myRect.Top, myRect.Right'这个地方好象不加个操作就会有问题。在IDE下尤其明显 'SetWindowPos hwnd, 0, 200, 200, 200, 350, SWP_SHOWWINDOW MoveWindow hwnd, 200, 200, 220, 300, True '无法获得其宽度和高度 End Sub