LoginSignup
5
0

More than 5 years have passed since last update.

AutoHotKeyでChromeのWebページレンダリング部分のみをスクリーンショットする

Last updated at Posted at 2018-05-25

動機

  • 一般的なアプリでChromeのスクショを撮ると、タイトルバーなどが入る。
  • Fireshotなりの拡張で対応はできるが、そこからローカルに保存したりSNSに投稿したりが一手間かかったり有料だったりする
  • めんどうくさいので、ホットキー一発でスクショして保存なり投稿なりできるようにしたい

AutoHotKeyで対応

では、どうやってWebページが表示されている部分のみをスクショするか。

AU3Spyで調査すると、この部分はChrome_RenderWidgetHostHWND1というコントロール名が割り振られている。
よって、ControlGetPosコマンドで、この部分の座標情報を取得することができる。
ただし、取得できるのはアクティブウィンドウ内での相対座標であるため、WinGetPosでアクティブウィンドウの座標を取得し、計算してやる必要がある。

座標情報が取得できれば、座標を指定してスクショできるコマンドラインツール(例えばNirCmd)でスクショ自体は簡単にできる。

ss.ahk
PrintScreen::
    ssDir = C:\Users\Public\Pictures\Capture
    ssFile = %ssDir%\%A_Now%.jpg ; 日時からファイル名を生成
    SetTitleMatchMode, RegEx ; ウィンドウタイトルを正規表現マッチ
    If WinActive(" - Google Chrome$ ahk_exe chrome.exe") ; Chromeブラウザがアクティブの場合
    {
        WinGetPos, ssX, ssY, , A ; アクティブウィンドウの座標を取得
        ControlGetPos, CX, CY, ssW, ssH, Chrome_RenderWidgetHostHWND1, A, , ; コントロールの相対座標および幅・高さを取得
        ssX += %CX% ; コントロールのX座標計算
        ssY += %CY% ; コントロールのY座標計算
        RunWait, "C:\apps\nircmd-x64\nircmd.exe" savescreenshot %ssFile% %ssx% %ssy% %ssw% %ssh%, ,
    }
    Else ; Chrome以外の場合、アクティブウィンドウ全体をスクショ
    {
        RunWait, "C:\apps\nircmd-x64\nircmd.exe" savescreenshotwin %ssFile%, ,
    }
    Return
#IfWinActive

Chromeのアクティブ判定はいろんなやり方があるが、Chromium系アプリ(Visual Studio Codeとか)や(いちおうまだ現役の)Chromeアプリ等を排除するため、実行ファイル名およびウィンドウタイトルでの判定とした。

これで正常にスクショできた。

5
0
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
5
0