- クリップボードの内容に変更がないかを 1 秒おきにチェックする。
- 変更があった場合は、コンソールに出力する。
コード
ClipboardObserver.ps1
# set window title
(Get-Host).UI.RawUI.WindowTitle = $MyInvocation.MyCommand
# クリップボードのテキストを取得する
Add-Type -AssemblyName System.Windows.Forms
$clipText = [Windows.Forms.Clipboard]::GetText()
# コンソールに出力する
Write-Host $clipText
while ($true)
{
# クリップボードのテキストを再度取得し、前回の分から変更がないかチェックする
$latestClipText = [Windows.Forms.Clipboard]::GetText()
if ($latestClipText -ne $clipText)
{
# 変更があった場合は更新する
$clipText = $latestClipText
# コンソールに出力する
Write-Host "- - -"
Write-Host $clipText
}
# 1秒スリープ
Start-Sleep -Seconds 1
}
Windows 7 で実行する際の注意点
Windows 7 (PSVersion=2.0) の場合、そのままだと動かない。
これは Clipboard クラスが、STA モード時でのみ使用可能であるのに対して、Windows 7 はデフォルトが MTA モードになっているため。
これを解決するには、明示的に STA モードで動作させる必要がある。cmd でラップすると:
ClipboardObserverRunner.bat
set THIS_FILE_PATH=%~dp0
powershell.exe -STA -File "%THIS_FILE_PATH%ClipboardObserver.ps1"
展望
- クリップボードの履歴をリストで保持しておいて、yank-pop みたいな感じで取り出すことができるようにしたい。