我怎么可以直接保存截图Windows中的文件? [关闭](How can I save a sc

2019-08-19 13:10发布

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

然后可以粘贴到接受图像的应用:软件,微软Word等

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

Answer 1:

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

钩码



Answer 2:

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

对于Windows 8及更高版本

+ PRINTSCREEN保存截图到一个文件夹在<user>/Pictures/Screenshots

对于Windows 7

在Win 7只使用截图工具:通过按下启动最容易被访问,然后键入“SNI”(输入)。 要么 那么S N 进入

的Windows的早期版本

我用下面的键盘组合来捕捉,然后保存使用MSPAINT。 当你这样做几次,只需要2-3秒:

  1. ALT + PRINTSCREEN
  2. + R( “运行”)
  3. 键入“MSPAINT” 进入
  4. 按Ctrl - V(粘贴)
  5. 按Ctrl - S(保存)
  6. 使用文件对话框
  7. ALT - F4(接近MSPAINT)

此外, 克罗帕是伟大的(和开源)。 它确实矩形捕捉到文件或剪贴板,当然是免费的。



Answer 3:

鲜为人知的事实:在大多数标准的Windows(XP)的对话框,您可以按Ctrl + C有对话的内容的文本副本。
例如:用记事本打开一个文件时,按空格键,关闭该窗口,按Ctrl + C在确认退出对话框,取消,粘贴到记事本对话框中的文本。
无关,你直接的问题,但我以为这将是很好,在这个线程提及。

除此之外,事实上,你需要一个第三方软件做的截图,但你并不需要触发大的Photoshop为。 免费轻便像IrfanWiew或XnView的可以做的工作。 我用MWSnap复制屏幕的任意部分。 我写了一个小AutoHotkey的脚本中调用GDI +的功能做截图。 等等。



Answer 4:

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

我编了一些例子,两个源和可执行文件可以在这里找到:

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

我用InterceptCaptureScreen.exe - 只需在命令提示符下终端中运行它,然后按当你想捕获屏幕截图(时间戳的文件名,PNG,在可执行文件在同一目录)插入; 键将被捕获即使终端不聚焦。

(我用Insert键,因为它应该有一个更轻松地传播通过,也就是说,VNC比PRINTSCREEN - 这对我的笔记本电脑,还需要向Fn键被按下,并且不通过VNC传播当然,它很容易改变什么。是在源代码中所使用的实际键)。

希望这有助于,干杯!



Answer 5:

很老的文章中,我意识到,但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



Answer 6:

我可能会建议WinSnap http://www.ntwind.com/software/winsnap/download-free-version.html 。 它提供了一个自动保存选项,捕捉ALT + PRINTSCREEN和其他组合键来捕获屏幕,窗口,对话框等。



Answer 7:

现在的Dropbox提供了钩自动地做到这一点。 如果你得到一个免费的Dropbox帐户,并安装在笔记本电脑的应用程序,当你按下PrtScr的Dropbox会给你的所有屏幕截图自动保存到你的Dropbox文件夹的选项。



Answer 8:

你需要在XP中功能的第三方屏幕抓取工具。 我掏斯科特Hanselman的广泛博客关于酷的工具 ,通常在那里寻找这样的工具-果然,他的博客上讲述一对夫妇在这里 。



Answer 9:

这将做它在德尔福。 注意使用BitBlt函数,这是一个Windows API调用,而不是具体的德尔福东西。

编辑:新增用法示例

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;


Answer 10:

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

从他们的网页:

当你按一个热键,它捕获并保存你的屏幕快照复制到JPG,GIF或BMP文件。



Answer 11:

如果没有安装截图自动保存工具,是你做的。 有几种实用然而FOLR你可以找到这样做。

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



Answer 12:

当然,你可以写一个程序,监视剪贴板,并显示一个恼人的另存为,对话框中剪贴板;-)每一个形象。 我想你甚至可以找出是否最后按下的键是PRINTSCREEN限制误报的数量。

虽然我正在考虑呢..你也可以谷歌的人谁已经做到这一点。


编辑 :..或者等待有人在这里发表源-像刚才happend :-)



Answer 13:

SnagIt的...很多高科技的乡亲使用。



Answer 14:

短安装一个屏幕捕捉程序,我建议,要做到这一点,最好的办法是通过使用标准的打印屏幕的方法,然后打开Microsoft Office图片管理器和简单的截图粘贴到你想要的目录中的白色区域。 它会创建您可以编辑或另存为不同的格式的位图。



Answer 15:

由于TheSoftwareJedi提供有关Windows捕捉工具7快捷键打开截图工具有用的信息:转到开始,类型SNI你会在列表中找到名为“截图工具”



Answer 16:

维护Picasa在后台运行,并且只需点击“打印屏幕”键

资源



Answer 17:

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

Vista中自带的截图工具,它简化了过程一点!



Answer 18:

事实证明,谷歌的Picasa(免费)会为你现在做到这一点。 如果您有它打开,当你点击它会在屏幕截图保存到文件中,并将其加载到Picasa。 根据我的经验,它的伟大工程!



Answer 19:

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

我觉得这是对IE浏览器,并与资源管理器集成版本。 相当不错的软件。



Answer 20:

这可能吗:

  1. 按Alt PRINTSCREEN
  2. 打开文件夹
  3. 右键 - >粘贴截图

例:

基准测试结果窗口打开时,采取截图。 打开C:\标准右键 - >粘贴截图出现一个名为screenshot00x.jpg文件,用文本screenshot00x选择。 键入Overclock5

而已。 无需打开任何东西。 如果你不写任何东西,默认名称停留。



文章来源: How can I save a screenshot directly to a file in Windows? [closed]