GetWindowText タイトルバーやコントロール内に表示されている文字列の取得

Cの宣言:

int GetWindowText(HWND hWnd, LPTSTR sWndTitle, int cLen);

VBの宣言:

Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" ( _
	ByVal hWnd As Long, _
	ByVal sWndTitle As String, _
	ByVal cLen As Long) As Long

説明:

hWndが示すウィンドウのタイトルバーに表示されている文字列を取得する。または、hWndが示すコントロール内の文字列を取得する。コントロール内の文字列とは、例えばhWndがボタンのウィンドウハンドルならば、ボタン名のことである。

hWndが示すウィンドウがコントロールの場合、以下のような文字列が返される。
エディットコントロール エディットコントロールの内容
ボタン ボタン名
コンボボックス コンボボックスのエディットコントロール部分の内容

引数の意味は、以下の通り。
hWnd (IN) ウィンドウテキストの取得元ウィンドウを表すウィンドウハンドル。
WndTitle (OUT) ウィンドウテキストを格納するバッファ。
cLen (IN) ウィンドウテキストを格納するバッファのサイズ。

戻り値は、取得結果の文字数である。取得に失敗すると、0が戻される。

主なエラーは、以下の通り。
XXXXX ウィンドウハンドルが誤っている
XXXXX hWndが指すウィンドウはウィンドウテキストを持たない
XXXXX バッファへのポインタが不正
XXXXX バッファのサイズが足りない

Cのサンプル:

/* フォアグラウンドウィンドウのタイトルを表示する */
void DoGetForegroundWindow()
{
	char buf[1000];
	HWND hWnd;

	/* フォアグラウンドウィンドウの取得 */
	hWnd = GetForegroundWindow();

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

VBのサンプル:

'フォアグラウンドウィンドウのタイトルをデバッグウィンドウに表示する
Sub Main()
	Dim hForegroundWnd As Long
	Dim WndTitle As String * 1000
	Dim Cnt As Integer

	'フォアグラウンドウィンドウのタイトルを1000回表示
	Do
		'1000回表示したら終了
		Cnt = Cnt + 1
		If Cnt = 1000 Then Exit Do

		'フォアグラウンドウィンドウの取得
		hForegroundWnd = GetForegroundWindow()

		'ウィンドウタイトルの取得
		WndTitle = ""
		GetWindowText hForegroundWnd, WndTitle, 1000

		'ウィンドウタイトルの表示
		Debug.Print WndTitle

		DoEvents
	Loop
End Sub


(original text:1998/12/25 更新)

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