收集所有活动窗口类名

4
许多程序(如True Transparency等)可以获取所有活动或后台运行的窗口类名,例如:
Delphi 7对象检查器名称为“tpropertyinspector” Opera主窗口类名为“operawindowclass” 等等。
那么如何在Delphi中获取任何已打开窗口的类名呢?
2个回答

9

调用 EnumWindows 获取所有顶级窗口。然后对每个窗口调用 GetClassName 查找窗口类名。如果您还想检查子窗口,则在每个顶级窗口上调用 EnumChildWindows

像这样调用 GetClassName:

var
  ClassName: string;
  len: Integer;
...
SetLength(ClassName, 256);
len := GetClassName(window, PChar(ClassName), Length(ClassName));
if len=0 then
  RaiseLastOSError;
SetLength(ClassName, len);

@Robrok,我相信在VCL源代码中甚至有EnumWindows的示例。 - Ondrej Kelle
3
请允许我自吹自擂一下,但请看这个链接:https://dev59.com/82Hbs4cB2Jgan1znrgVE#6808215。在 Stack Overflow 上搜索 "[Delphi] EnumWindows" 可以在列表的第三个问题中找到它... - Marjan Venema
@robrok,Marjan说得非常对 - 现在你知道函数的名称了,搜索会帮助你找到答案。 - David Heffernan
有一个东西我想要,但是我不理解它:http://delphi.about.com/od/windowsshellapi/l/aa080304a.htm - Little Helper
2
lpszClassName的最大长度为256,但我用666没有问题.. :) - Sertac Akyuz
显示剩余5条评论

3

只需使用Windows API中的GetClassName函数(在Delphi和其他语言中都是同样的方式)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接