xlogI125’s blog

パソコン作業を効率化したい

ファイル作成時に通知領域にアイコンを表示 2

メモ

  • NotifyIconFileSystemWatcherのイベントをRegister-ObjectEventでsubscribe
  • Icon.ExtractAssociatedIconSystemIconsのアイコンを使用

使い捨てスクリプト

デスクトップにファイルを作成したとき、通知領域にファイルのアイコンを表示する。
ショートカットなどの新規作成時にtmpファイルを拾うけど気にしない。

# PowerShell 5.1, Windows 11 (2023年11月頃)

Set-StrictMode -Version Latest

Add-Type -AssemblyName System.Drawing, System.Windows.Forms

$filePath = $null

$ntf = [System.Windows.Forms.NotifyIcon]::new()
$ntf.Icon = [System.Drawing.SystemIcons]::Information
$ntf.Text = "パスの末尾が表示されます"
$ntf.Visible = $true

Register-ObjectEvent -InputObject $ntf -EventName "Click" -Action {
  Set-Clipboard $filePath
  $ntf.Icon = [System.Drawing.SystemIcons]::Information
  $ntf.Text = "パスの末尾が表示されます"
}

$watcher = [System.IO.FileSystemWatcher]::new()
$watcher.Path = "${env:USERPROFILE}\Desktop"
$watcher.Filter = "*"
$watcher.IncludeSubdirectories = $true
$watcher.NotifyFilter = [System.IO.NotifyFilters]::FileName

Register-ObjectEvent -InputObject $watcher -EventName "Created" -Action {
  ([ref]$filePath).Value = $EventArgs.FullPath

  $text = $filePath
  if ($text.Length -gt 63) { $text = $text.Substring($text.Length - 63) }

  try { $ntf.Icon = [System.Drawing.Icon]::ExtractAssociatedIcon($filePath) }
  catch { $ntf.Icon = [System.Drawing.SystemIcons]::Error }

  try { $ntf.Text = $text }
  catch { $ntf.Text = "最大文字数を超えています" }
}