在Windows操作系统中,获取窗口标题和ID是编程中常见的任务,尤其在开发桌面应用程序时。这里,我们将深入探讨如何使用Delphi语言以及`GetWindowLong`和`GetWindowText`这两个核心函数来实现这一功能。 `GetWindowLong`是一个Windows API函数,用于获取与指定窗口关联的32位(long)值。它可以用来获取窗口的各种属性,如窗口样式、额外样式、窗口过程(Window Procedure)等。在获取窗口ID的情况下,我们通常会调用`GetWindowLong`函数,并传入`GWL_ID`作为参数,这将返回窗口的ID。 ```delphi function GetWindowID(hwnd: HWND): Integer; begin Result := GetWindowLong(hwnd, GWL_ID); end; ``` 而`GetWindowText`函数则是用来获取指定窗口的文本,也就是窗口标题。它接受一个窗口句柄(HWND)、一个缓冲区指针以及该缓冲区的大小,然后填充缓冲区以包含窗口的标题文本。 ```delphi function GetWindowTextLength(hwnd: HWND): Integer; stdcall; external 'user32.dll' name 'GetWindowTextLengthW'; function GetWindowText(hwnd: HWND; lpString: PChar; nMaxCount: Integer): Integer; stdcall; external 'user32.dll' name 'GetWindowTextW'; procedure GetWindowTextByHandle(hwnd: HWND; var Title: string); var Len: Integer; begin Len := GetWindowTextLength(hwnd) + 1; SetLength(Title, Len); if GetWindowText(hwnd, PChar(Title), Len) > 0 then Title := Copy(Title, 1, Len - 1); // 去掉末尾的空字符 end; ``` 要获取系统中所有窗口的信息,你需要遍历所有顶级窗口。可以使用`EnumWindows`函数,它会为每个顶级窗口调用你提供的回调函数。在回调函数中,你可以调用`GetWindowLong`和`GetWindowText`来获取窗口ID和标题。 ```delphi type TWindowInfo = record hwnd: HWND; ID: Integer; Title: string; end; var EnumProc: function(hwnd: HWND; lParam: LPARAM): Boolean stdcall; List: TList<TWindowInfo>; EnumProc := procedure(hwnd: HWND; lParam: LPARAM) var Info: TWindowInfo; begin Info.hwnd := hwnd; Info.ID := GetWindowID(hwnd); GetWindowTextByHandle(hwnd, Info.Title); List.Add(Info); Result := True; // 继续枚举 end; // 初始化List List := TList<TWindowInfo>.Create; // 开始枚举 EnumWindows(@EnumProc, 0); // 使用List中的数据 for Info in List do begin // 输出窗口信息 WriteLn('HWND: ', Info.hwnd, ', ID: ', Info.ID, ', Title: ', Info.Title); end; // 清理 List.Free; ``` 以上代码示例展示了如何使用Delphi和Windows API获取并打印系统中所有窗口的ID和标题。`GetWindowLongTest`可能是这个功能的实现源代码文件名,可能包含了上述逻辑。在实际开发中,你可能需要根据具体需求进行调整,例如添加错误处理或过滤特定类型的窗口。 通过`GetWindowLong`和`GetWindowText`这两个API函数,开发者可以轻松地获取Windows窗口的相关信息,这对于调试、监控或其他系统级的应用程序开发非常有用。在Delphi中,结合Windows API调用和面向对象的编程风格,可以编写出高效且强大的窗口管理工具。
- 1
- sq_xlaohe12016-02-26可以用. 不错
- 千里丨烟波2022-03-05进去就一个按钮,弹一堆窗口,啥也没用
- 粉丝: 42
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助