灰色按钮激活实现
下面讲讲激活windows灰色东东(比如不可用的按钮文本等)的原理
本例中我们需要用到的API共有四个:
GetForegroundWindow,EnumChildWindows,IsWindowEnabled,EnableWindow
下面我一一写出这几个API的意义
GetForegroundWindow //获得前台窗口的句柄。这里的“前台窗口”是指前台应用程序的活动窗口
EnumChildWindows //为指定的父窗口枚举子窗口(即枚举控件窗口,比如按钮文本等)
IsWindowEnabled //判断窗口是否处于活动状态.
EnableWindow //在指定的窗口里允许或禁止所有鼠标及键盘输入
好了有这几个API就足够写出这个小程序了,下面是代码:
function EnumChildProc(Hwnd:Integer;TF:TForm1):Boolean;stdcall; //查找子窗口并进行判断的回调函数
begin
Result:=True; //设定为True才会再找下一个
if IsWindowEnabled(Hwnd)=False then //判断是否有enable的东东
begin
EnableWindow(Hwnd,True); //调用激活
end;
end;
procedure TForm1.Button1Click(Sender: TObject); //启用Timer开始遍历激活
begin
Timer1.Enabled:=True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
ButtonHandle:Hwnd;
begin
ButtonHandle:=GetForeGroundWindow;
EnumChildWindows(ButtonHandle,@EnumChildProc,0);
end;
procedure TForm1.Button2Click(Sender: TObject); //关闭Timer停止激活
begin
Timer1.Enabled:=False;
end;
end.