Windowsでスクリーンショットをファイルに直接保存するにはどうすればよいですか?[閉まっている]


115

Windows XPでは、Alt-PrintScreenを押してアクティブウィンドウの画像をコピーするか、Ctrl-PrintScreenを押してデスクトップ全体の画像をコピーできます。

これは、Photoshop、Microsoft Wordなどの画像を受け入れるアプリケーションに貼り付けることができます。

私は疑問に思います:スクリーンショットをファイルに直接保存する方法はありますか? 私は本当に Paint.netまたはPhotoshopのような、画像プログラムを開く必要があり、単純に画像を貼り付け、それを保存しますか?


14
Photoshop ?? mspaintまたはpaint.netを使用しないのはなぜですか?フォトショップほど重いものを使うのはなぜですか?
GEOCHET 2008年

1
私がここで得た最高のものは、HTMLメールに直接貼り付けられたいくつかのエラーメッセージのスクリーンショットが付いた単語のスクリーンショットでした。
VVS

1
私の答えを見てください、少なくともMacと同じくらい簡単にそれを行うことが最終的に可能です(ただし、Linuxフローはさらに優れています)
Karthik T

1
SuperUserへの移動が報告されました。書かれたように、受け入れられた回答は最終的にはプログラマティックなものでしたが、この質問は一般的なコンピューター使用の回答を探していたため、SuperUserに属しています。
ArtOfWarfare 2014

1
こんにちは、たぶん答えには少し遅れますが、同様の問題を持つ他の人を助けることができます。Windowsストアには、クリップボードのスクリーンショット画像をディスク上の一時的な画像に保存し、ファイルへのパスを返すことができるアプリケーションがあります。そのため、任意のアプリケーション(microsoft。 com / store / apps / 9PM34S06CFVJ)。スクリーンショットをファイルに保存するために他のソフトウェアを開く必要はもうありません。
Giovanni Esposito

回答:


50

PrintScreenをフックし、キャプチャをファイルに保存するかなり単純なものをコーディングできます。

これは、キャプチャしてファイルに保存するためのものです。キー「Print screen」をフックする必要があるだけです。

using System;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
public class CaptureScreen
{

    static public void Main(string[] args)
    {

        try
        {
            Bitmap capture = CaptureScreen.GetDesktopImage();
            string file = Path.Combine(Environment.CurrentDirectory, "screen.gif");
            ImageFormat format = ImageFormat.Gif;
            capture.Save(file, format);
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }

    }

    public static Bitmap GetDesktopImage()
    {
        WIN32_API.SIZE size;

        IntPtr  hDC = WIN32_API.GetDC(WIN32_API.GetDesktopWindow()); 
        IntPtr hMemDC = WIN32_API.CreateCompatibleDC(hDC);

        size.cx = WIN32_API.GetSystemMetrics(WIN32_API.SM_CXSCREEN);
        size.cy = WIN32_API.GetSystemMetrics(WIN32_API.SM_CYSCREEN);

        m_HBitmap = WIN32_API.CreateCompatibleBitmap(hDC, size.cx, size.cy);

        if (m_HBitmap!=IntPtr.Zero)
        {
            IntPtr hOld = (IntPtr) WIN32_API.SelectObject(hMemDC, m_HBitmap);
            WIN32_API.BitBlt(hMemDC, 0, 0,size.cx,size.cy, hDC, 0, 0, WIN32_API.SRCCOPY);
            WIN32_API.SelectObject(hMemDC, hOld);
            WIN32_API.DeleteDC(hMemDC);
            WIN32_API.ReleaseDC(WIN32_API.GetDesktopWindow(), hDC);
            return System.Drawing.Image.FromHbitmap(m_HBitmap); 
        }
        return null;
    }

    protected static IntPtr m_HBitmap;
}

public class WIN32_API
{
    public struct SIZE
    {
        public int cx;
        public int cy;
    }
    public  const int SRCCOPY = 13369376;
    public  const int SM_CXSCREEN=0;
    public  const int SM_CYSCREEN=1;

    [DllImport("gdi32.dll",EntryPoint="DeleteDC")]
    public static extern IntPtr DeleteDC(IntPtr hDc);

    [DllImport("gdi32.dll",EntryPoint="DeleteObject")]
    public static extern IntPtr DeleteObject(IntPtr hDc);

    [DllImport("gdi32.dll",EntryPoint="BitBlt")]
    public static extern bool BitBlt(IntPtr hdcDest,int xDest,int yDest,int wDest,int hDest,IntPtr hdcSource,int xSrc,int ySrc,int RasterOp);

