はてなブックマークに追加
Facebookでシェア
Google+でシェア
Twitterでシェア
3.2 ウィンドウハンドル番号を取得する
デスクトップ上に開いているウィンドウには、全てOSが付けた管理番号が付いています。普段はあまり使うことはありませんが、物によっては(例えばDirectXなど)この番号が無いと使えない機能もあります。

各ウィンドウの管理番号が何番かを調べるときは、User32.dllというライブラリの中にあるFindWindowという関数を使って調べます。
FindWindow関数を定義する
API「FindWindow関数」を使うときですが、まずはこの関数がどこにある、どんなヤツなのかなど、この関数を使うための準備(定義)が必要です。

この関数を使うときは、標準モジュールを準備し(General)(Declarations)の所へ次のように記述します。なお、標準モジュールの追加方法はエクセルスマイルの「4.マクロを書く場所/標準モジュール」をどうぞ。

'標準モジュールの(General)(Declarations)へ記述します
Declare Function FindWindow Lib "User32.dll" Alias "FindWindowA" _
        (ByVal lpClassName As String, _
         ByVal lpWindowName As String) As Long
 ※このエクセルマクロは標準モジュール内へ記述するマクロです

簡単に説明すると、DeclareDLLの中にある関数を呼び出すときに付ける物で、Functionは関数の宣言。次が関数名GetAsyncKeyStateLibが関数の居場所で、この関数のときはUser32.dllを指定します。なお、この関数の戻り値はLong型です。引数は下を参照してください。

見慣れないうちは、なんだか難しいことが書いてあるな…と思うかも知れませんが、慣れるとどーってことありません。決まり事なので、悩まずにこのまま使ってしまいましょう。

 ◆FindWindowの引数
ByVal lpClassName As String 調べるウィンドウの種類を指定します。ちょっとだけ例を…
XLMAIN:エクセル
OPUSAPP:ワード
OMAIN:アクセス
PP10FRAMECLASS:パワーポイント2002
PP9FRAMECLASS:パワーポイント2000
PP97FRAMECLASS:パワーポイント97
IEFRAME:インターネットエクスプローラ
MSPaintApp:ペイント
WORDPADCLASS:ワードパッド
NOTEPAD:メモ帳
SCICALC:電卓
ByVal lpWindowName As String 調べるウィンドウのタイトルを指定します。
FindWindowの使用例
FindWindowの使用例です。例では、自分自身のウィンドウ番号を取得しイミディエイトウィンドウに出力しています。

FindWindowは、引数へウィンドウの種類ウィンドウのタイトルを設定し呼び出すと、戻り値にそのウィンドウの番号が返ります。なお、エクセルの場合、ウィンドウの種類はXLMAINを指定、ウィンドウ名はApplication.Captionで取得することが出来ます。

Sub prcFindWindow()

    'ウィンドウハンドル番号を取得します
    Debug.Print FindWindow("XLMAIN", Application.Caption)

End Sub
 ※このエクセルマクロはワークシート内へ記述するマクロです。
  別途、標準モジュールへFindWindow関数を定義する必要があります。


Copyright(C) 1999-2015 結城圭介(Ver.3.51) All rights reserved