Excelでウィンドウハンドルを取得するVBA|APIで簡単に取得可能

Windows APIを使用しウィンドウハンドルを取得するVBAを掲載しています。



Homeに戻る > Excel プログラムのTipsへ

例えば、他のアプリのウィンドウサイズを変更したい場合や、タイトルを取得したい場合などにハンドル値が必要な場合がよくあります。

ハンドル値はWindows APIで使用する場合に使われる場合が多く、取得もAPIで可能です。

ここでは、ユーザーフォーム・Excelウィンドウ・デスクトップのハンドルを取得する方法を掲載します。

ウィンドウハンドルを取得するには、FindWindowを使用します。

FindWindowの構文:

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

戻り値:成功すると、ウィンドウのハンドルが返ります。見つからないと、NULLが返ります。

主なアプリのウィンドウクラス名は下記になります。

アプリケーション名 ウィンドウクラス名
Excel XLMAIN
Word OpusApp
Access OMain
PowerPoint PP10FrameClass
エクスプローラ ExploreWClass
メモ帳 Notepad
ペイント MSPaintApp

デスクトップのハンドルを取得するには、GetDesktopWindowを使用します。

GetDesktopWindowの構文:

Declare Function GetDesktopWindow Lib "user32" () As Long

戻り値:成功すると、デスクトップのハンドルが返ります。見つからないと、NULLが返ります。


ウィンドウハンドルを使用する「Excel VBA:他のファイルを実行する、他のファイルを開く」を掲載していますので、参考にしてください。




ウィンドウハンドルを取得するVBA

Excel VBA シートコード

VBAの解説

  1. DeclareステートメントでFindWindowを宣言します。
  2. DeclareステートメントでGetDesktopWindowを宣言します。
  3. コマンドボタン1のクリックイベントで、ユーザーフォームのハンドルを取得します。
    FindWindowの引数に、NULL値(vbNullString)とフォームのタイトルを指定し実行します。
  4. コマンドボタン2のクリックイベントで、Excel本体のハンドルを取得します。
    FindWindowの引数に、Excelのウィンドウクラス名XLMAINと、Excelのタイトルを指定し実行します。
  5. コマンドボタン3のクリックイベントで、GetDesktopWindowを実行しデスクトップのハンドルを取得を取得します。
'ウィンドウハンドルを取得する
Private Declare Function FindWindow Lib "user32" _
       Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

'デスクトップのハンドルを取得する
Private Declare Function GetDesktopWindow Lib "user32" () As Long

'コマンドボタンのクリックイベント
Private Sub CommandButton1_Click()
    Dim hwnd As Long
    
    'ユーザーフォームのハンドルを取得
    hwnd = FindWindow(vbNullString, Me.Caption)
End Sub

'コマンドボタンのクリックイベント
Private Sub aaCommandButton2_Click()
    Dim hwnd As Long
    
    'Excelのハンドルを取得
    hwnd = FindWindow("XLMAIN", Application.Caption)
End Sub

'コマンドボタンのクリックイベント
Private Sub aaCommandButton3_Click()
    Dim hwnd As Long
    
    'デスクトップのハンドルを取得する
    hwnd = GetDesktopWindow
End Sub


Homeに戻る > Excel プログラムのTipsへ

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved