作者:bbsxwk 来源于:中国VB网 发布时间:2005-10-29
现在有很多软件未注册时有些按钮是灰色的,不能按下,通过以下小程序即可激活他.
03年的时候我用delphi写过一个
http://www.onlinedown.net/soft/23743.htm 当时跌跌撞撞,在大富翁里请教了好多高手才完成.现在学了VB了,于是自己从新用VB写了一个,从中也了解一下VB里一些API的用法.
我们要用到的API有:
GetForegroundWindow,EnumChildWindows,IsWindowEnabled,EnableWindow
下面我一一写出这几个API的意义
GetForegroundWindow:获得前台窗口的句柄。这里的“前台窗口”是指前台应用程序的活动窗口
EnumChildWindows:为指定的父窗口枚举子窗口
IsWindowEnabled:判断窗口是否处于活动状态(在vb里使用:针对vb窗体和控件,请用enabled属性)
EnableWindow:在指定的窗口里允许或禁止所有鼠标及键盘输入(在vb里使用:在vb窗体和控件中使用Enabled属性)
好了有这几个API就足够写出这个小程序了.
程序很简单,首先新建一个工程,在窗体里放下2个Label,1个Button,1个Timer
控件设置:把Label1的Caption设为"句柄:",Label2的Name设为LabHwnd,Caption为空.Command1的Caption为"激活",Timer1的Enable设为False,Interval设为1000.
以下为代码部分:
'Module
Option Explicit
Public Declare Function GetForegroundWindow Lib "user32" () As Long
Public Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function IsWindowEnabled Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long
Public Function GetButtonHandle(ByVal hwnd As Long, lParam As Long) As Long '返回每个控件的句柄
GetButtonHandle = True '设定为True才会再找下一个
If IsWindowEnabled(hwnd) = False Then '判断是否有enable的东东
Call EnableWindow(hwnd, True) '调用激活
End If
End Function
'Form
Option Explicit
Dim ButtonHandle As Long
Private Sub Command1_Click()
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
LabHwnd.Caption = GetForegroundWindow '显示句柄
ButtonHandle = GetForegroundWindow
ButtonHandle = EnumChildWindows(ButtonHandle, AddressOf GetButtonHandle, ButtonHandle) '这个API我不是很懂第3个参数的意义,因为如果声明的时候把 ByVal lParam As Long 改为 ByVal lParam As Form 这样这个参数改为Form1就可以了,好像没有什么意义,希望知道的能告诉我实际含义.
End Sub