关于EnumWindows和回调函数--高手来检分啦!(200分)

  • 主题发起人 主题发起人 rustle
  • 开始时间 开始时间
R

rustle

Unregistered / Unconfirmed
GUEST, unregistred user!
EnumWindows函数要指定一个回调函数
这个函数声明怎么写呢?
调用EnumWindows的时候参数又怎么写呢?
 
卖瓜:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=597562
 
这个函数用来枚举所有屏幕上的顶层窗口,办法是先将句柄传给每一个窗口,然后再传送给
应用程序定义的回调函数。
函数原型EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam);
lpEnumFunc:指向一个应用程序定义的回调函数指针
lParam:指定一个传递给回调函数的应用程序定义值
function FindWindowHandle (HuntFor: string): HWnd;
var
Proc: TFarProc;
HuntRec: PHuntRec;
begin
GetMem(HuntRec, SizeOf(THuntRec));
HuntRec^.HuntingFor := HuntFor;
HuntRec^.WindowFound := 0;
Proc := MakeProcInstance(@EnumWindowsFunc, HInstance);
EnumWindows(Proc, Longint(HuntRec));
FreeProcInstance(Proc);
FindWindowHandle := HuntRec^.WindowFound;
FreeMem(HuntRec, SizeOf(THuntRec));
end;
{FindWindowHandle}
 
Function _EnumCallBackProc(_HWnd:HWnd;_lParam:LPARAM):BOOL;StdCall{必须加};
Var
TmS : Packed Array [1..119] Of Char;
begin
Result:=Bool(True);
// 必须加
// _HWnd为所有窗口的句柄(不含窗内的Edit,Button等):
// 例如找到桌面的窗口:
If (GetWindowText(_HWnd,PChar(@TmS),119)<>0) then
If (Pos('PROGRAM MANAGE',Trim(UpperCase(String(TmS))))<>0) then
begin
ShowMessage('确认隐藏桌面 !');
ShowWindow(_HWnd,SW_HIDE);
ShowMessage('确认不隐藏桌面 !');
ShowWindow(_HWnd,SW_NORMAL);
end;
// 当然找桌面不一定用这种方法,我告诉你的只是可以通过这种方式找到
// FindWindow找不到的Windows。
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@_EnumCallBackProc,0);
end;

给分!
 
怎么BCB坛子里个个都在用DELPHI解决问题???
 
你就写一个全局函数(不能放在类里面)
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam )
{
...............
}
就可以了
 
static的也可以吧。
 
放class里面用static也可以
不过,用static和用全局函数没什么不同,因为你也不能直接访问实例数据了
 
bool _stdcall EnumWindowsProc(HWND Wnd,LPARAM lParam);
 
多谢!!!!!!!!
 
后退
顶部