【问题标题】:Collect all active window class names收集所有活动窗口类名
【发布时间】:2011-10-29 02:52:52
【问题描述】:

许多程序(True Transparancy 和其他程序)可以让所有程序都处于活动状态或在后台窗口类名称中运行,如下所示:

Delphi 7 Object Inspector 名称为tpropertyinspector
Opera 主窗口类名是operawindowclass
等等

那么如何在 Delphi 中获取任何打开的窗口类名?

【问题讨论】:

    标签: windows delphi winapi window delphi-7


    【解决方案1】:

    只需在 Windows API 中使用 GetClassName 函数(在 Delphi 中的方式与在任何语言中的方式相同)。

    【讨论】:

      【解决方案2】:

      致电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 示例。
      • @RobRok:请原谅我自吹自擂,但请看一下:stackoverflow.com/questions/6806911/… 在 SO 上搜索“[Delphi] EnumWindows”会在列表的第三个问题中出现...
      • @robrok marjan 完全正确 - 现在您知道函数的名称,搜索将带您回家
      • 我不明白这些 cmets 是什么意思。我只想在我的表单上有一个 tlistview,当我单击按钮或其他内容时,列表会填充所有窗口名称,就像真正的透明度一样(不包括管理器框)
      • The maximum length for lpszClassName is 256,但我对 666 没意见.. :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 2021-11-11
      相关资源
      最近更新 更多