VBAからPowerShell+.Netライブラリを利用してNotify
2024-01-17 記載
概要 : VBAからPowerShell+.Netライブラリを利用する
Keyword : PowerShell, WshShell, VBA, Excel
PowerShell+.Netライブラリ の活用方法(その2)は、UIを乱さない通知。
VBAで通知といえばMsgBoxですが、通知をするにせよ、モーダルダイアログは出しゃばりすぎと思うケースが少なくありません。そういうときに、システムトレイからピコーンと出てくる通知。MySQLやApacheのサービスを遅延起動させているときにサービス開始を知らせてくれるあの通知です。
これも.Netで出せるとわかりましたので、備忘録をかねてあげておきます。
Public Sub notify(ByVal sTitle As String, ByVal sMessage As String)
Dim wsh As New IWshRuntimeLibrary.WshShell 'CreateObject("Wscript.Shell")
Dim sCmd As String
sCmd = "powershell.exe -command " & Chr(34) & "& { "
sCmd = sCmd & "[reflection.assembly]::loadwithpartialname('system.windows.forms')"
sCmd = sCmd & "; [reflection.assembly]::loadwithpartialname('system.drawing')"
sCmd = sCmd & "; $notify = new-object system.windows.forms.notifyicon"
sCmd = sCmd & "; $notify.icon = [system.drawing.systemicons]::information"
sCmd = sCmd & "; $notify.visible = $true"
sCmd = sCmd & "; $notify.showballoontip(500, '" & sTitle & "',"
sCmd = sCmd & "'" & sMessage & "',[system.windows.forms.tooltipicon]::none)"
sCmd = sCmd & " }" & Chr(34)
wsh.Run sCmd, 0 ' 0=Window非表示
End Sub
私自身、PowerShell+.Netライブラリの文法がよくわかっていないので無駄があるかも知れませんが、とりあえずマイ環境ではこれでうまくいってます。