HOME > 即効テクニック > AccessVBA > コントロール > ウィンドウハンドルからクラス名を取得する

即効テクニック

コントロール

ウィンドウハンドルからクラス名を取得する

(Access 2000/2002/2003)
●概要●
宣言文  Declare Function GetClassName Lib "user32" Alias "GetClassNameA"
        (ByVal hwnd As Long , ByVal lpClassName As String , ByVal nMaxCount 
        As Long) As Long

設定項目    内容
hwnd      ウィンドウハンドルを指定[省略不可]
lpClassName   クラス名を取得する固定長文字列型変数を指定[省略不可]
nMaxCount    クラス名を取得する変数の固定長文字列型変数の長さを指定
        [省略不可]

引数で指定したウィンドウハンドルを持つウィンドウが属するウィンドウクラス名を引数として返します。
戻り値は読み込んだバイト数で、失敗時には「0」を返します。
引数には固定長文字列型変数を指定し、取得した固定長文字列型変数の値からLeft関数などの文字列操作関数を使って、クラス名を取得します。
次のコードは、フォアグラウンドウィンドウの属するウィンドウクラス名をメッセージダイアログで表示するサンプルです。

●サンプル●
Private Declare Function GetForegroundWindow _
    Lib "user32" () As Long
Private Declare Function GetClassName _
    Lib "user32" Alias "GetClassNameA" _
    (ByVal hwnd As Long _
    , ByVal lpClassName As String _
    , ByVal nMaxCount As Long) As Long

'ウィンドウハンドルからクラス名を取得する
Sub Sample()
    Dim myHwnd As Long
    Dim myFixClassName As String * 255
    Dim myClassName As String
    'フォアグラウンドウィンドウのウィンドウハンドルを取得
    myHwnd = GetForegroundWindow()
    'フォアグラウンドウィンドウのクラス名を取得して表示
    GetClassName myHwnd, myFixClassName, Len(myFixClassName)
    myClassName _
        = Left$(myFixClassName, InStr(myFixClassName, vbNullChar) - 1)
    MsgBox myClassName
End Sub

●補足1●
フォアグラウンドウィンドウとは、ユーザーが操作できるウィンドウ(アクティブウィンドウ)のことです。

●補足2●
戻り値を必要としない場合には、Subプロシージャとして宣言してもかまいません。

Declare Sub GetClassName Lib "user32" Alias "GetClassNameA"(ByVal hwnd 
As Long , ByVal lpClassName As String , ByVal nMaxCount As Long)