みなさん、スクリーンショット撮っていますか?
私はこういったブログで説明をするときなどにとてもよく使います。この記事にもスクリーンショットは多数登場しますよ。
Windowsでは「Windowsキー+Shiftキー+S」でスクリーンショットがカンタンに撮れます。
さて、このツイートが目について、Macはスクリーンショットを撮った後、ファイルとして自動保存されて便利だよな~と思ってしまいました。
#スクショ #Windows
— DTP Transit (@DTP_Transit) May 13, 2020
>「Dropbox」や「OneDrive」との連携は今のところできないようで「Windows+Shift+S」での自動保存はできません。
Windows 10の新機能「Windows+Shift+S」はどう使う? https://t.co/sA9493tFMF pic.twitter.com/bCQ8I0adzz
そうなんです。「Windowsキー+Shiftキー+S」のスクリーンショットでは、スクリーンショットの画像ファイルが自動保存されなく、クリップボードとSnipping Toolにスクリーンショットが入るだけで、ファイル保存は自分でおこなわなければいけません。ちょっと面倒ですよね……。PrintScreen(PrtScr)キーを使ったOneDriveフォルダーへの自動保存もありますが、範囲の指定の自由度が低いので…。
って本当にできないって誰が決めたんです?
ということで調べたら、英語のサイトにやり方が書かれていました。
アプリのインストールなどは不要で、Windows標準の機能だけで実現できます。
以下のサイトが出典です。
今回、こちらの記事の内容を(色々省略しながら)日本語で説明します。細かな説明や動作については出典をご確認ください。
動作原理
- 「Windowsキー+Shiftキー+S」を押して作成されたスクリーンショットの画像ファイルは、Windowsが指定したフォルダにサムネイルとともに自動生成される
- ファイルが自動生成されたことを検知して、ファイルをダウンロードフォルダーにコピーする(常駐するスクリプト)
上記のことをPowerShellのスクリプトとタスクスケジューラの機能で実現します。
PowerShellスクリプトを書く
今回はPowerShellのスクリプトを利用します。
以下のスクリプトを、例えば「D:\Apps\Windows Powershell Scripts\ScreenSnip Manager\Activate.ps1」としてテキストエディタなどで保存します。
このスクリプトの保存場所はあとで出てきます。
$watcher = New-Object System.IO.FileSystemWatcher; $watcher.Path = "$HOME\AppData\Local\Packages\MicrosoftWindows.Client.CBS_cw5n1h2txyewy\TempState\ScreenClip"; $watcher.Filter = "*.png"; $watcher.NotifyFilter = "FileName"; $watcher.EnableRaisingEvents = $true; $action = { $path = $Event.SourceEventArgs.FullPath; # Last chance for a file to unlock; Start-Sleep -Milliseconds 100; try { Add-Type -AssemblyName System.Drawing; # Open image file; $png = [System.Drawing.Image]::FromFile((Get-Item $path)); $dimensions = -join ($png.Width, " x ", $png.Height); # Skip automatic thumbnails which are always the same size; If ($dimensions -ne "364 x 180") { Copy-Item -Path $path -Destination "$HOME\Downloads\スクリーンショット-$(get-date -f yyyy-MM-dd-HHmmss.fff).png"; } } catch { Write-Host "Problem acquiring image"; } finally { $png.Dispose(); } } Register-ObjectEvent -InputObject $watcher -EventName "Created" -SourceIdentifier 'SnipGrab' -Action $action; Remove-Item -Path (Join-Path $watcher.Path '\*') -Recurse; while ($true){ Wait-Event -SourceIdentifier "SnipGrab"; };
スクリプトを見てもらうとわかりますが、
$HOME\AppData\Local\Packages\MicrosoftWindows.Client.CBS_cw5n1h2txyewy\TempState\ScreenClipにスクリーンショットの画像ファイルが生成されていることがわかります。
わかりやすく書くとこうなります。
【ドライブ名】:\Users\【ユーザー名】\AppData\Local\Packages\MicrosoftWindows.Client.CBS_cw5n1h2txyewy\TempState\ScreenClip
スクリプトができたら、もうほとんど終わったも同然です。
タスクスケジューラにスクリプトを登録する
Windowsにはスクリプトを自動実行させるツールがあります。それが「タスク スケジューラ」です。※タスクとスケジューラの間に半角スペースがあります。
タスク スケジューラを起動します。
Windowsキーを押して(もしくはWindowsキー+SかQ)「タスク」と入力すると出てきますのでアイコンをクリックして起動します。※画面はWindows 11 21H2です。
右側にある「タスクを作成」をクリックします。
全般タブ
名前を決めます。今回は「SnipShots manager」としました。
「ユーザーがログオンしているかどうかにかかわらず実行する」を選択します。
「パスワードを保存しない」にチェックを入れます。
※構成がWindows Vista…なのはいいのかな…?
トリガータブ
「新規」ボタンをクリックします。
「タスクの開始」を「ログオン時」にします。
「特定のユーザー」を選択します。
操作タブ
「新規」ボタンをクリックします。
「操作」は「プログラムの開始」にします。
「プログラム/スクリプト」は「powershell」と入力します。
「引数の追加」は以下のようにします。「-Path」のあとのアドレスは先ほど作成したPowerShellのスクリプトの場所です。
-Command "Get-Content -Path 'D:\Apps\Windows Powershell Scripts\ScreenSnip Manager\Activate.ps1' -Raw | Invoke-Expression"
「OK」ボタンを押して完了です。
すぐに実行する
あとはログオンすれば自動的にPowerShellのスクリプトが実行されて、「Windowsキー+Shiftキー+S」でスクリーンショットを撮ると自動的にダウンロードフォルダーにスクリーンショットのファイルが保存されます。
やりましたね!
この記事のスクリーンショットも今回のPowerShellのスクリプトを使って自動保存したファイルを使っています。
※ただし実サイズとサムネイルを含め2つファイルがダウンロードフォルダーにコピーされます。。
再ログオンが面倒な場合は、タスク スケジューラの真ん中に登録されているタスクが並んでいますので、今ほど作成したタスクを探して、右クリック→「実行する」を選択すると、すぐにPowerShellのスクリプトが有効になりますので試してみてください。
これでWindowsでの画面の説明資料の作成がカンタンになりますね!
それでは、よいWindowsライフを。
#Windows10 Creators Updateで新しいキーボードショートカットが追加されました。「画面の一部を切り取り、クリップボードへコピーする」キーボードショートカットをご紹介。 #MSHelpsJP pic.twitter.com/svRvnnn3QC
— マイクロソフトサポート (@MSHelpsJP) May 16, 2017