VB和VB.NET中获得其他窗体控件句柄

前端之家收集整理的这篇文章主要介绍了VB和VB.NET中获得其他窗体控件句柄前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@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

猜你在找的VB相关文章