[解決済み] Windowsでスクリーンショットを直接ファイルに保存するにはどうすればよいですか?[クローズド]
質問
Windows でスクリーンショットをファイルに直接保存するための 1 つのボタンによる方法はありますか?
TheSoftwareJedi は Windows 8 および 10 のために上記の質問に正確に答えました。 以下のオリジナルの余分な材料は、後世に残ります。
<ブロッククオートこれは、2021年現在、316Kビューが示すように、非常に重要な質問です。 2008年に質問され、SOは2015年頃にこの質問をオフトピックであるとして閉じました。 おそらく以下の最後の質問のためです。
Windows XP では、Alt-PrintScreen を押してアクティブなウィンドウの画像をコピーすることができます。 または Ctrl-PrintScreen を押して、デスクトップ全体の画像をコピーすることができます。 デスクトップ全体の画像をコピーできます。
これは、画像を受け入れるアプリケーションに貼り付けることができます。 Photoshop、Microsoft Word などです。
不思議に思うのですが スクリーンショットを直接ファイルに保存する方法はありますか。 ファイルに保存する方法はありますか? 私は 本当に のような画像プログラムを開かなければなりませんか? Paint.net や Photoshop のような画像プログラムを開いて画像を貼り付け、それを保存するだけでよいのでしょうか?
どのように解決するのですか?
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(と他のキー)をフックするコードは以下のとおりです。
関連
-
WebAssembly、Webの新しい時代へ
-
Win10ショートカットキーBOOK(史上最強の完成度)
-
[解決済み] Windowsにpipをインストールするにはどうしたらいいですか?
-
[解決済み] WindowsのCMDで1行に2つのコマンドを実行するにはどうしたらいいですか?
-
[解決済み] バッチファイル内で改行をエコーする方法を教えてください。
-
[解決済み] Windowsでコマンドラインから空のファイルを作成するには?
-
[解決済み] Androidでプログラム的にスクリーンショットを撮るには?
-
[解決済み】WindowsでTCPまたはUDPポートをリッスンしているプロセスを見つけるにはどうすればよいですか?
-
[解決済み】Windowsでnpmをアップデートするにはどうすればいいですか?
-
[解決済み] Windowsのバッチファイルで複数のコマンドを1行で実行する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SetTimer(タイマー)のいくつかの使い方
-
.appref-msのファイル拡張子について
-
WebAssembly、Webの新しい時代へ
-
Win10ショートカットキーBOOK(史上最強の完成度)
-
[解決済み] アクティブウィンドウのスクリーンショットをキャプチャしますか?
-
[解決済み] WindowsのIF内のバッチSETが機能しない
-
[解決済み] Windowsで.gitconfigの場所を変更する
-
[解決済み] 特定のファイルだけを含むディレクトリ構造をコピーする方法(Windowsのバッチファイルを使用)。
-
[解決済み] Windowsでスクリーンショットを直接ファイルに保存するにはどうすればよいですか?[クローズド]
-
[解決済み] WindowsでJenkinsのサービスを開始/停止/再起動する