1
4

More than 5 years have passed since last update.

PowerShell でクリップボードの監視(履歴のロギング)

Last updated at Posted at 2016-12-24
  • クリップボードの内容に変更がないかを 1 秒おきにチェックする。
  • 変更があった場合は、コンソールに出力する。

result.png

コード

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 みたいな感じで取り出すことができるようにしたい。
1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4