Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 5

Сделать скрин выбранного окна

29.12.2015, 00:55. Показов 1125. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте господа.
Требуется вот что:
сделать скриншот выбранного окна.
т.е. получить список процессов, выбрать из списка процесс, сделать скрин.
Подскажите уважаемы в какую сторону копать.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.12.2015, 00:55
Ответы с готовыми решениями:

Сделать сплеш-скрин с прогрессом
всем привет!) у меня долго загружается форма, так как при загрузке формы загружаются данные которые после выводятся, как мне сделать чтобы...

Как сделать скрин области экрана?
Помогите :( Как сделать скрин экрана без пуска, панели управления, панели быстрого доступа, проводника, точнее узнать их координаты в...

Как сделать скрин pictureBox, но не всей формы
Приветствую программистов. Мне очень нужен код для слудующей задачи - на форме расположен pictureBox и принажатиии кнопки происходит...

4
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 5
29.12.2015, 18:23  [ТС]
можно закрывать.
0
0 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 1
31.01.2016, 13:47
Добрый день.
Если Вы нашли решение озвученной задачи, то было бы интересно посмотреть реализацию.
Если это возможно, конечно.
Заранее благодарю.
0
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 5
31.01.2016, 15:10  [ТС]
на c# решения не нашел, реализовал на delphi через DwmApi, если интересно могу выложить исходник.
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
31.01.2016, 16:17
Terpla, набросал Вам пример:
C#
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
using System;
using System.Linq;
using System.Drawing;
using System.Threading;
using System.Reflection;
using System.Diagnostics;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.Text.RegularExpressions;
using System.Runtime.InteropServices;
 
namespace ScreenShot {
  internal sealed class frmMain : Form {
    public frmMain() {
      InitializeComponent();
    }
    
    private ComboBox   cbProcess;
    private Button     btnShot;
    private PictureBox pbPreview;
    
    private const String USER32  = "user32.dll";
    private const UInt32 SW_HIDE = 0;
    private const UInt32 SW_SHOW = 5;
    
    private static _GetWindowRect GetWindowRect {get; set;}
    private static _SetForegroundWindow SetForegroundWindow {get; set;}
    private static _ShowWindow ShowWindow {get; set;}
    
    private static T GetProc<T>(String dll, String fun) where T : class {
      var meths = Assembly
          .GetAssembly(typeof(Regex))
          .GetType("Microsoft.Win32.UnsafeNativeMethods")
          .GetMethods(BindingFlags.Static | BindingFlags.Public)
          .Where(m => new Regex(@"\AGet(ProcA|ModuleH)").IsMatch(m.Name))
          .ToList();
      IntPtr ptr = (IntPtr)meths[1].Invoke(null, new Object[] {
        new HandleRef(new IntPtr(), (IntPtr)meths[0].Invoke(null, new Object[] {dll})), fun
      });
      
      if (ptr == IntPtr.Zero) {
        throw new InvalidOperationException("Could not find specified signature.");
      }
      
      return Marshal.GetDelegateForFunctionPointer(ptr, typeof(T)) as T;
    }
    
    [StructLayout(LayoutKind.Sequential)]
    internal struct RECT {
      internal Int32 left;
      internal Int32 top;
      internal Int32 right;
      internal Int32 bottom;
    }
    
    [UnmanagedFunctionPointer(CallingConvention.Winapi)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private delegate Boolean _GetWindowRect(
        IntPtr hWnd,
        ref RECT rect
    );
    
    [UnmanagedFunctionPointer(CallingConvention.Winapi)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private delegate Boolean _SetForegroundWindow(
        IntPtr hWnd
    );
    
    [UnmanagedFunctionPointer(CallingConvention.Winapi)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private delegate Boolean _ShowWindow(
        IntPtr hWnd,
        UInt32 nCmdShow
    );
    
    private static void LocateSignatures() {
      GetWindowRect = GetProc<_GetWindowRect>(USER32, "GetWindowRect");
      SetForegroundWindow = GetProc<_SetForegroundWindow>(USER32, "SetForegroundWindow");
      ShowWindow = GetProc<_ShowWindow>(USER32, "ShowWindow");
    }
    
    private void InitializeComponent() {
      this.cbProcess = new ComboBox() {
        Location = new Point(13, 13)
      };
      this.btnShot   = new Button() {
        Location = new Point(13, 37),
        Text = "Shot",
        Width = 120
      };
      this.btnShot.Click += (s, e) => {
        Int32 height, width;
        Process proc = Process.GetProcessesByName(cbProcess.SelectedItem.ToString())[0];
        RECT rect = new RECT();
        
        if (GetWindowRect(proc.MainWindowHandle, ref rect)) {
          ShowWindow(this.Handle, SW_HIDE);
          Thread.Sleep(500);
          SetForegroundWindow(proc.MainWindowHandle);
          Thread.Sleep(500);
          height = rect.bottom - rect.top;
          width  = rect.right - rect.left;
          
          using (Bitmap bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb)) {
            using (Graphics g = Graphics.FromImage(bmp)) {
              g.CopyFromScreen(rect.left, rect.top, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy);
              pbPreview.Image = new Bitmap(bmp);
            }
          }
          ShowWindow(this.Handle, SW_SHOW);
          SetForegroundWindow(this.Handle);
        }
      };
      this.pbPreview = new PictureBox() {
        BorderStyle = BorderStyle.FixedSingle,
        Location = new Point(143, 13),
        Size = new Size(370, 250),
        SizeMode = PictureBoxSizeMode.StretchImage
      };
      this.ClientSize = new Size(530, 290);
      this.Controls.AddRange(new Control[] {this.cbProcess, this.btnShot, this.pbPreview});
      this.FormBorderStyle = FormBorderStyle.FixedSingle;
      this.MaximizeBox = false;
      this.StartPosition = FormStartPosition.CenterScreen;
      this.Text = "ScreenShot";
      this.Load += (s, e) => {
        LocateSignatures();
        Process
            .GetProcesses()
            .Where(p => p.MainWindowHandle != IntPtr.Zero)
            .Select(p => p.ProcessName)
            .ToList()
            .ForEach(p => cbProcess.Items.Add(p));
        cbProcess.SelectedIndex = 0;
      };
    }
  }
  
  internal sealed class Program {
    [STAThread]
    static void Main() {
      Application.EnableVisualStyles();
      Application.Run(new frmMain());
    }
  }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.01.2016, 16:17
Помогаю со студенческими работами здесь

Как сделать сохранение в файл с учетом выбранного RadioButton
Ребят всем привет, нужна помощь кто сможет помогите пожалуйста, заранее спасибо. Суть такова имеется программа. Помогите сделать...

Как сделать скрин активного окна?
Как сделать скрин активного окна? скок искал находил только на общий скрин С Vb общаюсь недавно, сам сообразить пока не могу

Скрин диалогового окна
Доброго времени суток всем! Помогите,если кто понимает... надо реализовать в программе создание скрина диалогового окна... по порядку...

Скрин только одного окна
#include &lt;windows.h&gt; #include &lt;stdio.h&gt; int w, h; void *p; void dump_bmp() { int i; BITMAPFILEHEADER bfh;

Скрин чужого окна по его HANDLE
Прошу помощи\совета что то я никак не могу получить скрин окна по HANDLE ниже приведен код, он делает скрин и выводит в Image1 но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru