我的一亩三分地 我就喜欢!
13fen  设为主页
 收藏本站
 
当前位置: > 一亩三分地:首页 > 操作系统 > 服务器 > IIS Server > 激活程序中被disabled掉的按钮
热门文章排行
热门文章排行 启动与关闭服务器(12-28)
服务器应用:用serv-u建立FTP一(11-16)
破解局域网内不能互访的六大经典问题(12-28)
Windows中IIS内FTP服务器高级配置(11-16)
怎样设置域名的DNS服务器(11-16)
精采文章排行
精采文章排行 在Windows Server 2003中为Web站点(11-16)
IP基础--DNS协定(11-16)
怎样设置域名的DNS服务器(11-16)
DNS—bind安装与配置的关键技术揭秘(11-16)
Exchange Server 服务器通讯端口(11-16)
技术专题推荐
网管论坛交流
 

激活程序中被disabled掉的按钮 

作者:佚名   来源:Linux 宝库   点击:   日期:2006-12-28



  有些软件如果你不输入正确的注册吗,那该死的“下一步”按钮就一直disable。这个disable按钮使用WindowFromPoint, FindWindowEx均无法得到.
  
  不过,使用EnumChildWindows,GetWindow去可以枚举到每一个窗口中的所有控件,包括disabled的控件,找到了句柄,我们就可以操作了
  
  测试环境:WINXP+VB6
  
  具体的API函数请参考MSDN.
  
  新建工程,在form中任意添加两个按钮,两个文本框。其中按钮2的Enabled属性为false
  
  form的Caption设为” 激活程序的disabled的按钮”.
  
  编译后,运行。
  
  1.我们先看看使用GetWindow枚举句柄的
  我们先用FindWindow找到form窗口,然后找到窗口中所有的子控件句柄,然后使用EnableWindow函数激活
  
  添加1个按钮,2个list控件。
  
  Option Explicit
  
  Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  
  Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
  
  Private Declare Function EnableWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal fEnable As Long) As Long
  
  Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
  
  Const GW_CHILD = 5
  
  Const GW_HWNDNEXT = 2
  
  Const WM_GETTEXT = &HD
  
  Const WM_ENABLE As Long = &HA
  
  Private Sub Command2_Click()
  
  Dim tWnd As Long
  
  Dim bWnd As Long
  
  Dim lpClassName As String
  
  Dim RetVal As Long
  
  Dim i As Integer
  
  Dim mName As String
  
  tWnd = FindWindow(vbNullString, "激活程序的disabled的按钮")
  
  bWnd = GetWindow(tWnd, GW_CHILD)
  
  Do While bWnd <> 0
  
  lpClassName = Space(256)
  
  ‘这里得到类名主要是为了可以看出bWnd所对应的控件
  
  RetVal = GetClassName(bWnd, lpClassName, 256)
  
  i = InStr(1, lpClassName, Chr(0))
  
  mName = Left(lpClassName, i - 1)
  
  List1.AddItem bWnd & "  " & mName
  
  ;list2主要是为了方便操作
  
  List2.AddItem bWnd
  
  ‘继续寻找下一个控件
  
  bWnd = GetWindow(bWnd, GW_HWNDNEXT)
  
  Loop
  
  End Sub
  
  ‘单击要激活的句柄
  
  Private Sub List2_Click()
  
  EnableWindow List2.List(List2.ListIndex), True
  
  End Sub
  
  好了,运行后,点击按钮,窗口中所有的控件句柄填充到列表框中,然后点击列表框,可以发现disabled的按钮被激活,可以运行了
  
  2.使用EnumChildWindows来枚举
  函数功能:为指定的父窗口枚举子窗口
  
  Private Declare Function EnumChildWindows Lib "user32" Alias "EnumChildWindows" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
  
  【参数表】
  
  hWndParent ----- Long,欲枚举子窗口的父窗口的句柄
  
  lpEnumFunc ----- Long,为每个子窗口调用的函数的指针。用AddressOf运算符获得函数在一个标准模块中的地址
  
  代码如下:
  窗口
  Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  
  Private Declare Function EnableWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal fEnable As Long) As Long
  
  Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
  
  Const WM_ENABLE As Long = &HA
  
  Private Sub Command1_Click()
  
  Dim twnd As Long
  
  twnd = FindWindow(vbNullString, "激活程序的disabled的按钮")
  
  EnumChildWindows twnd, AddressOf EnumChildProc, ByVal 0&
  
  End Sub
  
  Private Sub List1_Click()
  
  EnableWindow List1.List(List1.ListIndex), True
  
  End Sub
  
  模块
  Option Explicit
  
  Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
  
  Form1.List1.AddItem hwnd
  
  '继续枚举
  
  EnumChildProc = 1
  
  End Function
  
  好了,运行后,点击按钮,窗口中所有的控件句柄填充到列表框中,然后点击列表框,可以发现disabled的按钮被激活,可以运行了
  







文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·Win2003下Exchange2003安装全图解二 ·处理外部邮件的Exchangeserver设置
·准备好升级你的Exchange2003 ·Exchange2000安装的系统需求
·安装秘诀:Exchange2000容量与拓朴计算器 ·安装秘诀:将现有的Exchange2000群集节点

   文章评论:(条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:一分  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。