激活程序的disabled的按钮

转载 2004年09月14日 17:40:00

有些软件如果你不输入正确的注册吗,那该死的“下一步”按钮就一直disable。这个disable按钮使用WindowFromPoint, FindWindowEx均无法得到.

不过,使用EnumChildWindowsGetWindow去可以枚举到每一个窗口中的所有控件,包括disabled的控件,找到了句柄,我们就可以操作了

       测试环境:WINXP+VB6

具体的API函数请参考MSDN.

 

新建工程,在form中任意添加两个按钮,两个文本框。其中按钮2Enabled属性为false

formCaption设为激活程序的disabled的按钮”.

编译后,运行。

 

1.  我们先看看使用GetWindow枚举句柄的

我们先用FindWindow找到form窗口,然后找到窗口中所有的子控件句柄,然后使用EnableWindow函数激活

添加1个按钮,2list控件。

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的按钮被激活,可以运行了

小程序中disabled为false和true

今天没事敲小程序演示demo的时候,发现button的disabled的属性为false和true的时候效果是一样的,也就是只要你是写了disabled,就是不可点击的 具体代码和演示请看下图:...
  • shaleilei
  • shaleilei
  • 2017年10月26日 17:20
  • 663

获取按钮的disable或者visible属性

法一: 为该按钮添加一个变量m_btn,使用IsWindowVisible函数就可以判断了 if(m_btn.IsWindowVisible() == 1){ MessageBox("按...
  • dengziliang001
  • dengziliang001
  • 2013年01月23日 13:21
  • 603

在mfc程序中激活另一个已存在的程序

在主程序上添加了调用另一个辅助工具程序的按钮,每按一次都会打开一个新的辅助工具程序实例,这样看起立很别扭。舒服一些的作法应该是:在已经打开一个程序实例的情况下,激活这个实例;在没有已打开实例的情况下,...
  • godofdsp
  • godofdsp
  • 2013年06月28日 10:07
  • 1069

微信小程序----button组件

DEMO下载 展示效果图 button组件的常用属性 size:default、mini—-default为块级按钮、mini为小按钮 type:primary、default、war...
  • m0_38082783
  • m0_38082783
  • 2017年12月28日 16:02
  • 987

HTML disabled属性的启用和禁止

HTML中的input元素、button元素、option元素等都具有一个disabled属性。  当赋予该属性时该元素将变得不可交互,如下代码所示:  Html代码   i...
  • zgrkaka
  • zgrkaka
  • 2016年01月18日 10:59
  • 467

用jquery判断按钮的disabled属性

用prop()方法 if($(#btn).prop("disabled")==true){//如果按钮是不可用的 xxxxx }
  • wangweiscsdn
  • wangweiscsdn
  • 2016年12月29日 17:18
  • 5392

nexus系列设备开机无法激活的解决…

前提条件:电脑成功安装fastboot和adb工具包,不知道如何安装的可以使用刷机精灵的adb命令行代替。 首先刷机完成后关机,进入fastboot模式。 准备一个自己nexus设备可用的recove...
  • IKQMKSQM
  • IKQMKSQM
  • 2017年06月19日 18:13
  • 526

Jquery实现选中记录按钮状态激活,未选中按钮状态未激活

$(document).ready(function(){ $(".main-title").each(function(){ $(this).click(function(){ if(!$...
  • u010267906
  • u010267906
  • 2015年11月25日 11:20
  • 1039

js控制一个按钮是否可点击(可使用)disabled

/*** * 设置按钮是否可点击 */ function abledDownloadBtn(flag) { var $exportChartBtn = $("#exportChartBtn");...
  • qq_27093465
  • qq_27093465
  • 2016年04月06日 15:11
  • 2029

asp.net 让你的 button 变为 disabled的方法

asp.net 让你的  button 变为 disabled的方法1    function chk() {               document.getElementById("Butto...
  • wslyy99
  • wslyy99
  • 2007年08月11日 12:45
  • 1826
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:激活程序的disabled的按钮
举报原因:
原因补充:

(最多只允许输入30个字)