    [DllImport ("gdi32.dll",EntryPoint="CreateCompatibleBitmap")]
    public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc,  int nWidth, int nHeight);

    [DllImport ("gdi32.dll",EntryPoint="CreateCompatibleDC")]
    public static extern IntPtr CreateCompatibleDC(IntPtr hdc);

    [DllImport ("gdi32.dll",EntryPoint="SelectObject")]
    public static extern IntPtr SelectObject(IntPtr hdc,IntPtr bmp);

    [DllImport("user32.dll", EntryPoint="GetDesktopWindow")]
    public static extern IntPtr GetDesktopWindow();

    [DllImport("user32.dll",EntryPoint="GetDC")]
    public static extern IntPtr GetDC(IntPtr ptr);

    [DllImport("user32.dll",EntryPoint="GetSystemMetrics")]
    public static extern int GetSystemMetrics(int abc);

    [DllImport("user32.dll",EntryPoint="GetWindowDC")]
    public static extern IntPtr GetWindowDC(Int32 ptr);

    [DllImport("user32.dll",EntryPoint="ReleaseDC")]
    public static extern IntPtr ReleaseDC(IntPtr hWnd,IntPtr hDc);
}

更新 C#からPrintScreen(およびその他のキー)をフックするコードは次のとおりです。

フックコード


素敵なコードスニペット。もちろん、画像をGIFではなくJPEGまたはPNGとして保存することを検討してください。
VVS

ImageFormat format = ImageFormat.Gif; ImageFormat format = ImageFormat.PNG;と設定するだけです。またはImageFormat format = ImageFormat.JPG; すべてがここにあります
Patrick Desjardins

4
OK、そのスニペットをどうすればいいですか?それを実行して、スクリーンショットが必要なときに毎回印刷画面を押しますか、それとも一度だけですか?それをコンパイルする以外に?
Jaime Hablutzel、2012年

3
誰かがバイナリを持っていますか?
Timofey Trofimov

2
私は...これは「非常に簡単」だとは思わない
hejdav

153

Windows 8より前のサードパーティツールを使用せずにファイルに直接保存する方法はありません。ここで、個人的にお気に入りのサードパーティ以外のツールソリューションを紹介します。

Windows 8以降の場合

Windows Key+ PrintScreen スクリーンショットを以下のフォルダに保存します<user>/Pictures/Screenshots

Windows 7の場合

Win 7では、スニッピングツールを使用するだけです。最も簡単にアクセスするには、[スタート]ボタンを押してから、「sni」と入力します(Enterキーを押します)。または Windows Keyその後、sni enter

以前のバージョンのWindows

次のキーボードの組み合わせを使用してキャプチャし、mspaintを使用して保存します。数回実行すると、2〜3秒しかかかりません。

  1. Alt+PrintScreen
  2. Win+ R(「実行」)
  3. 「mspaint」と入力します enter
  4. Ctrl- V(貼り付け)
  5. Ctrl- S(保存)
  6. ファイルダイアログを使用
  7. Alt- F4(mspaintを閉じる)

さらに、クロッパーは素晴らしい(そしてオープンソース)。ファイルまたはクリップボードへの長方形のキャプチャを行い、もちろん無料です。


2
実際、これは驚くほど速くて簡単です。また、一連のショットを撮る場合は、ペイントを開いたままにし、Ctrl-Nを使用してペイント領域をリセットし続け、Ctrl-Sを使用して保存します([名前を付けて保存]は不要)。ペイントを開いたままにしておくことのもう1つの利点は、保存先のファイル形式(PNGなど)を記憶していることです。
Neil Mayhew

1
@Neilに感謝します。Ctrl-Sと新しいwin 7機能でこの回答を更新しました。
TheSoftwareJedi

1
Windowsキー+ "sni" FTW!
Jason

英語のロケールでのみ機能することに注意してください。ポーランドのためのツールが類推NarzędzieWycinanieと作品を命名されています。Winそれからwyenter
maciek

ロック画面では機能しないため、クールなウィンドウの背景をキャプチャすることはできません。Androidとは異なり、ロック画面を含め、いつでも何でもスクリーンショットをキャプチャできます。
Triynko 2017年

17

