Chromeのウィンドウハンドルを取得して半透明にして操作【ExcelVBA × SeleniumBasic ×WindowsAPI】
GoogleChromeのウィンドウハンドルを取得する為に、現在作業中のウィンドウのハンドルを取得するWindowsAPIを使用
GoogleChromeを起動後、GetForegroundWindow関数でウィンドウハンドルを取得し、そのウィンドウに対して
SetWindowLongPtr関数を使用し、ウィンドウ属性を変更し、新しいウィンドウ拡張スタイルでレイヤードウィンドウを指定
そしてSetLayeredWindowAttributes関数でウィンドウの透明度を指定していく
GetForegroundWindow関数の宣言コード
Declare PtrSafe Function GetForegroundWindow Lib "user32" () As LongPtr
実際に使用したコード-------------------------------------------------
Option Explicit
Declare PtrSafe Function SetWindowLongPtr Lib "user32" Alias "SetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
Declare PtrSafe Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As LongPtr, ByVal crKey As Long, ByVal bAlpha As Long, ByVal dwFlags As Long) As Long
Declare PtrSafe Function GetForegroundWindow Lib "user32" () As LongPtr
Public Sub Sample()
'driverのインスタンス化
Dim driver As New Selenium.ChromeDriver
'指定したサイトへ接続
driver.Get "https://vba.company/"
'ハンドルを用意
Dim ハンドル As LongPtr
'前景ウインドウのハンドルを取得
ハンドル = GetForegroundWindow
'新しい拡張ウインドウスタイルを設定
SetWindowLongPtr ハンドル, -20, 524288
'ウインドウの不透明設定 100/255
SetLayeredWindowAttributes ハンドル, 0, 200, 2
'ウィンドウの場所を指定
driver.Window.SetPosition 100, 100
'ウィンドウのサイズを指定
driver.Window.SetSize 500, 500
End Sub