Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2008, 16:48   #1
Bulldozer
 
Регистрация: 30.10.2008
Сообщений: 3
По умолчанию Вопрос по скриншотам

Вот код программы (C#) которая позволяет сделать скриншот непосредственно формы этой программы. Как мне сделать скриншот какого-нить другого приложения? Или например активного в данный момент окна.

namespace PrtSc
{
public partial class PrtSc : Form
{

[DllImportAttribute("gdi32.dll")]


private static extern bool BitBlt(IntPtr hdcDest, int nXDest, int nYDest,
int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc,
System.Int32 dwRop);



public PrtSc()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Graphics g1 = this.CreateGraphics();
Image myImage = new Bitmap(this.ClientRectangle.Width,
this.ClientRectangle.Height, g1);

Graphics g2 = Graphics.FromImage(myImage);

IntPtr dc1 = g1.GetHdc();
IntPtr dc2 = g2.GetHdc();

BitBlt(dc2, 0, 0, this.ClientRectangle.Width,
this.ClientRectangle.Height, dc1, 0, 0, 13369376);

g1.ReleaseHdc(dc1);
g2.ReleaseHdc(dc2);
myImage.Save("XZ.Jpeg", ImageFormat.Jpeg);
}

}
}
Bulldozer вне форума Ответить с цитированием
Старый 30.10.2008, 19:19   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

В принципе также (нужно бы еще GetWindowRect() и ReleaseDC()):

Код:
        [DllImportAttribute("gdi32.dll")]
        private static extern bool BitBlt(IntPtr hdcDest, int nXDest, int nYDest,
        int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc,
        System.Int32 dwRop);

        [DllImportAttribute("user32.dll")]
        private static extern IntPtr GetDC(IntPtr HWND);

        [DllImportAttribute("user32.dll", CharSet = CharSet.Unicode)]
        private static extern IntPtr FindWindowW(String lpClassName, String lpWindowName);

        private void button4_Click(object sender, EventArgs e)
        {
            //IntPtr hwnd = FindWindowW("notepad", null);
            //if (hwnd.ToInt32() == 0) return;
            //IntPtr hdc = GetDC(hwnd);

            IntPtr hdc = GetDC(IntPtr.Zero); 

            Bitmap myImage = new Bitmap(400, 400);
            Graphics g1 = Graphics.FromImage(myImage);
            IntPtr dc1 = g1.GetHdc();

            BitBlt(dc1, 0, 0, 400, 400, hdc, 0, 0, 13369376);

            g1.ReleaseHdc(dc1);
            myImage.Save("XZ.Jpeg", ImageFormat.Jpeg);
        }
alexBlack вне форума Ответить с цитированием
Старый 05.11.2008, 14:35   #3
Bulldozer
 
Регистрация: 30.10.2008
Сообщений: 3
По умолчанию

Выдает сообщение, что функция FindWindowW не найдена в user32.dll .
И где можно найти подробное описание этой функции?

з.ы. Что делать, если не знаешь класс окна, дескриптор которого надо получить?

Последний раз редактировалось Bulldozer; 05.11.2008 в 15:45.
Bulldozer вне форума Ответить с цитированием
Старый 05.11.2008, 15:56   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Выдает сообщение, что функция FindWindowW не найдена в user32.dll
Странно... Код скопировали без изменений ? Закомментированная часть у меня работала с Notepad

Цитата:
И где можно найти подробное описание этой функции?
FindWindow

И вот это посмотрите

Цитата:
з.ы. Что делать, если не знаешь класс окна, дескриптор которого надо получить?
Импровизировать...
WindowFromPoint
alexBlack вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос!!! tigor Общие вопросы Delphi 11 23.10.2009 09:45
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10
необходимо сообщение - "не введено число", если вводится слово Sour Помощь студентам 6 23.08.2007 19:49