AttachThreadInput 函数 (winuser.h)

将一个线程的输入处理机制附加到或分离另一个线程的输入处理机制。

语法

BOOL AttachThreadInput(
  [in] DWORD idAttach,
  [in] DWORD idAttachTo,
  [in] BOOL  fAttach
);

参数

[in] idAttach

要附加到另一个线程的线程的标识符。 要附加的线程不能是系统线程。

[in] idAttachTo

idAttach 将附加到的线程的标识符。 此线程不能是系统线程。

线程无法附加到自身。 因此, idAttachTo 不能等于 idAttach

[in] fAttach

如果此参数为 TRUE,则附加两个线程。 如果参数为 FALSE,则分离线程。

返回值

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

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

Windows Server 2003 和 Windows XP: 没有扩展的错误信息;不要调用 GetLastError。 自 Windows Vista 起,此行为已更改。

注解

通过使用 AttachThreadInput 函数,线程可以共享其输入状态 (例如键盘状态,当前焦点窗口) 另一个线程。 通过再次调用 AttachThreadInput 并为 fAttach 参数指定 FALSE,将按照两个线程接收的顺序处理这两个线程接收的键盘和鼠标事件,直到这些线程被分离。

如果任一指定的线程没有消息队列, 则 AttachThreadInput 函数将失败。 当线程首次调用 USER 或 GDI 函数之一时,系统会创建线程的消息队列。 如果安装了日记记录挂钩, AttachThreadInput 函数也会失败。 日记记录挂钩将所有输入队列附加到一起。

请注意,键状态(可通过调用 GetKeyStateGetKeyboardState 函数确定)在调用 AttachThreadInput 后重置。 不能将线程附加到另一个 桌面中的线程。

要求

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

另请参阅

GetCurrentThreadId

GetKeyState

GetKeyboardState

GetWindowThreadProcessId

进程和线程函数

SetFocus

线程