Как я могу сохранить скриншот непосредственно в файл в Windows? [закрытый]
в Windows XP можно нажать Alt-PrintScreen, чтобы скопировать изображение активного окна, или Ctrl-PrintScreen, чтобы скопировать изображение полного рабочего стола.
затем это можно вставить в приложения, которые принимают изображения: Photoshop, Microsoft Word и т. д.
меня интересует: есть ли способ сохранить скриншот непосредственно в файл? Я действительно нужно открыть программу изображений, например Paint.net или Photoshop, просто вставить изображение, а затем сохранить это?
20 ответов:
вы можете закодировать что-то довольно простое, что зацепит экран печати и сохранит захват в файле.
вот что нужно для начала захватить и сохранить в файл. Вам просто нужно будет зацепить клавишу "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); }
обновление Вот код для подключения PrintScreen (и другой ключ) от C#:
нет способа сохранить непосредственно в файл без стороннего инструмента до Windows 8. Вот мои личные любимые сторонние инструментальные решения.
для Windows 8 и более поздних версий
+ PrintScreen сохраняет скриншот в папку
<user>/Pictures/Screenshots
Для Windows 7
в win 7 просто используйте инструмент отсечения: наиболее легко получить доступ с помощью нажатия кнопки Пуск, а затем набрав "sni" (enter). или затем snЯвведите
предыдущие версии Windows
Я использую следующую комбинацию клавиш для захвата, а затем сохранить с помощью проблемы. После того, как вы сделаете это пару раз, это займет всего 2-3 секунд:
- Alt+ PrintScreen
- Win+R ("выполнить")
- тип " mspaint" введите
- Ctrl -V (вставить)
- Ctrl -S (save)
- использовать файл диалоговое окно
- Alt -F4 (закрыть mspaint)
кроме того, Кроппер большой (и с открытым исходным кодом). Он делает прямоугольник захвата в файл или буфер обмена, и, конечно, бесплатно.
малоизвестный факт: в большинстве стандартных диалоговых окон Windows (XP) вы можете нажать Ctrl+C, чтобы иметь текстовую копию содержимого диалогового окна.
Пример: откройте файл в блокноте, нажмите пробел, закройте окно, нажмите Ctrl+C в диалоговом окне подтверждения выхода, отмените, вставьте в блокнот текст диалогового окна.
Не связанный с вашим прямым вопросом, но я бы хотел упомянуть в этой теме.кроме того, действительно, вам нужно программное обеспечение третьей стороны, чтобы сделать снимок экрана, но вы этого не делаете для этого нужно запустить большой фотошоп. Что-то свободное и легкое, как IrfanWiew или XnView может сделать эту работу. Я использую MWSnap для копирования произвольных частей экрана. Я написал небольшой скрипт AutoHotkey, вызывающий функции GDI+ для создания скриншотов. Так далее.
Спасибо за весь исходный код и комментарии-благодаря этому, у меня наконец есть приложение, которое я хотел :)
Я собрал некоторые примеры, и оба источника и исполняемые файлы можно найти здесь:
http://sdaaubckp.svn.sourceforge.net/viewvc/sdaaubckp/xp-take-screenshot/
Я использую InterceptCaptureScreen.exe-просто запустите его в терминале командной строки, а затем нажмите кнопку Вставить, когда вы хотите сделать снимок экрана (отметка времени имена файлов, png, в том же каталоге, где находится исполняемый файл); ключи будут захвачены, даже если терминал не находится в фокусе.
(Я использую клавишу Insert, так как она должна иметь более легкое время распространения через, скажем, VNC, чем PrintScreen - который на моем ноутбуке требует, чтобы также была нажата клавиша Fn, и это не распространяется через VNC. Конечно, его легко изменить, что является фактическим ключом, используемым в исходном коде).
надеюсь, это поможет, Ура!
очень старый пост я понимаю, но windows, наконец, понял, насколько бессмысленным был процесс.
В Windows 8.1 (проверено, не работает в windows 7 (tnx @bobobo))
windows key
+prnt screen
сохраняет скриншот в папку<user>/Pictures/Screenshots
могу я предложить WinSnap http://www.ntwind.com/software/winsnap/download-free-version.html. он обеспечивает опцию автосохранения и захват alt + printscreen и других комбинаций клавиш для захвата экрана, окон, диалоговых окон и т. д.
Dropbox теперь предоставляет крюк, чтобы сделать это автоматически. Если вы получаете бесплатную учетную запись dropbox и устанавливаете приложение для ноутбука, при нажатии PrtScr Dropbox даст вам возможность автоматически хранить все скриншоты в папке dropbox.
вам нужна утилита захвата экрана 3rd для этой функциональности в XP. Я копать большой блог о крутых инструментах и обычно ищут там такую утилиту -- конечно же, он написал в блоге о паре здесь.
Это будет делать это в Delphi. Обратите внимание на использование функции BitBlt, которая является вызовом API Windows, а не чем-то конкретным для Delphi.
Edit: добавлен пример использования
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;
без установки утилиты автосохранения скриншота, да, вы делаете. Есть несколько утилит, которые вы можете найти, однако folr делает это.
например:http://www.screenshot-utility.com/
конечно, вы можете написать программу, которая контролирует буфер обмена и отображает раздражающий SaveAs-диалог для каждого изображения в буфере обмена ;-). Я думаю, вы даже можете узнать, была ли последняя нажатая клавиша PrintScreen, чтобы ограничить количество ложных срабатываний.
пока я думаю об этом.. вы также можете google для тех, кто уже сделал именно это.
EDIT: .. или просто подождите, пока кто-то опубликует источник здесь - как только что произошло : -)
попробуйте это: http://www.screenshot-utility.com/
с их домашней страницы:
когда вы нажимаете горячую клавишу, она захватывает и сохраняет снимок вашего экрана в файл JPG, GIF или BMP.
Если не устанавливать программу захвата экрана, которую я рекомендую, лучший способ сделать это-использовать стандартный метод печати экрана, а затем открыть Microsoft Office Picture Manager и просто вставить снимок экрана в белую область каталога, который вы хотите. Он создаст растровое изображение, которое вы можете редактировать или сохранять-в другом формате.
спасибо TheSoftwareJedi за предоставление полезной информации о snapping tool В Windows 7. Ярлык для открытия инструмента обрезки : Перейдите в меню Пуск, типа сни И вы найдете имя в списке "инструмент для обрезки"
насколько я знаю в XP, да, вы должны использовать какое-то другое приложение, чтобы фактически сохранить его.
Vista поставляется с инструментом отсечения, что немного упрощает процесс!
оказывается, что Google Picasa (бесплатно) сделает это за вас сейчас. Если она у вас открывается, когда вы нажмете сохранить снимок экрана в файл и загрузить его в приложения. По моему опыту, он отлично работает!
вы можете хотеть что-то вроде этого:http://addons.mozilla.org/en-US/firefox/addon/5648
Я думаю, что есть версия для IE, а также с интеграцией проводника. Довольно хорошее программное обеспечение.
Это можно:
- Нажмите Alt PrintScreen
- открыть папку
- щелкните правой кнопкой мыши - > вставить скриншот
пример:
окно результата теста открыто, сделайте снимок экрана. Открыть C:\Benchmarks Щелкните правой кнопкой мыши - > вставить скриншот Файл с именем screenshot00x.jpg появляется, с выбранным текстом screenshot00x. Введите Overclock5
вот и все. Не нужно ничего открывать. Если вы ничего не пишете, имя по умолчанию корсет.