AttachThreadInput

【勇芳软件工作室】汉化HomePreviousNext

AttachThreadInput函数将一个线程的输入处理机制附加到另一个线程的输入处理机制。

BOOL AttachThreadInput(

DWORD 【idAttach】,//线程附加
DWORD 【idAttachTo】,//线程附加到
BOOL 【fAttach】//附加或分离
); 

参数

【idAttach】

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

【idAttachTo】

指定要附加到的线程的标识符。这个线程不能是系统线程。

线程不能附加到自身。因此,【idAttachTo】不能等于【idAttach】.

【fAttach】

指定是否附加或分离线程。如果此参数为TRUE,则会连接两个线程。如果参数为FALSE,则线程将被分离。

返回值

如果函数成功,返回值不为零。

如果函数失败,返回值为零。没有可用的扩展错误信息。

备注

在不同线程中创建的Windows通常会彼此独立地进行输入。也就是说,它们具有自己的输入状态(焦点,活动,捕获窗口,键状态,队列状态等),并且它们与其他线程的输入处理不同步。通过使用AttachThreadInput函数,一个线程可以将其输入处理附加到另一个线程。这也允许线程共享其输入状态,因此他们可以调用SetFocus函数将键盘焦点设置为不同线程的窗口。这也允许线程获取密钥状态信息。这些功能通常是不可能的。

如果任一指??定的线程没有消息队列,AttachThreadInput函数将失败。当线程首次调用Win32 USER或GDI函数之一时,系统会创建线程的消息队列。如果安装了日记记录挂钩,AttachThreadInput功能也将失败。日志记录钩子将所有输入队列连接在一起。

请注意,通过调用GetKeyStateGetKeyboardState函数可以确定的密钥状态在调用AttachThreadInput后将重置。

Windows NT:您不能将线程附加到另一台桌面上的线程。

也可以看看

GetCurrentThreadId, GetKeyState, GetKeyboardState, GetWindowThreadProcessId, SetFocus