Как сделать скрин скриптом powershell?

Пользователь

от rebekah , в категории: Другие , год назад

Как сделать скрин скриптом powershell?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от ally , год назад

@rebekah 

Для создания скриншота с помощью PowerShell вы можете использовать команду New-Object, чтобы создать объект класса System.Windows.Forms.SendKeys и отправить комбинацию клавиш "Print Screen", а затем сохранить скриншот в файл.


Вот пример скрипта PowerShell, который делает скриншот текущего экрана и сохраняет его в файл:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# Создаем объект класса SendKeys и отправляем клавишу Print Screen
$sendKeys = New-Object System.Windows.Forms.SendKeys
$sendKeys::SendWait("{PRTSC}")

# Получаем изображение из буфера обмена
$image = [System.Windows.Forms.Clipboard]::GetImage()

# Сохраняем изображение в файл
$image.Save("C:path	oile.png")


В этом примере мы сначала добавляем две сборки: System.Windows.Forms и System.Drawing, чтобы использовать классы для работы с изображениями. Затем мы создаем объект System.Windows.Forms.SendKeys и отправляем комбинацию клавиш "Print Screen". После этого мы получаем изображение из буфера обмена с помощью метода GetImage() из класса System.Windows.Forms.Clipboard. Наконец, мы сохраняем изображение в файл, используя метод Save().


Обратите внимание, что для сохранения скриншота в файл необходимо указать полный путь к файлу и его имя в методе Save().

Пользователь

от cayla , 5 месяцев назад

@rebekah 

Пример кода, который можно использовать для создания скриншота в PowerShell:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Add-Type -TypeDefinition @"
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;

public class ScreenCapture
{
    [DllImport("user32.dll")]
    public static extern IntPtr GetDC(IntPtr hwnd);

    [DllImport("user32.dll")]
    public static extern IntPtr ReleaseDC(IntPtr hwnd, IntPtr hdc);

    [DllImport("gdi32.dll")]
    public static extern IntPtr CreateCompatibleDC(IntPtr hdc);

    [DllImport("gdi32.dll")]
    public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int nWidth, int nHeight);

    [DllImport("gdi32.dll")]
    public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj);

    [DllImport("gdi32.dll")]
    public static extern bool BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight,
        IntPtr hdcSrc, int nXSrc, int nYSrc, TernaryRasterOperations dwRop);

    [DllImport("gdi32.dll")]
    public static extern bool DeleteObject(IntPtr hObject);

    [DllImport("user32.dll")]
    public static extern IntPtr GetDesktopWindow();

    [Flags]
    public enum TernaryRasterOperations : uint
    {
        SRCCOPY = 0x00CC0020 // BitBlt dwRop parameter
    }

    public static Bitmap CaptureScreen()
    {
        IntPtr desktopHwnd = GetDesktopWindow();
        IntPtr desktopHdc = GetDC(desktopHwnd);
        IntPtr compatibleDc = CreateCompatibleDC(desktopHdc);
        IntPtr compatibleBitmap = CreateCompatibleBitmap(desktopHdc, 1920, 1080); // Измените размеры согласно своим потребностям

        if (compatibleBitmap != IntPtr.Zero)
        {
            IntPtr previousBitmap = SelectObject(compatibleDc, compatibleBitmap);
            BitBlt(compatibleDc, 0, 0, 1920, 1080, desktopHdc, 0, 0, TernaryRasterOperations.SRCCOPY);
            SelectObject(compatibleDc, previousBitmap);

            Bitmap bitmap = Image.FromHbitmap(compatibleBitmap);
            
            DeleteObject(compatibleBitmap);
            DeleteObject(compatibleDc);
            ReleaseDC(desktopHwnd, desktopHdc);

            return bitmap;
        }

        return null;
    }
}
"@

# Создание скриншота
$bitmap = [ScreenCapture]::CaptureScreen()

# Сохранение скриншота в файл
$bitmap.Save("C:путькфайлу.png", [System.Drawing.Imaging.ImageFormat]::Png)

# Освобождение памяти
$bitmap.Dispose()


В этом примере мы объявляем класс ScreenCapture, который содержит метод CaptureScreen(), использующий функциональность WinAPI для создания скриншота рабочего стола. Мы добавляем объявление класса с помощью Add-Type -TypeDefinition, чтобы использовать его в PowerShell.


В основном коде мы вызываем метод CaptureScreen() для создания скриншота рабочего стола, а затем сохраняем его в файл с помощью метода Save(). Обратите внимание, что вам необходимо указать полный путь к файлу и его имя в методе Save(). После сохранения мы освобождаем память, вызывая метод Dispose() у объекта bitmap.


Пожалуйста, обратите внимание, что для работы этого скрипта могут потребоваться права администратора.