如何将截图直接保存到Windows中的文件?

在Windows XP中,可以按Alt-PrintScreen复制活动窗口的图像,或按Ctrl-PrintScreen复制整个桌面的图像。

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

我想知道: 有没有办法将截图直接保存到文件?真的必须打开一个图像程序,如Paint.net或Photoshop,只需要粘贴一个图像,然后保存它?

您可以编写一些非常简单的代码,将钩住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(和其他键)的代码:

钩码

没有第三方工具直接保存到Windows 8之前的文件。这是我个人最喜欢的非第三方工具解决scheme。

对于Windows 8和更高版本

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

对于Windows 7

在赢7中,只需使用剪切工具:通过按开始,然后input“sni”(input),最容易访问。 要么 Windows键 那么 input

以前版本的Windows

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

  1. Alt + PrintScreen
  2. Win + R (“运行”)
  3. 键入“mspaint” input
  4. CtrlV (粘贴)
  5. CtrlS (保存)
  6. 使用文件对话框
  7. AltF4 (closuresmspaint)

此外, Cropper是伟大的(和开源)。 它做矩形捕获文件或剪贴板,当然是免费的。

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

除此之外,确实,你需要一个第三方软件来做屏幕截图,但是你不需要为这个开发大的Photoshop。 像IrfanWiew或XnView这样的自由和轻量级可以完成这项工作。 我使用MWSnap复制屏幕的任意部分。 我写了一个调用GDI +函​​数的AutoHotkey脚本来做屏幕截图。 等等。

感谢所有的源代码和意见 – 多亏了,我终于有了一个应用程序,我想:)

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

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

我使用InterceptCaptureScreen.exe – 只需在命令提示符terminal中运行它,然后在想要捕获屏幕截图(时间戳文件名,png,在可执行文件所在的同一目录中)时按Insert。 即使terminal没有对焦,键也将被捕获。

(我使用Insert键,因为它应该比通过PrintScreen传播的VNC更容易一些,比如我的笔记本电脑要求按Fn键,而不是通过VNC传播。当然,它很容易改变什么是源代码中使用的实际密钥)。

希望这有助于,干杯!

我意识到很老的post,但窗户终于意识到这个过程是多么的愚蠢。

在Windows 8.1(已validation,不在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

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

Dropbox现在提供挂钩来自动完成此操作。 如果你得到一个免费的保险箱帐户,并安装笔记本电脑的应用程序,当你按PrtScr Dropbox会给你的所有屏幕截图自动存储到您的保pipe箱文件夹的选项。

您需要在XP中使用第三方屏幕抓取实用程序。 我挖掘了Scott Hanselman 关于很酷的工具的广泛的博客,并且通常在那里寻找这样一个实用工具 – 果然,他在这里写了一对夫妇。

这将在Delphi中完成。 请注意使用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; 

没有安装截图自动保存实用程序,是的,你这样做。 有几个实用程序,你可以find然而后面这样做。

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

当然你可以编写一个监视剪贴板的程序,并为剪贴板中的每个图像显示一个令人讨厌的SaveAs对话框;-)。 我想你甚至可以找出是否最后一个按键是PrintScreen来限制误报的数量。

当我正在考虑这个问题的时候,你也可以谷歌search那些已经完成了这个的人。


编辑 :..或者只是等待有人张贴在这里的来源 – 只是发生:-)

Snagit …很多高科技人士使用它。

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

从他们的主页:

当您按下热键时,它会将屏幕快照捕获并保存为JPG,GIF或BMP文件。

感谢TheSoftwareJedi在Windows 7中提供有关捕捉工具的有用信息。打开截取工具的快捷方式:转到开始,键入sni您将在列表中find名称“截断工具”

在这里输入图像说明

让Picasa在后台运行,只需点击“打印屏幕”键即可

资源

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

Vista带有“剪切”工具,简化了一些过程!

我不推荐安装一个截屏程序,我build议,最好的方法是使用标准的“打印屏幕”方法,然后打开Microsoft Office图片pipe理器,然后将屏幕截图粘贴到所需目录的白色区域。 它会创build一个可以编辑或保存的位图 – 作为不同的格式。

事实certificate,Google Picasa(免费)现在可以为你做这个。 如果您打开它,当您点击它时,会将屏幕截图保存到文件并将其加载到Picasa中。 根据我的经验,这很好用!

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

我认为有一个版本的IE浏览器,也与资源pipe理器集成。 相当不错的软件。

这可能吗:

  1. 按Alt PrintScreen
  2. 打开一个文件夹
  3. 右键点击 – >粘贴屏幕截图

例:

基准结果窗口打开,截图。 打开C:\ Benchmarks右键 – >粘贴屏幕截图出现一个名为screenshot00x.jpg的文件,并select了文本screenshotx。 键入Overclock5

而已。 不需要打开任何东西。 如果您不写任何内容,则默认名称保留。