@H_403_0@http://fengzhixue168.blog.163.com/blog/static/95761592009648525675/
@H_403_0@ 一、必不可少的API函数
@H_403_0@ 1.FindWindow
@H_403_0@此函数用于寻找其他程序的句柄。这里用来寻找音量控制系统的窗口句柄。
@H_403_0@ 2.FindWindowEx
@H_403_0@ 此函数用于寻找其他程序的控件句柄。与FindWindow不同的是,这个函数寻找的是子窗体的句柄(控件也被视为子窗体)。这里用来寻找“音量控制”程序里的“全部静音”复选框的句柄。
@H_403_0@ 3.SendMessage
@H_403_0@ 此函数用于向窗体及控件发送消息。
@H_403_0@ 二、窗体控件
@H_403_0@ 在VB中新建窗体,并放置按钮一个。
@H_403_0@ 三、程序代码(在Windows XP中测试通过)
@H_403_0@' **********以下是API函数声明**********
@H_403_0@ Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String,ByVal lpWindowName As String) As Long
@H_403_0@ 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
@H_403_0@ Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long,ByVal wMsg As Long,ByVal wParam As Long,ByVal lParam As Long) As Long
@H_403_0@ ' **********以下是API函数使用的常量赋值**********
@H_403_0@ Private Const BM_GETCHECK = &HF0 ‘ 取得复选框状态
@H_403_0@Private Const BM_SETCHECK = &HF1 ’ 设置复选框状态
Private Const BST_UNCHECKED = &00'设置复选框为未选中状态
Private Const BST_CHECKED = &01 '设置复选框为选中状态
@H_403_0@ Private Const WM_APPCOMMAND = &H319
Private Const APPCOMMAND_VOLUME_MUTE = &H8
@H_403_0@ ' ***********以下是Command1单击的程序**********
Private Sub Command1_Click()
@H_403_0@ Dim hwnd0 As Long' 用于记录“音量控制”程序的句柄
Shell "c:\windows\system32\sndvol32.exe" ’ 启动“音量控制”程序
@H_403_0@hwnd0 = FindWindow(vbNullString,"音量控制")
Dim hwnd1 As Long ' 用于记录“全部静音”复选框句柄
@H_403_0@ hwnd1 = FindWindowEx(hwnd0,0&,"Button","全部静音(&M)") ' 复选框的类名是"Button"
Dim state As Long ' 用于记录复选框状态
@H_403_0@state = SendMessage(hwnd1,BM_GETCHECK,ByVal CLng(0),ByVal CLng(0))
' 如果复选框处于未选中状态,则返回0,选中状态返回1
If state = 0 Then
SendMessage Me.hWnd,WM_APPCOMMAND,&H200EB0,APPCOMMAND_VOLUME_MUTE *&H10000
@H_403_0@ ' 如果系统没有静音,则使系统静音
@H_403_0@ ' 注:如果再使用一次同样的代码则恢复系统声音
@H_403_0@SendMessagehwnd0,WM_CLOSE,0 '关闭音量控制程序
End If
@H_403_0@
@H_403_0@ End Sub
@H_403_0@ 我们再来看一下VB.NET与VB中与何不同:
@H_403_0@ API函数声明不同
@H_403_0@声明类型中的Long类型一律改为Interger
@H_403_0@窗体句柄不同
@H_403_0@ 由Me.hwnd改成Me.Handle