小甲鱼 发表于 2016-8-9 17:37:10

AttachThreadInput

注:本文档由 百日维新 翻译,小甲鱼校对。

原文链接 -> 传送门

函数功能:

AttachThreadInput 函数用于附加或分离一个线程与另一个线程的输入处理机制。


API 函数原型:

注释:_In_ 说明该参数是输入的。
BOOL WINAPI AttachThreadInput(
_In_ DWORD idAttach,
_In_ DWORD idAttachTo,
_In_ BOOLfAttach
);

参数解析:


参数 含义
idAttach 指定被附加到另一个线程的线程标识符(该线程不能是系统线程)
idAttachTo1. 指定另一个线程的线程标识符(该线程不能是系统线程
2. 因为线程不能自身附加,所以被附加的线程和另一个线程不能为同一线程
fAttach1. 如果这个参数为 TRUE,这两个线程附加
2. 如果这个参数为 FALSE,这两个线程分离


返回值:

1. 如果函数调用成功,返回值是非 0;

2. 如果函数调用失败,返回值是 0。

若想获得更多的错误信息,请调用 GetLastError 函数。

Windows Server 2003 和 Windows XP:不能调用 GetLastError 函数获取扩展的错误信息。在 Windows Vista 之后的版本提供支持。


备注:

1. 不同线程中创建的窗口通常彼此独立地处理输入。也就是说,他们拥有自己各自的输入状态(聚焦,活动,捕获窗口,虚拟键状态,队列状态,等等)。同时,它们的输入处理不与其他线程的输入处理同步。通过使用 AttachThreadInput 函数,一个线程可以将其输入处理机制附加到另一个线程中,直到线程第二次调用 AttachThreadInput 函数(指定 fAttach 参数为 FALSE)才能使线程分离,否则这两个线程接收的键盘和鼠标事件由 idAttachTo 参数指定的线程处理。这也允许线程共享它们的输入状态,因此它们可以调用 SetFocus 函数设置键盘焦点到另一个不同线程的窗口。这也允许线程获取虚拟键状态信息。

2. 如果这两个指定的线程都没有消息队列,那么 AttachThreadInput 函数调用失败。当线程第一次调用与用户相关的函数或与图形设备接口相关的函数时,系统会创建线程的消息队列。如果安装了日志记录钩子,AttachThreadInput 函数也会调用失败。日志记录钩子附加所有的输入队列。

3. 注意:通过 GetKeyState 函数或 GetKeyboardState 函数获取的虚拟键状态,在调用一次 AttachThreadInput 函数后将被重置。您不能在另一个桌面把一个线程附加到另一个线程。


需求:


Minimum supported client Windows XP [仅桌面应用程序]
Minimum supported server Windows 2003 服务器版 [仅桌面应用程序]
Header Winuser.h (包含于 Windows.h)
Library User3232.lib
DLL User3232.dll


【API档案】版权归鱼C工作室(www.fishc.com)所有,转载请注明来源。

页: [1]
查看完整版本: AttachThreadInput