getGUIThreadInfo 函数 (winuser.h)

检索有关活动窗口或指定 GUI 线程的信息。

语法

BOOL GetGUIThreadInfo(
  [in]      DWORD          idThread,
  [in, out] PGUITHREADINFO pgui
);

参数

[in] idThread

类型:DWORD

要检索其信息的线程的标识符。 若要检索此值,请使用 GetWindowThreadProcessId 函数。 如果此参数为 NULL,则该函数返回前台线程的信息。

[in, out] pgui

类型: LPGUITHREADINFO

指向 GUITHREADINFO 结构的指针,该结构接收描述线程的信息。 请注意,在调用此函数之前,必须将 cbSize 成员设置为 sizeof(GUITHREADINFO)

返回值

类型: BOOL

如果该函数成功,则返回值为非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。

注解

即使活动窗口不是由调用进程拥有,此函数也会成功。 如果指定的线程不存在或具有输入队列,则函数将失败。

此函数可用于检索有关线程的上下文外信息。 检索到的信息与应用程序检索有关自身的信息相同。

对于编辑控件,返回的 rcCaret 矩形包含插入符号以及有关文本方向和填充的信息。 因此,它可能不会提供光标的正确位置。 Sans Serif 字体对光标使用四个字符:

光标字符 Unicode 码位
CURSOR_LTR 0xf00c
CURSOR_RTL 0xf00d
CURSOR_THAI 0xf00e
CURSOR_USA 0xfff (这是一个标记值,没有关联的字形)
 

若要获取 rcCaret 矩形中的实际插入点,请执行以下步骤。

  1. 调用 GetKeyboardLayout 以检索当前输入语言。
  2. 根据当前输入语言确定游标使用的字符。
  3. 使用 Sans Serif 调用 CreateFont 作为字体、 rcCaret 提供的高度和宽度 zero。 对于 fnWeight,请调用 SystemParametersInfo(SPI_GETCARETWIDTH, 0, pvParam, 0)。 如果 pvParam 大于 1,请将 fnWeight 设置为 700,否则将 fnWeight 设置为 400。
  4. 选择设备上下文中的字体 (DC) ,并使用 GetCharABCWidths 获取 B 相应光标字符的宽度。
  5. B 宽度添加到 rcCaret 以获取实际插入点。

调用 以检索前台线程的信息(例如,当窗口失去激活时),函数可能不会返回 GUITHREADINFO 结构中的有效窗口句柄。

DPI 虚拟化

GUITHREADINFO 结构的 rcCaret rect 中返回的坐标是与插入点关联的窗口的逻辑坐标。 它们不会虚拟化为调用线程的模式。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 winuser.h (包括 Windows.h)
Library User32.lib
DLL User32.dll
API 集 在 Windows 8.1) 中引入的 ext-ms-win-ntuser-window-l1-1-1 (

请参阅

概念性

GUITHREADINFO

GetCursorInfo

GetWindowThreadProcessId

引用

Windows