如何在 Windows 中将屏幕快照直接保存到文件中?

有没有一个按钮的方式来保存一个屏幕截图直接到一个文件在 Windows?


软件绝地为 Windows 8和 Windows 10准确地回答了上面的问题。

这是一个非常重要的问题,因为316K 的视图显示截至2021年。 在2008年被问到这个问题时,SO 在2015年左右以跑题结束了这个问题, 可能是因为下面的最后一个问题。

在 WindowsXP 中,可以按 Alt-PrintScreen 复制 活动窗口,或 Ctrl-PrintScreen 来复制完整 桌面。

这可以粘贴到接受图像的应用程序中: Photoshop,Microsoft Word 等等。

我想知道: < b > 有没有一种方法可以将截图直接保存到 文件? 我 真的必须打开一个图像程序,如 Paint.net 还是 Photoshop,只是粘贴一张图片,然后保存它?

320625 次浏览

据我所知,在 XP 中,是的,您必须使用其他应用程序来实际保存它。

Vista 带有剪切工具,这简化了一点过程!

没有安装截图自动保存工具,是的,你可以这样做。

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

您可以编写一些非常简单的代码来挂接 PrintScreen 并将捕获保存在文件中。

下面是要开始捕获并保存到文件中的内容。你只需要挂钩键“打印屏幕”。

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 (和其他键)的代码:

钩子代码

当然,您可以编写一个程序来监视剪贴板,并为剪贴板中的每个图像显示一个恼人的 SaveAs 对话框;。我猜你甚至可以找出最后按下的键是否是 PrintScreen 来限制假阳性的数量。

在我考虑的时候,你也可以谷歌一下已经这么做过的人。


编辑 : . . 或者只是等待有人在这里发布来源-就像刚刚发生的一样: -)

在 XP 中,您需要一个第三方屏幕抓取工具来实现这个功能。我挖掘 Scott Hanselman 的广泛的 关于酷工具的博客,并且通常在那里寻找这样的实用程序——果然,他在博客中提到了一些 给你

Snagit... 很多技术人员都用这个。

你可能想要这样的东西: http://addons.mozilla.org/en-US/firefox/addon/5648

我认为有一个版本的 IE 和浏览器集成。非常好的软件。

在 Windows8之前,如果没有第三方工具,就没有办法直接保存到文件中。以下是我个人最喜欢的非第三方工具解决方案。

适用于 Windows8及更高版本

Windows Key + PrintScreen将屏幕截图保存到 <user>/Pictures/Screenshots中的一个文件夹中

适用于 Windows7

在 win 7中只需使用剪切工具: 最容易通过按下开始键,然后输入“ sni”(回车) 然后是 snienter

Windows 的早期版本

我使用以下键盘组合来捕获,然后使用 mspaint 保存。在你做了几次之后,只需要2-3秒:

  1. Alt + PrintScreen
  2. Win+R ("run")
  3. 输入“ mspaint”enter
  4. Ctrl-V(粘贴)
  5. Ctrl-S(保存)
  6. 使用文件对话框
  7. Alt-F4(关闭 mspaint)

此外,克罗珀非常棒(而且是开源的)。它可以对文件或剪贴板进行矩形捕获,当然也是免费的。

鲜为人知的事实是: 在大多数标准的 Windows (XP)对话框中,您可以按 Ctrl + C 来获得对话框内容的文本副本。
例如: 在记事本中打开一个文件,点击空格,关闭窗口,在确认退出对话框中点击 Ctrl + C,取消,粘贴记事本中的对话框文本。
与你的直接问题无关,但我觉得在这个帖子里提一下会比较好。

此外,实际上,你需要一个第三方软件来做截图,但你不需要解雇大 Photoshop。像 IrfanWiew 或 XnView 这样的免费轻量级软件就可以完成这项工作。我使用 MWSnap 来复制屏幕的任意部分。我写了一个小的 AutoHotkey 脚本,调用 GDI + 函数来做屏幕截图。等等。

这个在德尔斐就行。注意 BitBlt 函数的使用,它是一个 Windows API 调用,而不是 Delphi 特有的东西。

编辑: 添加了示例用法

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;

试试这个: http://www.screenshot-utility.com/

From their homepage:

当你按下一个热键,它捕捉和保存屏幕快照到 JPG,GIF 或 BMP 文件。

我推荐 WinSnap http://www.ntwind.com/software/winsnap/download-free-version.html。它提供了一个自动保存选项,并捕获 alt + printscreen 和其他键组合来捕获屏幕、窗口、对话框等。

感谢所有的源代码和注释-感谢这些,我终于有了一个我想要的应用程序:)

我已经编译了一些示例,可以在这里找到源代码和可执行文件:

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

我使用 InterceptCaptureScreen.exe ——只需在命令提示终端中运行它,然后当你想捕获一个屏幕快照(时间戳文件名,png,在可执行文件所在的同一目录中)时按下 Insert; 即使终端不在焦点中,键也会被捕获。

(我使用 Insert key,因为它应该比 PrintScreen 更容易通过 VNC 进行传播——在我的笔记本电脑上,PrintScreen 还要求按下 Fn 键,而且不会通过 VNC 进行传播。当然,更改源代码中使用的实际键是很容易的)。

希望这对你有帮助, 干杯!

除了安装一个我推荐的屏幕截图程序,最好的方法是使用标准的 Print Screen 方法,然后打开 Microsoft Office Picture Manager,将截图粘贴到你想要的目录的白色区域。它将创建一个位图,您可以编辑或保存-作为一种不同的格式。

这可能吗:

  1. 按 Alt 键
  2. Open a folder
  3. 右击-> 粘贴截图

例如:

基准测试结果窗口已打开,请截屏。 打开 C: 基准 右击-> 粘贴截图 将出现一个名为 screen sho00x.jpg 的文件,其中选择了 text screen sho00x。 键入 Overlock5

就这样。不需要打开任何东西。如果你不写任何东西,默认名称保留。

事实证明,谷歌 Picasa (免费)现在就可以为你做到这一点。如果你打开它,当你点击它将保存屏幕截图到一个文件,并加载到 Picasa。以我的经验来看,效果很好!

我意识到这是一篇很老的文章,但是 windows 最终意识到这个过程是多么的空洞。

In Windows 8.1 (verified, not working in 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

Dropbox 现在提供了自动执行此操作的钩子。如果你有一个免费的 Dropbox 账户并且安装了笔记本应用程序,当你按下 PrtScr Dropbox 时,你就可以选择将所有的截图自动存储到你的 Dropbox 文件夹中。

感谢软件绝地提供有关 Windows7抓拍工具的有用信息。 打开剪切工具的快捷方式: 打开开始,输入 sni 你会在列表中找到这个名字“剪切工具”

enter image description here

保持 Picasa 在后台运行,只需单击“打印屏幕”键

Source