Je cherche un moyen de faire une capture d'écran de tout l'écran à partir de la ligne de commande. Le système d'exploitation est Windows. Quelque chose comme ceci :
C:\>screenshot.exe screen1.png
Je cherche un moyen de faire une capture d'écran de tout l'écran à partir de la ligne de commande. Le système d'exploitation est Windows. Quelque chose comme ceci :
C:\>screenshot.exe screen1.png
Sous Windows, j'ai réussi en utilisant l'astuce de @zacharyliu. Pour les profanes et pour ceux qui aiment les choses portables, je l'ai fait facilement en utilisant Cmder.
Télécharger Cmder . J'utilise la version portable avec installation complète
Extrait Cmder
Ouvrez le dossier et entrez dans le dossier bin (dans le même dossier que l'exécutable, sinon, créez-en un)
Télécharger le Fichiers NirCmd (lien en bas de page)
Placez les fichiers NirCmd dans le dossier bin.
Ouvrir Cmder (s'il est ouvert, le redémarrer)
Utilisez le code suivant (Sauvegarde screenshots.png toutes les 3 secondes 5 fois dans le fichier C:\screenshots\MONTH-DAY-YEAR\
dossier avec HOURS-MINUTES-SECONDS.png
nom) :
cd C:\ && ([ -d screenshots ] || mkdir screenshots) && "nircmdc.exe" loop 5 3000 execmd "cd C:\screenshots\ && ([ -d ~$currdate.MM-dd-yyyy$ ] || mkdir ~$currdate.MM-dd-yyyy$) && nircmdc.exe savescreenshot C:\screenshots\~$currdate.MM-dd-yyyy$\screenshot-~$currtime.HH-mm-ss$.png"
Profitez-en !
Comment il fonctionne, quels formats de date sont pris en charge, quels formats d'image sont pris en charge, et d'autres détails :
Je n'aime vraiment pas les réponses qui reposent sur des logiciels tiers, j'ai passé un peu de temps à trouver la solution à mon problème, je vais donc la poster ici au cas où quelqu'un en aurait besoin.
J'ai combiné cette réponse avec un peu de ma propre implémentation pour saisir uniquement la fenêtre powershell :
add-type -namespace native -name winapi @"
[DllImport("user32.dll")]
public static extern int GetWindowRect(IntPtr hwnd, out System.Management.Automation.Host.Rectangle rect);
[DllImport("user32.dll")]
public static extern bool SetProcessDPIAware();
"@
# necessary, otherwise the dimensions are wrong with different DPIs
[native.winapi]::SetProcessDPIAware()
$rect = [System.Management.Automation.Host.Rectangle]::new(0,0,0,0)
$pshwnd = ([System.Diagnostics.Process]::GetCurrentProcess() | Get-Process).MainWindowHandle
[native.winapi]::GetWindowRect($pshwnd, [ref] $rect)
[Reflection.Assembly]::LoadWithPartialName("System.Drawing")
function screenshot([Drawing.Rectangle]$bounds, $path) {
$bmp = New-Object Drawing.Bitmap $bounds.width, $bounds.height
$graphics = [Drawing.Graphics]::FromImage($bmp)
$graphics.CopyFromScreen($bounds.Location, [Drawing.Point]::Empty, $bounds.size)
$bmp.Save($path)
$graphics.Dispose()
$bmp.Dispose()
}
$bounds = [Drawing.Rectangle]::FromLTRB($rect.Left, $rect.Top, $rect.Right, $rect.Bottom)
screenshot $bounds "screenshot.png"
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.