ITインフラエンジニアのおつむの整理

ITインフラエンジニア(現ニート)の頭の整理場所。ほぼ日記になる予定。

ちょっと勉強意欲がわいてきた

最近ポケモンUniteにはまったのと、自転車のミニベロロード(tern serge)購入して自分で没頭できる趣味が増えてきたので少しずつ自分を取り戻せてきた感じ。 前は仕事の勉強しなきゃと追い込まれてなんか燃え尽き症候群のようになったり病んでいたりしたけど徐々に回復中。 やっぱ没頭するのはいいね。

というわけで、少しずつ勉強意欲が復活してきたのでAWS勉強しようかなと思ったのですが、AWSの操作を実際にキャプチャとかに残したいなと思いキャプチャ取得関係を少し調べたり作成したりしてました。調べたことをちょっと紹介。

Windows(10想定)デフォルトの機能

Win+Shift+S

画面が静止して、キャプチャする領域を指定してクリップボードに保存できる。会社で今のところ最も使ってるショートカットと言っても過言じゃない。クリップボードなので、そのままチャットツールやエクセルにペースト可能。クリップボードに保存されたら画面右下に通知が出て、それをクリックするとそのまま画像の編集画面に行くのでちょっとした画面の指摘したいときはそこで赤い丸とかで囲んでチャットで聞いたりできて便利。おすすめ。

Win+PrintScreen

プリントスクリーンで取得される画面(基本全画面)を画像ファイルとして保存までしてくれるショートカット。保存先はデフォルトでユーザーごとのピクチャのフォルダ配下にスクリーンショットのフォルダが自動作成されてそこで作成されている。全画面のキャプチャになってしまうので、デュアルディスプレイだと2画面の横断して取得されてしまうので、次に紹介する方が使い勝手がいいと思う。

Win+Alt+PrintScreen

アクティブな画面を画像ファイルとして保存できるショートカット。↑のショートカットよりこっちの方が使う頻度は今後多いと思われる。ただ保存先がなぜかユーザーごとのビデオ配下にスクリーンショットとして作成されるので保存先が変。あとキャプチャ名がアクティブ画面の名前なので更新日付順にソートしないとちょっと見にくい。てかこれらのショートカット機能知らなかったのでWinShotをインストールして使ってたが今後はいらんな。。。

(オマケ)Win + g

ビデオ録画可能な画面が表示される。ブラウザとかの操作画面のビデオとか。PCから出力されている音声もちゃんと入ってた。ただ自分のPCが少し古くてスペック不足なのかわからないが音声はちょっとぶつぶつしていた。

エクセル証跡

↑で紹介したもの便利だが、個人的にエクセルに保存して縦スクロールしながら証跡を見たいなーと思い、VBAスクリプトとか落ちてないか調べて改修しました。 ※以下参考

qiita.com

' 参考 https://qiita.com/snaruse0608/items/4d6022c43e65fe0eee4c
Declare Function OpenClipboard Lib "user32" (Optional ByVal hwnd As Long = 0) As Long
Declare Function CloseClipboard Lib "user32" () As Long
Declare Function EmptyClipboard Lib "user32" () As Long
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As Long)

Sub クリップボードにコピーした画像を貼り付ける()
    OpenClipboard
    EmptyClipboard
    CloseClipboard
    Dim CB As Variant
    Dim position As Long
    Dim size As Double: size = 1
    Do While True
        CB = Application.ClipboardFormats
        If Not ActiveCell.Row = 1 Then
            If StrConv(ActiveCell.Offset(-1, 0).Value, vbUpperCase) = "EXIT" Then GoTo Quit
        End If
        On Error GoTo ErrorQuit
        For i = 1 To UBound(CB)
            If CB(i) = xlClipboardFormatBitmap Then
                ActiveSheet.Paste
                'Selection.ShapeRange.Height = Cells(1.1).Height * position
                Set objShp = ActiveSheet.Shapes(Selection.Name)
                objShp.LockAspectRatio = msoTrue
                position = objShp.Height \ Cells(1.1).Height
                ActiveCell.Offset(position + 2, 0).Select
                OpenClipboard
                EmptyClipboard
                CloseClipboard
            End If
        Next i
        DoEvents
        Sleep 1
    Loop

Quit:
    MsgBox "停止しました。", vbInformation
    ActiveCell.Offset(-1, 0).ClearContents
    GoTo ToEnd
ErrorQuit:
    MsgBox "予期せぬ動作のため停止しました。", vbInformation
ToEnd:
End Sub

見直しとかしてないけど使った感じの挙動は問題ないと思ってる。改修点は以下。

  • スクリプトでは33行ごとにキャプチャを張り付けていたので、張り付けたキャプチャの高さに合わせて次のセルを選択するように
  • CPU使用率が20-40%位になっていたのでSleep処理を追加

修正した後に気付いたが、コメント欄で同じようなアドバイスがすでに書いてあった。。。まあ自分のVBA勉強だと思って、、、