あまり知られていない事実:ほとんどの標準的なWindows(XP)ダイアログでは、Ctrl + Cを押して、ダイアログのコンテンツのテキストコピーを作成できます。
例:ファイルをメモ帳で開き、スペースを押し、ウィンドウを閉じ、確認の終了ダイアログでCtrl + Cを押し、キャンセルし、ダイアログのテキストをメモ帳に貼り付けます。
あなたの直接の質問とは無関係ですが、このスレッドで言及するのはいいことですが。

その上、実際に、スクリーンショットを実行するにはサードパーティのソフトウェアが必要ですが、そのために大きなPhotoshopを起動する必要はありません。IrfanWiewやXnViewのような無料で軽量なもので十分です。MWSnapを使用して、画面の任意の部分をコピーします。スクリーンショットを作成するためにGDI +関数を呼び出すAutoHotkeyスクリプトを少し書きました。等。


ちょうどこれを今見つけました。そのヒントをありがとう。
TankorSmash

いいヒント。コピーするテキストを選択できないエラーメッセージダイアログに不満を感じることがあります。このヒントを使用して、それらの多くが行います!こちらのブラウザでお試しください:jsfiddle.net/liamhennessy/cs3jsj6p
Liam

15

すべてのソースコードとコメントをありがとう-そのおかげで、私はようやく私が欲しかったアプリを手に入れました:)

いくつかの例をまとめましたが、ソースと実行可能ファイルの両方がここにあります。

http://sdaaubckp.svn.sourceforge.net/viewvc/sdaaubckp/xp-take-screenshot/

私はInterceptCaptureScreen.exeを使用しています。コマンドプロンプトターミナルで実行し、スクリーンショット(タイムスタンプ付きのファイル名、png、実行可能ファイルと同じディレクトリ内)をキャプチャしたい場合は、Insertを押してください。端末がフォーカスされていなくても、キーはキャプチャされます。

(私はInsertキーを使用します。たとえば、PrintScreenよりもVNCを介して伝播するほうが簡単であるためです。私のラップトップでは、Fnキーも押す必要があり、VNCを介して伝播しません。もちろん、何を変更するかは簡単です。ソースコードで使用される実際のキーです)。

よろしくお願いいたします。


1
このプログラムは完全に動作します。非常にシンプルで、必要なことだけを行います。
golmschenk 2013年

2
Windows 7でも動作します。全画面ゲームでスクリーンショットを有効にするには、次の手順を実行する必要がありました
メタセコイア2013年

デッドURL。(ほぼ10年後も当然のことです。)
カミーユグードスネ

11

非常に古い投稿であることに気づきましたが、Windowsはついにそのプロセスがいかに不可解であるかを理解しました。

Windows 8.1(検証済み、Windows 7では機能しない(tnx @bobobobo))

windows key+ prnt screenスクリーンショットを以下のフォルダに保存します<user>/Pictures/Screenshots

ソース-http://windows.microsoft.com/en-in/windows/take-screen-capture-print-screen#take-screen-capture-print-screen=windows-8


7では機能しません。試してみました。
bobobobo 2014年

@boboboboああありがとう、多分> = Windows 8。
Karthik T

Windows 10でも動作します。ありがとうKarthikT
Usman Hayat Khan

6

WinSnap http://www.ntwind.com/software/winsnap/download-free-version.htmlをお勧めします。自動保存オプションを提供し、alt + printscreenおよびその他のキーの組み合わせをキャプチャして、画面、ウィンドウ、ダイアログなどをキャプチャします。


1
設定を確認して、希望どおりに設定してください。
Daniel X Moore

ありがとう、Alt + Printscreenを実行してスクリーンショットをデスクトップに自動保存できるアプリを探していました。これは完全に機能します。
Brett

無料版は透かしを追加し、30日後に有効期限が切れます。ええ。
Camille Goudeseune

5

Dropboxはこれを自動的に行うためのフックを提供します。無料のDropboxアカウントを取得してラップトップアプリをインストールした場合、PrtScr Dropboxを押すと、すべてのスクリーンショットをDropboxフォルダーに自動的に保存するオプションが表示されます。


これは実際に機能し、画面をキャプチャして保存する最速の方法だと思います。それが私の質問である場合、私はそれを受け入れられるものとしてマークします。
Muhammad Raheel、2016


2

これはDelphiで行います。Delphiに固有のものではなく、Windows API呼び出しであるBitBlt関数の使用に注意してください。

編集:使用例を追加

function TForm1.GetScreenShot(OnlyActiveWindow: boolean) : TBitmap;
var
  w,h : integer;
  DC : HDC;
  hWin : Cardinal;
  r : TRect;
