AttachThreadInput
The AttachThreadInput
function attaches the input processing mechanism of one thread to that of
another thread.
BOOL AttachThreadInput(
DWORD idAttach, |
// thread to attach
|
DWORD idAttachTo, |
// thread to attach
to |
BOOL fAttach |
// attach or detach
|
); |
|
Parameters
idAttach
Specifies the
identifier of the thread to be attached to another thread. The thread to be
attached cannot be a system thread.
idAttachTo
Specifies the
identifier of the thread to be attached to. This thread cannot be a system
thread.
A thread
cannot attach to itself. Therefore, idAttachTo cannot equal idAttach.
fAttach
Specifies
whether to attach or detach the threads. If this parameter is TRUE, the two
threads are attached. If the parameter is FALSE, the threads are detached.
Return Values
If the
function succeeds, the return value is nonzero.
If the
function fails, the return value is zero. There is no extended error
information available.
Remarks
Windows
created in different threads typically process input independently of each
other. That is, they have their own input states (focus, active, capture
windows, key state, queue status, and so on), and they are not synchronized
with the input processing of other threads. By using the AttachThreadInput
function, a thread can attach its input processing to another thread. This also
allows threads to share their input states, so they can call the SetFocus
function to set the keyboard focus to a window of a different thread. This also
allows threads to get key-state information. These capabilities are not
generally possible.
The AttachThreadInput
function fails if either of the specified threads does not have a message
queue. The system creates a thread's message queue when the thread makes its
first call to one of the Win32 USER or GDI functions. The AttachThreadInput
function also fails if a journal record hook is installed. Journal record hooks
attach all input queues together.
Note that key
state, which can be ascertained by calls to the GetKeyState or GetKeyboardState
function, is reset after a call to AttachThreadInput.
Windows
NT: You cannot attach a thread to a
thread in another desktop.
See Also