登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

 
 
 

日志

 
 

VB和VB.NET中获得其他窗体控件句柄(原创)  

2009-07-04 20:52:56|  分类: VB笔记 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

         我想编一个多媒体程序,其中一个功能是使系统静音。到网上一查,很难寻到,即使找到,代码也太冗长,让人云里雾里,经过一翻努力摸索,终于成功。现将原码记录于下,以供共同探讨。

       首先看一下VB中怎样做到:

        一、必不可少的API函数

              1.FindWindow

               此函数用于寻找其他程序的句柄。这里用来寻找音量控制系统的窗口句柄。

              2.FindWindowEx

               此函数用于寻找其他程序的控件句柄。与FindWindow不同的是,这个函数寻找的是子窗体的句柄(控件也被视为子窗体)。这里用来寻找“音量控制”程序里的“全部静音”复选框的句柄。

               3.SendMessage

               此函数用于向窗体及控件发送消息。

        二、窗体控件

               在VB中新建窗体,并放置按钮一个。

        三、程序代码(在Windows XP中测试通过)

             '  **********以下是API函数声明**********

               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 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

            ' **********以下是API函数使用的常量赋值**********

            Private Const BM_GETCHECK = &HF0      ‘ 取得复选框状态

            Private Const BM_SETCHECK = &HF1      ’  设置复选框状态
            Private Const BST_UNCHECKED = &00      '设置复选框为未选中状态
            Private Const BST_CHECKED = &01           '设置复选框为选中状态

         Private Const WM_APPCOMMAND = &H319
         Private Const APPCOMMAND_VOLUME_MUTE = &H8

         '  ***********以下是Command1单击的程序**********
          Private Sub Command1_Click()

                  Dim hwnd0 As Long      ' 用于记录“音量控制”程序的句柄
                  Shell "c:\windows\system32\sndvol32.exe"        ’  启动“音量控制”程序

                  hwnd0 = FindWindow(vbNullString, "音量控制")
                  Dim hwnd1 As Long     '  用于记录“全部静音”复选框句柄

                  hwnd1 = FindWindowEx(hwnd0, 0&, "Button", "全部静音(&M)")   '  复选框的类名是"Button"
                  Dim state As Long       '  用于记录复选框状态

                  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  

                     '  如果系统没有静音,则使系统静音

                     ' 注:如果再使用一次同样的代码则恢复系统声音

                    SendMessage hwnd0,WM_CLOSE,0,0       '关闭音量控制程序
               End If

              

         End Sub

 

         我们再来看一下VB.NET与VB中与何不同:

 

        API函数声明不同

              声明类型中的Long类型一律改为Interger

        窗体句柄不同

             由Me.hwnd改成Me.Handle

             

  评论这张
 
阅读(9533)| 评论(7)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018