GetActiveWindow アクティブウィンドウを取得

Cの宣言:

HWND GetActiveWindow(void)

VBの宣言:

Declare Function GetActiveWindow Lib "user32" () As Long

説明:

この関数を呼び出したスレッドが持つ全てのウィンドウの内、アクティブウィンドウのハンドルを取得する。スレッドがアクティブウィンドウを持たない場合、NULLが返される。 アクティブウィンドウの概念は、スレッドごとに存在する。

Windowsが管理している全てのウィンドウの内、ユーザの操作対象になっているウィンドウを取得したい場合は、GetForegroundWindowを使用しなければならない。

この関数を呼び出したスレッドが、(そのスレッドが属するプロセスの中で)最も優先順位の高いスレッドではない場合は、注意が必要である。スレッドが最も優先順位の高いスレッドでなくなった時に、スレッドが再び最も優先順位が高くなるかまたはSetActiveWindow関数が呼ばれるまでの間、アクティブウィンドウは存在しなくなる。

戻り値は、アクティブウィンドウのハンドルである。アクティブウィンドウが存在しない場合、NULLが返される。

Cのサンプル:

/* アクティブウィンドウのタイトルを表示する */
void DoGetActiveWindow()
{
	char buf[1000];
	HWND hWnd;

	/* アクティブウィンドウの取得 */
	hWnd = GetActiveWindow();

	/* ウィンドウタイトルの表示 */
	GetWindowText(hWnd, buf, 1000);
	MessageBox(NULL, buf, "DoGetActiveWindow", MB_OK);
}

VBのサンプル:

' アクティブウィンドウのタイトルをデバッグウィンドウに表示する
Sub Main()
	Dim hActiveWnd As Long
	Dim WndTitle As String * 1000
	Dim FormObj As Form1
	Dim I As Integer
	Dim Cnt As Integer

	'フォームを3つ作成
	For I = 1 To 3
		Set FormObj = New Form1
		With FormObj
			FormObj.Caption = "Form " & I
			FormObj.Left = FormObj.Left + 300 * I
			FormObj.Top = FormObj.Top + 300 * I
			FormObj.Show
		End With
	Next

	'アクティブウィンドウのタイトルを1000回表示
	Do
		'1000回表示したら終了
		Cnt = Cnt + 1
		If Cnt = 1000 Then Exit Do
	
		'アクティブウィンドウの取得
		hActiveWnd = GetActiveWindow()
	
		'ウィンドウタイトルの取得
		WndTitle = ""
		GetWindowText hActiveWnd, WndTitle, 1000
	
		'ウィンドウタイトルの表示
		Debug.Print WndTitle
	
		DoEvents
	Loop
End Sub
(original text:1998/12/25 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。