とある記事を編集するために、Windowsのサインイン画面をスクリーンショット(キャプチャ)したいと思ったところ、かなり遠回りしたというお話です。
この記事はWindows向けです
失敗パターン
その① Snipping Tool(スニッピングツール)
Windows(Vista/7/8/8.1/10)に標準アプリとして備わっている「Snipping Tool」を使用する方法です。起動方法からキャプチャ方法まで、丁寧な解説をされているこちらのサイトを参考にしました。
概要はスニッピングツールを起動して撮影を5秒後(最長)に設定し、即ロック画面に行き、スクショされるのを待って際サインインという流れです。
こちらの記事の中で紹介されている、ロック画面に戻る際の手順部分ですが更なる時短を考慮してWindows+Lのショートカットキーを使用し、それ以外は解説されている手順通りに試してみました。
こちらは「ロック画面のスクリーンショットを撮る方法」をなのでロック画面のキャプチャは問題なく撮れました!
しかしながら、やりたいのはサインイン画面(ログイン画面)のスクリーンショット。
ロック画面から一つ進んだサインイン画面のキャプチャを撮ることはこの方法では出来ませんでした…。
ロック画面に移動した後、マウスクリックもしくはEnterでサインイン画面に移動すると、サインイン後にスニッピングツールが終了状態になっていて、スクリーンショットできていません。
サインイン画面まで行くのに5秒以上かかってるんじゃないの?と思われるかもしれませんが、マッハで一連の動作をしても無理めww
操作時間の問題ではないと思うのですが…。
その② Snipping Toolをサインイン画面で起動する
その①を試した結果、操作時間が間に合ってないというならば、サインイン画面に行ってからスニッピングツールを起動すればいいのでは?という事で、参考にした記事がこちらです。
レジストリエディタから、設定をいじらないといけないので若干ハードルが上がりますが、やってみました。
ところが、手順通りやっても起動しない…。
今度はセキュリティの問題でした。
ふーむ。仕方がないのでいったんオフに。
スタートメニュー > 設定 > 更新とセキュリティー > Windowsセキュリティー > ウイルスと脅威の防止 > 設定の管理
で、設定をいったんオフ。
リアルタイム保護をオフにしたところ、起動出来ました!
ところが、今度はコピペが出来ない…。
キャプチャするところまではいけても、保存が出来ない。
参考記事の通りにコピー操作してみても、サインイン後にペースト出来るアイテムが残ってないという状況( ノД`)
その③ PowerShell & JavaScript
WindowsのPowerShellを使用し、画面キャプチャを撮ろうという方法です。
スクリプト作成から設置まで、ソースコードなどを解説されている下記2つのサイトを参考にしました。
まず、PowerShellを作成。
参考サイト内では、画面解像度を設定されていました。
ちなみに、解像度の調べ方は下記をご参照ください(当サイト内)。
私の場合は指定しなくても動いたので、解像度指定をしないコードにしました。
[string]$outImage ="screen.png" Add-Type -AssemblyName System.Windows.Forms $b = New-ObjectSystem.Drawing.Bitmap([System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Width,[System.Windows.Forms.Screen]::PrimaryScreen.Bounds.Height) $g = [System.Drawing.Graphics]::FromImage($b) $g.CopyFromScreen((New-Object System.Drawing.Point(0,0)),(New-Object System.Drawing.Point(0,0)),$b.Size) $g.Dispose() $b.Save((Join-Path C:\apps $outImage))
そしてJavaScriptも作成したのですが、JavaScriptがどうもうまく動かない。
スクリプトの知識ないけど、JavaScriptの実行自体は出来てるのにPowerShellスクリプトまで指示が届いてないなってことを薄々感じたので、JavaScriptコードの見直しをば。
wsShell = WScript.createObject("WScript.Shell");
retCode = wsShell.Run("\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -ExecutionPolicy Unrestricted -File \" C:\\apps\\prtsc.ps1\"",0,true);
WScript.Quit(retCode);
-ExecutionPolicy Unrestricted という部分を追加してみました。
デフォルトでは下記表の一番上の設定 Restricted になっているらしく、実行ポリシーを Unrestricted にしました。
実行ポリシー | 制限について |
---|---|
Restricted | すべてのスクリプトの実行を制限(デフォルト) |
AllSigned | 署名のあるスクリプトのみ実行可能 |
RemoteSigned | ローカル上のスクリプトと非ローカル上の署名のあるスクリプトのみ実行可能 |
Unrestricted | すべてのスクリプトが実行可能(非ローカル上のスクリプトは実行時に許可が必要) |
Bypass | すべてのスクリプトが実行可能 |
見直しが功を奏し、JavaScriptからキャプチャまで動くようになり、動作確認ができました♪
さぁ、いよいよレジストリエディタで登録して。
実行してみたところ…
ファイル拡張子”.js”を持つスクリプト エンジンはありません。
ちょっ。
スクショできないから写真撮って使う羽目になって画質悪いんですけどっ!
”スクリプト”と”エンジン”の間の妙な空白は何なのって感じなんですけどーーーっ!
サインインしていない状態ではJavascriptは動かせないってことみたいですね…(´・ω・`)ショボンヌ
このエラーはセキュリティのリアルタイム保護を解除した状態でも同じでした。
ぐぬぬぬ…でも、諦めない!
Windows Script Hostってことは、それで動かせるものならいけるんじゃなかろうかということで次のステップへ!
成功パターン
ぱあぁ~~。私の不屈の精神で、成功フェーズへ突入しました~!
その① PowerShell & VBScript
正直スクリプトとかはよくわからないのですが、失敗パターンその③を踏まえて、PowerShellスクリプトをベースにJavaScriptではないスクリプトで動かしてみることを試みました。
Windows Script Hostで動くのはVBScriptとJScriptらしい。
JavaScriptとJScriptは似て非なるものらしい。(知らんけど
VBScriptファイルを作成。
以下のソースをメモ帳(もしくはコーダー)に貼り、拡張子「.vbs」でVBScriptファイルとして保存します。
WScript.CreateObject("WScript.Shell").Run "Powershell -ExecutionPolicy Unrestricted -NoExit " & "C:\apps\prtsc.ps1",0,false
Wscript.Quit
引数を使ってみたパターンも考えてみましたがどうでしょうw
Option Explicit
Dim objPShell
Set objPShell = WScript.CreateObject("WScript.Shell")
Const PS = "Powershell -ExecutionPolicy Unrestricted -NoExit "
objPShell.Run PS & "C:\apps\prtsc.ps1",0,false
Set objWshShell = Nothing
Wscript.Quit
つたない知識で作り上げたこのVBScriptを、JavaScriptと差し替えるべくレジストリエディタにファイル名指定して登録したら…出来たぁ~~(*´Д`)
左下の時計マークみたいなやつ(マウスオーバーすると「コンピューターの簡易操作」と説明が現れる所)がレジストリエディタで割り当てた部分なので、クリックしてる瞬間の画面が撮れてます。
VBScriptの場合も、セキュリティに引っかかるのでオフにしておく必要があります。また、処理が実行されてもレジストリ登録状態は継続されるので、レジストリを解除しない限りキャプチャ専用ボタンと化します。
とりあえず撮れたし、これにて一件落着!
と思ったのですが、その後にとてつもなく簡単な方法(その②)に気付くのでした…(白目)
その② 切り取り&スケッチ
失敗パターンその①その②でご紹介したスニッピングツールですが、「切り取り&スケッチ」というアプリに移行しつつあります。
こちらももちろんWindows標準アプリです。
起動方法1
スタートメニューはアルファベット→50音順に分けられているので結構下の方までスクロール。
「か行」グループの中にいます。
起動方法2
Windows+Shift+S 3つのキーを同時押しするショートカット。
片手押しは手がつりそうにw
起動方法3
スタートメニューと逆サイド、左下にある通知アイコンをクリックすると現れるサイドバーの下の方にある「画面領域切り取り」というものが切り取り&スケッチのことです。
ない場合は、この領域の上で右クリックすると「クイックアクションの編集」から「画面領域切り取り」を追加することが出来ます。
サインイン画面のキャプチャを撮る場合は、起動方法1の手順で起動します。
起動したら左上の「新規」のすぐ右。
下向き▽をクリック。
すると、切り取り実行時間を選ぶことが出来ます。
スニッピングツールでは最大5秒後だったのですが、切り取り&スケッチでは10秒後を選ぶことが出来ます。
10秒後に切り取りを選択して…即ロック!
Windows+Lのショートカットでロック画面へ。
そしてクリックまたはEnterでサインイン画面へ!
10秒後を待ちます・・・・
10秒経過すると一瞬、音に表すと「パシャ」みたいな感じでスクリーンのふち全体が光る感じがします。
これ、まさに”切り取り&スケッチ”が働いている証拠です。
同時に、パスワードを入れる部分のカーソル点滅が止まります。
但し、この時点ではまだ切り取りは出来ていません。
この動きが確認出来たら、パスワードを入力してEnter、サインインします。
すると、画面はサインイン画面のままで、”切り取り&スケッチ”をする状態になります。
上部のメニューから全画面表示の領域切り取りをクリック 。
クリックすると、サインインと同時に切り取り&スケッチにキャプチャ画像が表示されています!
ここまでこればもうOK☆
あとは右上のフロッピーディスクアイコンから保存先を選んで保存するだけ。
これで無事、Windows標準アプリを使用したサインイン画面のスクリーンショットが撮れました~!
この方法だと、セキュリティをオフしなくても問題なくできました!
サインイン画面のスクショ方法の結論
紆余曲折、試行錯誤しましたが…
結果的に成功パターンのその②切り取り&スケッチで撮る方法が、何も難しい設定をしなくていいのでお勧めという結論に至りました。