サイト管理人Blog

cloudfreeで「さぁ始めましょう♪」

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ライブラリの文法がよくわかっていないので無駄があるかも知れませんが、とりあえずマイ環境ではこれでうまくいってます。

投稿へのコメントは コチラ(掲示板) へお願いします。

サイト管理人Blog