请 de410回到问题,你的笔记中有这样的一个实例,我照做了,但是没通过,请指点,如下(0)

  • 主题发起人 主题发起人 lht123
  • 开始时间 开始时间
L

lht123

Unregistered / Unconfirmed
GUEST, unregistred user!
灰色按钮激活实现下面讲讲激活windows灰色东东(比如不可用的按钮文本等)的原理本例中我们需要用到的API共有四个:GetForegroundWindow,EnumChildWindows,IsWindowEnabled,EnableWindow下面我一一写出这几个API的意义GetForegroundWindow //获得前台窗口的句柄。这里的“前台窗口”是指前台应用程序的活动窗口EnumChildWindows //为指定的父窗口枚举子窗口(即枚举控件窗口,比如按钮文本等)IsWindowEnabled //判断窗口是否处于活动状态.EnableWindow //在指定的窗口里允许或禁止所有鼠标及键盘输入好了有这几个API就足够写出这个小程序了,下面是代码:function EnumChildProc(Hwnd:Integer;TF:TForm1):Boolean;stdcall; //查找子窗口并进行判断的回调函数beginResult:=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.
 
你的全部代码?我这个也是在网上转过来的~~我刚按上面的代码,是OK的啊~~~是不是你的Timer1时间设的比较长?
 
不是 是这个有问题 Enumchildwindows(getforegroundwindow,@EnumChildProc,0); 提示Variable required
 
你是不是声明了?function EnumChildProc(Hwnd:Integer;TF:TForm1):Boolean;stdcall;
 
我的代码如下~~unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) Button1: TButton; Timer1: TTimer; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}function EnumChildProc(Hwnd:Integer;TF:TForm1):Boolean;stdcall; //查找子窗口并进行判断的回调函数beginResult:=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.
 
我写的和你一样 还是有问题
 
不会吧~~你在仔细看看~~我这边是OK的~~~
 
可以了,谢谢了。
 
后退
顶部