发新话题
打印

[SDK/API/系统] 用EnumWindows列出当前系统运行的全部窗口

用EnumWindows列出当前系统运行的全部窗口

function EnumWindowsFunc(Handle: THandle; List: TStringList):boolean; stdcall;
var
Caption: array[0..256] of Char;
begin
if GetWindowText(Handle, Caption, SizeOf(Caption)-1) <> 0 then
begin
List.Add(Caption);
//SetWindowText(Handle, PChar('About - ' + Caption));
end;
Result :=True;
end;


//用法
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Clear;
EnumWindows(@EnumWindowsFunc, LParam(Memo1.Lines));
end;

其中用到的两个API

一:Enumwindows
    函数功能:该函数枚举所有屏幕上的顶层窗口,办法是先将句柄传给每一个窗口,然后再传送给应用程序定义的回调函数。EnumThreadWindows函数继续到所有顶层窗口枚举完为止或回调函数返回FALSE为止函数原型:BOOL EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam);

    参数:

    lpEnumFunc:指向一个应用程序定义的回调数指针,请参看EnumWindowsProc。

    lPararm:指定一个传递给回调函数的应用程序定义值。

    返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。

    备注:EnumWindows函数不列举子窗口。

    在循环体中调用这个函数比调用GetWindow函数更可靠。调用GetWindow函数中执行这个任务的应用程序可能会陷入死循环或指向一个已被销毁的窗口的句柄。

    速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib。


二:Enumwindowsproc
    函数功能:该函数是一个与EnumWindows或EnumDesktopWindows一起使用的应用程序定义的回调函数。它接收顶层窗口句柄。WNDENUMPROC定义一个指向这个回调函数的指针。EnumWindowsProc是应用程序定义函数名的位置标志符。

    函数原型:BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM IParam);

    参数:

    hwnd:顶层窗口句柄。

    lParam:指定在EnumWIndowsh或EnumDesktopWindows中的应用程序定义值。

    返回值:为继续列表,回调函数必须返回TRUE;若停止列表,它必须返回FALSE。

    备注:应用程序必须通过传递给EnumWindows或EnumDesktopWindows应用程序地址来注册这个回调函数。

    速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本:头文件:winuser.h;库文件:用户自定义。
妖城欢迎您!

TOP

发新话题