Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub Command1_Click()
Dim mhwnd As Long
Dim pid As Long
pid = Shell("e:\Program Files\Windows Media Player\wmplayer.exe", vbNormalFocus)
'查找类名为WMPlayerApp(这个类名是媒体播放器的顶级窗口的类名,这个类名在你的系统中可能是别的值,你用spy++看一下)的窗口,直到找到为止,这种查找的方法比较简单,但可能误中副车
Do While mhwnd = 0
mhwnd = FindWindow("WMPlayerApp", vbNullString)
DoEvents
Loop
SendKeys "^p"
End Sub
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetMenuString Lib "user32" Alias "GetMenuStringA" (ByVal hMenu As Long, ByVal wIDItem As Long, ByVal lpString As String, ByVal nMaxCount As Long, ByVal wFlag As Long) As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function EnableMenuItem Lib "user32" (ByVal hMenu As Long, ByVal wIDEnableItem As Long, ByVal wEnable As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const WM_COMMAND = &H111
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 Function FindMenuIDByName(ByVal hMenu As Long, ByVal sName As String, mi As MenuItem)
Dim num As Long, i As Long
Dim sub_menu As Long, length As Long
Dim mnu_name As String
Dim cmdID As Long
If hMenu = 0 Then Exit Function
sName = Replace(sName, "&", "")
num = GetMenuItemCount(hMenu)
For i = 0 To num - 1
sub_menu = GetSubMenu(hMenu, i)
mnu_name = Space$(256)
length = GetMenuString(hMenu, i, mnu_name, Len(mnu_name), MF_BYPOSITION)
mnu_name = Left$(mnu_name, length)
mnu_name = Replace(mnu_name, "&", "")
If InStr(1, mnu_name, sName) > 0 Then
cmdID = GetMenuItemID(hMenu, i)
If cmdID = -1 Then 'Item ID
mi.hMenu = hMenu
mi.wID = i
mi.wIDType = MF_BYPOSITION
Else 'Command ID
mi.wID = cmdID
mi.wIDType = MF_BYCOMMAND
End If
Exit For
End If
FindMenuIDByName sub_menu, sName, mi
Next i
End Function
Private Sub Command1_Click()
Dim mhwnd As Long
Dim pid As Long
pid = Shell("e:\Program Files\Windows Media Player\wmplayer.exe")
Dim hMenu As Long, wID As Long
Dim mask As Long, key As Long
Dim mi As MenuItem
'查找类名为WMPlayerApp(这个类名是媒体播放器的顶级窗口的类名,这个类名在你的系统中可能是别的值,你用spy++看一下)的窗口,直到找到为止,这种查找的方法比较简单,但可能误中副车
Do While mhwnd = 0
mhwnd = FindWindow("WMPlayerApp", vbNullString)
DoEvents
Loop
hMenu = GetMenu(mhwnd)
mi.hMenu = hMenu
If hMenu = 0 Then Exit Sub
Dim s As String
s = "播放/暂停"
FindMenuIDByName hMenu, s, mi
'发送菜单命令 播放/暂停
SendMessage mhwnd, WM_COMMAND, mi.wID, ByVal 0&
Shell "C:\Program Files\Windows Media Player\wmplayer.exe e:\media\1400k.wmv"
或者,试试这样:
Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Sub Command1_Click()
ShellExecute Me.hwnd, "play", "e:\media\1400k.wmv", vbNullString, vbNullString, 1