begin
  //take a screenshot and return it as a TBitmap.
  //if they specify "OnlyActiveWindow", then restrict the screenshot to the
  //currently focused window (same as alt-prtscrn)
  //Otherwise, get a normal screenshot (same as prtscrn)
  Result := TBitmap.Create;
  if OnlyActiveWindow then begin
    hWin := GetForegroundWindow;
    dc := GetWindowDC(hWin);
    GetWindowRect(hWin,r);
    w := r.Right - r.Left;
    h := r.Bottom - r.Top;
  end  //if active window only
  else begin
    hWin := GetDesktopWindow;
    dc := GetDC(hWin);
    w := GetDeviceCaps(DC,HORZRES);
    h := GetDeviceCaps(DC,VERTRES);
  end;  //else entire desktop

  try
    Result.Width := w;
    Result.Height := h;
    BitBlt(Result.Canvas.Handle,0,0,Result.Width,Result.Height,DC,0,0,SRCCOPY);
  finally
    ReleaseDC(hWin, DC) ;
  end;  //try-finally
end;

procedure TForm1.btnSaveScreenshotClick(Sender: TObject);
var
  bmp : TBitmap;
  savdlg : TSaveDialog;
begin
  //take a screenshot, prompt for where to save it
  savdlg := TSaveDialog.Create(Self);
  bmp := GetScreenshot(False);
  try
    if savdlg.Execute then begin
      bmp.SaveToFile(savdlg.FileName);
    end;
  finally
    FreeAndNil(bmp);
    FreeAndNil(savdlg);
  end;  //try-finally
end;

2

これを試してください:http : //www.screenshot-utility.com/

彼らのホームページから:

ホットキーを押すと、画面のスナップショットがキャプチャされ、JPG、GIF、またはBMPファイルに保存されます。


1

スクリーンショットの自動保存ユーティリティをインストールしなくても、そうです。あなたが見つけることができるいくつかのユーティリティがあります。

例:http : //www.screenshot-utility.com/


ああ、それは古すぎる。2001年に最終更新
isaaclw

1

もちろん、クリップボードを監視し、クリップボード内のすべての画像に対して迷惑なSaveAsダイアログを表示するプログラムを書くこともできます;-)。誤検知の数を制限するために最後に押されたキーがPrintScreenであったかどうかも確認できると思います。

私はそれについて考えていますが、すでに正確にそれをした人のためにグーグルすることもできます。


編集:..または誰かがここにソースを投稿するのを待つ-ちょうど起こったように:-)


1

Snagit ...多くの技術者がそれを使用しています。


スクリーンショットを撮るだけでツールを購入するのはなぜですか?
Dane411

1

私が推奨する画面キャプチャプログラムをインストールするのではなく、これを行う最善の方法は、標準のPrint Screenメソッドを使用してMicrosoft Office Picture Managerを開き、スクリーンショットを目的のディレクトリの白い領域に貼り付けるだけです。編集または別の形式で保存できるビットマップを作成します。


これはうまくいくかもしれませんが、質問者はおそらくプログラムでこれを行う方法を求めています。
Peter O.

1

Windows 7のスナップツールに関する有用な情報を提供してくれたTheSoftwareJediに感謝します。スニッピングツールを開くショートカット:[スタート]に移動し、「sni」と入力すると、リスト「スニッピングツール」に名前が表示されます。

ここに画像の説明を入力してください



0

私がXPで知る限り、はい、実際に保存するには他のアプリを使用する必要があります。

VistaにはSnipping Toolが付属しており、処理が少し簡単になります!


0

現在、Google Picasa(無料)がこれを行います。開いている場合は、クリックするとスクリーンショットがファイルに保存され、Picasaに読み込まれます。私の経験では、それはうまくいきます!



-6

これは可能ですか?

  1. Alt PrintScreenを押す
  2. フォルダを開く
  3. 右クリック->スクリーンショットを貼り付け

例:

ベンチマーク結果ウィンドウが開いています。スクリーンショットを撮ってください。C:\ Benchmarksを開く右クリック->スクリーンショットの貼り付けスクリーンショット00x.jpgという名前のファイルが表示され、テキストscreenshot00xが選択されています。タイプOverclock5

それでおしまい。何も開く必要はありません。何も書かない場合、デフォルトの名前が残ります。


どのバージョンのウィンドウに「スクリーンショットの貼り付け」メニューエントリがありますか?(画像タイプのクリップボードのコンテンツでは、win7でアクティブ化されたペーストはありません)。
eckes
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.