スポンサーリンク
動作準備
今回は、前回の記事で扱ったエクセル、プログラムを利用することを前提とした「親ウィンドウハンドルの配列からハンドル情報を取得する方法」を紹介します。
まだ前回の記事を読まれていない方は、是非下記リンクから一読して頂けると嬉しいです。
-
VBA:ハンドル情報(hwnd)配列取得・一覧出力[No70]
VBAでウィンドウハンドル(Window Handle、HWND)を操作するには、次の情報が1つ以上必要です。 ハンドル番号(HAND ID、Handle ID、hwnd ID、Hw ...
プログラム
ハンドル番号から取得する
Option Explicit
Public Sub ViewHwnd()
Dim ArrayHWND(3) As Variant
Dim hwndNo As Long
hwndNo = 1246624
Dim ArrayTest As Variant
ArrayTest = GetWindowHwnd(hwndNo)
If IsEmpty(ArrayTest) = True Then
MsgBox "Nothing. ViewHwnd"
Exit Sub
Else
hwndNo = ArrayTest(1)
If hwndNo = 0 Then
MsgBox "Error. ViewHwnd"
Exit Sub
Else
MsgBox "HAND種類:" & ArrayTest(0) & vbCrLf & _
"ハンドル番号:" & ArrayTest(1) & vbCrLf & _
"キャプション名:" & ArrayTest(2) & vbCrLf & _
"クラス名:" & ArrayTest(3)
End If
End If
End Sub
Private Function GetWindowHwnd(ByVal tempHwndNo As Long) As Variant
Dim ArrayHWND(3) As Variant
Erase ArrayHWND
'シートにハンドル情報を出力したい場合(GetAllParentHwnd処理含)
' Call ハンドル情報出力
'ハンドル情報を配列に格納だけしたい場合
Call GetAllParentHwnd
' ハンドル情報の入っている配列
' Array_hwndTypeName | Array_hwndNo | Array_captionName |Array_className
Dim i As Long
For i = LBound(Array_hwndTypeName) To UBound(Array_hwndTypeName)
If Array_hwndNo(i) = tempHwndNo Then
ArrayHWND(0) = Array_hwndTypeName(i)
ArrayHWND(1) = Array_hwndNo(i)
ArrayHWND(2) = Array_captionName(i)
ArrayHWND(3) = Array_className(i)
GetWindowHwnd = ArrayHWND
Exit For
End If
Next i
End Function
スポンサーリンク
キャプション名から取得する
Public Sub ViewHwnd()
Dim ArrayHWND(3) As Variant
Dim hwndNo As Long
Dim captionName As String
captionName = "hogehoge_01.xlsm"
Dim ArrayTest As Variant
ArrayTest = GetWindowHwnd(captionName)
If IsEmpty(ArrayTest) = True Then
MsgBox "01:Nothing Or Error. ViewHwnd"
Exit Sub
Else
hwndNo = ArrayTest(1)
If hwndNo = 0 Then
MsgBox "02:Nothing Or Error. ViewHwnd"
Exit Sub
Else
MsgBox "HAND種類:" & ArrayTest(0) & vbCrLf & _
"ハンドル番号:" & ArrayTest(1) & vbCrLf & _
"キャプション名:" & ArrayTest(2) & vbCrLf & _
"クラス名:" & ArrayTest(3)
End If
End If
End Sub
Private Function GetWindowHwnd(ByVal tempCaptionName As String) As Variant
Dim ArrayHWND(3) As Variant
Erase ArrayHWND
'シートにハンドル情報を出力したい場合(GetAllParentHwnd処理含)
' Call ハンドル情報出力
'ハンドル情報を配列に格納だけしたい場合
Call GetAllParentHwnd
' ハンドル情報の入っている配列
' Array_hwndTypeName | Array_hwndNo | Array_captionName |Array_className
Dim i As Long
For i = LBound(Array_hwndTypeName) To UBound(Array_hwndTypeName)
'StrComp 関数の場合は完全一致、InStr関数の場合は部分一致
If InStr(1, Array_captionName(i), tempCaptionName, vbBinaryCompare) <> 0 Then
ArrayHWND(0) = Array_hwndTypeName(i)
ArrayHWND(1) = Array_hwndNo(i)
ArrayHWND(2) = Array_captionName(i)
ArrayHWND(3) = Array_className(i)
GetWindowHwnd = ArrayHWND
Exit For
End If
Next i
End Function
スポンサーリンク
クラス名から取得する
Option Explicit
Public Sub ViewHwnd()
Dim ArrayHWND(3) As Variant
Dim hwndNo As Long
Dim captionName As String
captionName = "wndclass_desked_gsk"
Dim ArrayTest As Variant
ArrayTest = GetWindowHwnd(captionName)
If IsEmpty(ArrayTest) = True Then
MsgBox "Nothing. ViewHwnd"
Exit Sub
Else
hwndNo = ArrayTest(1)
If hwndNo = 0 Then
MsgBox "Error. ViewHwnd"
Exit Sub
Else
MsgBox "HAND種類:" & ArrayTest(0) & vbCrLf & _
"ハンドル番号:" & ArrayTest(1) & vbCrLf & _
"キャプション名:" & ArrayTest(2) & vbCrLf & _
"クラス名:" & ArrayTest(3)
End If
End If
End Sub
Private Function GetWindowHwnd(ByVal tempClassName As String) As Variant
Dim ArrayHWND(3) As Variant
Erase ArrayHWND
'シートにハンドル情報を出力したい場合(GetAllParentHwnd処理含)
' Call ハンドル情報出力
'ハンドル情報を配列に格納だけしたい場合
Call GetAllParentHwnd
' ハンドル情報の入っている配列
' Array_hwndTypeName | Array_hwndNo | Array_captionName |Array_className
Dim i As Long
For i = LBound(Array_hwndTypeName) To UBound(Array_hwndTypeName)
''' 'StrComp 関数の場合は完全一致、InStr関数の場合は部分一致
If InStr(1, Array_className(i), tempClassName, vbBinaryCompare) <> 0 Then
ArrayHWND(0) = Array_hwndTypeName(i)
ArrayHWND(1) = Array_hwndNo(i)
ArrayHWND(2) = Array_captionName(i)
ArrayHWND(3) = Array_className(i)
GetWindowHwnd = ArrayHWND
Exit For
End If
Next i
End Function
実行イメージ
Sub「ViewHwnd」を実行し、上手くハンドルを取得できるとMsgBoxでその情報が表示されます。
もし取得できなければ「Nothing Or Error. ViewHwnd」とメッセージボックスが出力されます。
おすすめ
確認するためには、ある程度ハンドル情報を把握していないといけません。その情報は以下の記事に沿って作業することで得ることができると思います。
シートに書き出した情報からハンドル情報を知りたい場合は、こちらの下記2つの記事を参照して下さい。
-
VBA:ハンドル情報(hwnd)配列取得・一覧出力[No70]
VBAでウィンドウハンドル(Window Handle、HWND)を操作するには、次の情報が1つ以上必要です。 ハンドル番号(HAND ID、Handle ID、hwnd ID、Hw ...
その他、ツールを用いてウィンドウハンドル情報を取得しておきたい場合はこちらの記事。
-
VBAでHandle等を用いて他のアプリケーションを操作する方法[No20]
VBAでIE(Internet Explorer)の操作ができるようになり、次は他のアプリケーションを操作する方法について自分用のメモとして残しておくので、定期的な確認作業をオートメ ...
-
Windowsアプリケーション(ソフトウェア)のハンドル情報まとめ[No21]
Windowsのアプリケーションはハンドル(Hadle)で構成されています。今回はアプリケーションのハンドル情報を記載していきたいと思います。 徐々に追記していきます。 Window ...
備考
- 何故「LBound(Array_hwndTypeName)」、「UBound(Array_hwndTypeName)」となっているのか、その理由は、各配列は同じ要素数になっているためです。
- 各配列の同じ配列番号に格納されているものは、同じhwnd情報です。例えば、「Array_hwndTypeName(25)」「Array_hwndNo(25)」「Array_captionName(25)」「Array_className(25)」は同じハンドルの情報となります。
- この作りでは、最初にヒットしたデータを返しています。
関連記事
-
ウィンドウハンドル関連の記事一覧[No74]
記事一覧 ハンドル番号、キャプション名、クラス名について書かれた記事のまとめです。 最後までお付き合いいただきありがとうございます! この情報が誰かの役にたてれば幸 ...
雑記
今日10月20日は、日本リサイクルネットワーク会議によって制定された「リサイクルの日」です。「ひとまわり(10)、ふたまわり(20)」の語呂合せが由来だそうで、そこから発展して、今では経済産業省他8省庁が10月を「リデュース・リユース・リサイクル推進月間」とし定めています。
皆さんは普段心掛けているリサイクルなどありますか?
私は地域の資源回収に協力したり、買い物の際は、他の製品と比べて、作る・使う・捨てる時に環境への影響が少ない製品であることを表すエコマークの付いたものを選んだりすることを心掛けています。
将来の地球のためにも、当たり前のようにリデュース・リユース・リサイクルができる人になりたいですね。
最後までお付き合いいただきありがとうございます!
この情報が誰かの役にたてれば幸いです。