AttachThreadInput 関数 (winuser.h)

あるスレッドの入力処理メカニズムを別のスレッドの入力処理メカニズムにアタッチまたはデタッチします。

構文

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

パラメーター

[in] idAttach

別のスレッドにアタッチするスレッドの識別子。 アタッチするスレッドをシステム スレッドにすることはできません。

[in] idAttachTo

idAttach がアタッチされるスレッドの識別子。 このスレッドをシステム スレッドにすることはできません。

スレッドはそれ自体にアタッチできません。 したがって、 idAttachTo はidAttach と等しくできません。

[in] fAttach

このパラメーターが TRUE の場合、2 つのスレッドがアタッチされます。 パラメーターが FALSE の場合、スレッドはデタッチされます。

戻り値

関数が成功すると、戻り値は 0 以外になります。

関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

Windows Server 2003 および Windows XP: 拡張エラー情報はありません。 GetLastError を呼び出さないでください。 この動作は、Windows Vista の時点で変更されました。

注釈

AttachThreadInput 関数を使用すると、スレッドは入力状態 (キーボードの状態や現在のフォーカス ウィンドウなど) を別のスレッドと共有できます。 両方のスレッドで受信したキーボード イベントとマウス イベントは、スレッドがデタッチされるまで、受け取った順序で処理されます。これは、AttachThreadInput を 2 回目に呼び出し、fAttach パラメーターに FALSE を指定することで行われます。

指定したスレッドのいずれかにメッセージ キューがない場合、 AttachThreadInput 関数は失敗します。 システムは、スレッドが USER 関数または GDI 関数の 1 つを最初に呼び出すときに、スレッドのメッセージ キューを作成します。 ジャーナル レコード フックがインストールされている場合、 AttachThreadInput 関数も失敗します。 ジャーナルレコード フックは、すべての入力キューを一緒に接続します。

GetKeyState 関数または GetKeyboardState 関数の呼び出しによって確認できるキー状態は、AttachThreadInput の呼び出し後にリセットされることに注意してください。 スレッドを別の デスクトップのスレッドにアタッチすることはできません。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー winuser.h (Windows.h を含む)
Library User32.lib
[DLL] User32.dll
API セット ext-ms-win-ntuser-misc-l1-2-0 (Windows 8.1で導入)

こちらもご覧ください

GetCurrentThreadId

GetKeyState

GetKeyboardState

GetWindowThreadProcessId

プロセス関数とスレッド関数

SetFocus

スレッド