HOME > 即効テクニック > AccessVBA > Windows環境・オブジェクト > クラス名からウィンドウハンドルを取得する

即効テクニック

Windows環境・オブジェクト

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

(Access 2000/2002/2003)
●概要●
宣言文 Declare Function FindWindow Lib "user32" Alias "FindWindowA"
    (ByVal lpClassName As String, ByVal lpWindowName As String)
    As Long

設定項目    内容
pClassName   ウィンドウが属するウィンドウクラス名を指定[省略不可]
lpWindowName  ウィンドウのタイトルバーの文字列を指定[省略不可]

ウィンドウ操作を行う場合には、ウィンドウハンドルを利用します。
引数で指定したウィンドウクラス名と、引数で指定したタイトルバーの文字列からウィンドウハンドルを取得します。一方もしくは両方を指定しない場合には、組み込み定数「vbNullString」(値0の文字列)を指定します。
ウィンドウには重なり順(Zオーダー)があり、最前面のウィンドウから順に検索します。戻り値はウィンドウハンドルで、失敗時には、「0」を返します。
次のコードは、メモ帳のウィンドウハンドルを取得して、メッセージダイアログで表示するサンプルです。

●サンプル●
Private Declare Function FindWindow _
    Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String _
    , ByVal lpWindowName As String) As Long

'クラス名からウィンドウハンドルを取得する
Sub Sample()
    Dim myHwnd As Long
    'メモ帳のウィンドウハンドルの取得
    myHwnd = FindWindow("Notepad", vbNullString)
    MsgBox myHwnd
End Sub

●補足1●
サンプルは、メモ帳を起動してから実行してください(メモ帳が起動していない場合は、メッセージダイアログに「0」が表示されます)。

●補足2●
ウィンドウクラス名の主なものを挙げると次のようになります。

アプリケーション    ウィンドウクラス名
Access         OMain
Excel          XLMAIN
Word          OpusApp
PowerPoint       PP10FrameClass
Internet Explorer    IEFrame
Visual Basic Editor   wndclass_desked_gsk
エクスプローラ     ExploreWClass
メモ帳         Notepad
ワードパッド      WordPadClass
電卓          SciCalc
ペイント        MSPaintApp

●補足3●
Accessアプリケーションのウィンドウハンドルは、ApplicationオブジェクトのhWndAccessAppメソッドで取得できます。