Vous pouvez coder quelque chose d'assez simple qui accrochera le PrintScreen et enregistrera la capture dans un fichier.
Voici un début de capture et d'enregistrement dans un fichier. Il vous suffira d'accrocher la touche "Imprimer l'écran".
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);
}
Mise à jour Voici le code qui permet d'accrocher la touche PrintScreen (et d'autres touches) à partir de C# :
Code de crochet
14 votes
Photoshop ?? Pourquoi ne pas utiliser mspaint ou paint.net ? Pourquoi utiliser quelque chose d'aussi lourd que Photoshop ?
1 votes
Le mieux que j'ai obtenu est une capture d'écran de word avec une capture d'écran d'un message d'erreur directement collé dans un courrier HTML.
0 votes
Désolé si ce n'est pas vraiment une contribution, mais je regrette qu'après toutes ces années, Microsoft n'ait toujours pas mis en œuvre ce qu'Apple a fait depuis longtemps. Le Mac enregistre l'image tout seul. Pas besoin de lancer une application et de coller. Je veux dire que pour une utilisation professionnelle, le temps c'est de l'argent. J'utilise aussi paint pour coller mais je trouve cette procédure assez lourde. Je voulais juste exprimer ma frustration ici. Merci de votre compréhension.
0 votes
@Lawrence laisse-moi aussi m'exprimer un peu Je ne dirais pas que le processus sur Mac est meilleur, alors que la fin est meilleure, l'enregistrement automatique et tout le reste, l'avant, la commande + shift + 3/4 est ultra arcane. Linux Il est ironique de constater que la plupart des fonctionnalités de l'interface utilisateur ont été copiées d'abord sur Windows et maintenant sur Mac. Pour ceux qui ne le savent pas, sous Linux, on appuie sur print screen, on tape un nom, on enregistre et on continue.
1 votes
Jetez un coup d'oeil à ma réponse, il est ENFIN possible de le faire au moins aussi facilement que sur Mac (la fluidité de linux reste cependant meilleure).
1 votes
Marqué pour être transféré à SuperUser. Bien que la réponse acceptée ait finalement été une réponse programmatique, cette question, telle qu'elle a été rédigée, cherchait une réponse sur l'utilisation générale de l'ordinateur et a donc sa place sur SuperUser.
0 votes
"linux flow" lorsque j'appuie sur print sur mon linux rien ne se passe, je vais généralement faire
sleep 5 && import screenshot.jpg
mais oui, c'est quand même beaucoup plus facile. Mais vous parlez des fonctionnalités de Gnome ou de KDE.1 votes
Bonjour, la réponse est peut-être un peu tardive mais elle peut aider d'autres personnes ayant un problème similaire. Il existe une application dans le Windows Store avec laquelle vous pouvez enregistrer une capture d'écran depuis le presse-papiers vers une image temporaire sur le disque et renvoyer le chemin d'accès au fichier, de sorte que vous pouvez l'utiliser avec un simple ctrl + v dans n'importe quelle application ( microsoft.com/store/apps/9PM34S06CFVJ ). Vous n'aurez plus besoin d'ouvrir un autre logiciel pour enregistrer la capture d'écran dans un fichier.