大人の事情でPCを業務に応じて使い分けないといけないときってあると思います(あるんです!)。そしてPCを複数台併用しているとクリップボードの同期がしたくなってきます(とくにメール書いてるときとか)。
ちまたにはクリップボードの同期をする方法はたくさんあります(たとえばWindows 10ではMSアカウント作成すればクリップボードの同期が可能)。
ただ、大人の事情でツールのインストールや設定変更が制限されてることってあると思います(あるんです!)。だけどもだけども、どうにかしてクリップボードを同期させたいなと思い少し考えたというのがこの記事です。
私の環境はよくよく考えると運の良いことに共有フォルダーをPC間で使える状態だったのでこれを利用することにしました。
共有フォルダーが使えるのであれば、早い話が「クリップボードの内容を共有フォルダーに書き込む」and「共有フォルダーを読み込んでクリップボードにセットする」ができればとりあえずはよさそうです。
今回はこれらをインストール不要で実行できる必要があるためPowerShellさんのお世話になりたいと思います。
走り書きですが書いてみました。
$XML = [XML](Get-Content .\config.xml)
New-Item -ItemType Directory -Force -Path $XML.Path
if(!(test-path $XML.Path)){
throw "Invalid path."
}
$text = Get-Clipboard -Format Text
if ($text) {
Remove-Item (Join-Path $XML.Path *) -Recurse
$text > (Join-Path $XML.Path clipboard.txt)
exit
}
$image = Get-Clipboard -Format Image
if ($image) {
Remove-Item (Join-Path $XML.Path *) -Recurse
$image.Save((Join-Path $XML.Path clipboard.png), [System.Drawing.Imaging.ImageFormat]::Png)
exit
}
$files = Get-Clipboard -Format FileDropList
if ($files) {
Remove-Item (Join-Path $XML.Path *) -Recurse
$data = Join-Path $XML.Path clipboard
New-Item -ItemType Directory -Force -Path $data
$files | ForEach-Object{Copy-Item $_.FullName $data -Recurse}
exit
}
Write-Error "The clipboard is empty or an unsupported file format."
Get-Clipboardを利用して指定のパス(上記では$XML.Path
)配下にクリップボードの中身を書き込んでいます。ここではクリップボードの中身がテキスト、画像、ファイルパスの場合に対応できるようそれぞれ処理を書いています。その他の形式は対応していません。
$XML = [XML](Get-Content .\config.xml)
$cliptext = Join-Path $XML.Path clipboard.txt
if (test-path $cliptext) {
Get-Content $cliptext | Set-Clipboard
exit
}
$clipimage = Join-Path $XML.Path clipboard.png
if (test-path $clipimage) {
Add-Type -Assembly System.Windows.Forms
Add-Type -Assembly System.Drawing
$image = [Drawing.Image]::FromFile($clipimage)
[Windows.Forms.Clipboard]::SetImage($image)
exit
}
$clipdir = Join-Path $XML.Path clipboard
if (test-path $clipdir) {
Set-Clipboard -Path (Join-Path $clipdir *)
exit
}
Write-Error "The file or directory is not found."
書き込み時に作成したファイル(またはフォルダー)が存在していれば、Set-Clipboardを用いてその中身をクリップボードに設定しています。画像に関してはSet-Clipboardではどうも設定できなさそうだったので、Windows.Forms.Clipboardを呼び出しています。
これで一応共有フォルダー介してクリップボード(テキスト、画像、ファイルのみ)の同期ができるようになりました。やったね。
PowerShellを実行しようとするともしかしたら管理者権限を求められるかもしれませんが回避する方法はたくさんあります(管理者権限なしでPowerShellスクリプトを実行する方法)。
また、各スクリプトを実行するショートカットを作成したりさらにショートカットキーを割り当てればより便利かも。
似たような境遇の方の参考になればとここに供養しておきます。
(あとPowerShell書きにくい…)