エクセルVBA API FindWindowでハンドルを取得し、SetForegroundWindowで画面を最前面に表示する。
メモ帳を画面の最前面に表示する。
機能としては、「AppActivate」と全く同じですが、あえてAPIを使って処理をしてみました。
APIの理解の手助けになれば、幸いです。
2 得られる効果
メモ.txtを画面の最前面に表示する。
3 AppActivateの場合
まず、メモ.txtを開いておきます。その後、以下のモジュールが記載されているエクセルをActiveにして、モジュールを実行します。
Sub Sample2() AppActivate "メモ.txt - メモ帳", True End Sub
構文
AppActivate title[,wait]
引数titleには、アクティブにするアプリケーションのタイトルを指定します。
引数waitは省略可能です。TrueまたはFalseを指定します。
title部分がどこかというと、黄色の蛍光ペン部分です。
以下↓↓(メモ帳が最前面になります。)
AppActivateの使い方がわかったところで、次はAPIを使って同じことをやりましょう!
4 APIを使って、メモ帳を画面の最前面に!
まずは、ソースコードを記述します。
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Sub SetForegroundWindow Lib "user32" (ByVal hWnd As Long) Sub キャプション名からウインドウハンドルを取得する() Dim hWnd As Long hWnd = FindWindow(vbNullString, "メモ.txt - メモ帳") 'caption名からハンドルを取得 SetForegroundWindow (hWnd) '画面を最前列に表示する End Sub
これだけです。Declare~はモジュールレベル部分(一番上)に記載します。
これで、「AppActivate "メモ.txt - メモ帳", True」と全く同じ処理が可能となります。
5 APIを使うメリット
AppAtivateメソッドをキャプション名を引数に入れて実行してもウインドウを最前面にすることはできますが、ウインドウハンドルを取得できれば、最前面に表示してアクティブにもできますし、キーボードやマウスでの操作も可能になります。
6 感想
ハンドルを取得する、ということに抵抗感があったのですが、AppActivateとの使い方と比較すると意外と簡単なことでした。あとはどう応用するか。