Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как спрятать программу от скриншота. 
V
    Опции темы
Antarn
Дата 14.11.2006, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 11.8.2006

Репутация: нет
Всего: нет



Вот код, который делает скриншот(взятый с этого же форума  smile ):
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  bm:TBitMap;
  DC:HDC;
begin
    bm:=TBitMap.Create;
    bm.Width:=Screen.Width;
    bm.Height:=Screen.Height;
    DC:=GetDC(0);
    BitBlt(bm.Canvas.Handle, 1, 1, bm.Width, bm.Height, DC, 0, 0, SRCCOPY);
    ReleaseDC(0,DC);
    bm.SaveToFile('c:\Screen1.bmp');
    bm.Free;
end;

но делает скриншот вместе с программой, где кликается кнопка. как сделать, чтобы делался скриншот без данной программы?
PM MAIL   Вверх
Guedda
Дата 14.11.2006, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



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


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Antarn
Дата 14.11.2006, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 11.8.2006

Репутация: нет
Всего: нет



Цитата

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

это какой тип надо использовать ? (Unit, Application, Component, Batch File и др.)
и как понять "главная программа запускает программу без формы" ?

а как сохранить скриншот в *.jpg или *.gif формате? а то сейчас сохраняет как *.bmp и весит порядка 3-4 мб.
PM MAIL   Вверх
Poseidon
Дата 14.11.2006, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Antarn @  14.11.2006,  20:48 Найти цитируемый пост)
как сделать, чтобы делался скриншот без данной программы? 
 "Это же элементарно, Ватсон!" (С)


Код
procedure TForm1.Button1Click(Sender: TObject);
var
  bm:TBitMap;
  DC:HDC;
begin
  ShowWindow(Form1.Handle, SW_Hide);
  ShowWindow(Application.Handle, SW_Hide);
  sleep(50);
    bm:=TBitMap.Create;
    bm.Width:=Screen.Width;
    bm.Height:=Screen.Height;
    DC:=GetDC(0);
    BitBlt(bm.Canvas.Handle, 1, 1, bm.Width, bm.Height, DC, 0, 0, SRCCOPY);
    ReleaseDC(0,DC);
    bm.SaveToFile('d:\Screen1.bmp');
    bm.Free;
  ShowWindow(Form1.Handle, SW_Show);
  ShowWindow(Application.Handle, SW_Show);
end;



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
JUmPER
Дата 15.11.2006, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 22.8.2006

Репутация: нет
Всего: 3



Цитата(Antarn @ 14.11.2006,  22:35)
Цитата

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

это какой тип надо использовать ? (Unit, Application, Component, Batch File и др.)
и как понять "главная программа запускает программу без формы" ?

а как сохранить скриншот в *.jpg или *.gif формате? а то сейчас сохраняет как *.bmp и весит порядка 3-4 мб.

создаём консольное приложение, удаляем из него "{APPTYPE CONSOLE}" (что-то в жтом роде)
и оно у тебя без формы+ без стандартного дос-окошка
--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
Sunvas
Дата 15.11.2006, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Antarn @  14.11.2006,  22:35 Найти цитируемый пост)
а как сохранить скриншот в *.jpg или *.gif формате? а то сейчас сохраняет как *.bmp и весит порядка 3-4 мб.

Код

uses JPEG;

{........}
var jpg: TJpegImage;
{......}
jpg := TJPEGImage.Create;
    jpg.CompressionQuality := 100;
    jpg.Assign(bmp);//bmp:Tbitmap;
jpg.SaveToFile('c:\1.jpg');
jpg.Free;


Цитата(Antarn @  14.11.2006,  22:35 Найти цитируемый пост)
и как понять "главная программа запускает программу без формы" ?

Код

procedure TForm1.FormCreate(Sender: TObject);
begin
application.ShowMainForm:=false;
end;


Это сообщение отредактировал(а) Sunvas - 15.11.2006, 18:47


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Antarn
Дата 15.11.2006, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 11.8.2006

Репутация: нет
Всего: нет



Poseidon, спасибо тебе большое.  smile 
JUmPER, классно, буду знать. спасибо.

Sunvas, 
Цитата

Project Project2.exe raised exception class EAccessViolation with message 'Access violation at address 008E3D16. Read of address FFFFFFFF'. Process stopped. 


вот как я вставил (и в uses JPEG добавил):
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  bm:TBitMap;
  DC:HDC;
  jpg: TJpegImage;
begin
  ShowWindow(Form1.Handle, SW_Hide);
  ShowWindow(Application.Handle, SW_Hide);
  sleep(50);
    bm:=TBitMap.Create;
    bm.Width:=Screen.Width;
    bm.Height:=Screen.Height;
    DC:=GetDC(0);
    BitBlt(bm.Canvas.Handle, 1, 1, bm.Width, bm.Height, DC, 0, 0, SRCCOPY);
    ReleaseDC(0,DC);
    bm.SaveToFile('c:\Screen1.bmp');
    bm.Free;
    jpg := TJPEGImage.Create;
    jpg.CompressionQuality := 100;
    jpg.Assign(bm);//bmp:Tbitmap;
    jpg.SaveToFile('c:\1.jpg');
    jpg.Free;
  ShowWindow(Form1.Handle, SW_Show);
  ShowWindow(Application.Handle, SW_Show);
end;

PM MAIL   Вверх
Sunvas
Дата 15.11.2006, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



И не правильно добавил!
Замени это
Цитата(Antarn @  15.11.2006,  19:15 Найти цитируемый пост)
 bm.Free;    
    jpg := TJPEGImage.Create;    
    jpg.CompressionQuality := 100;    
    jpg.Assign(bm);//bmp:Tbitmap;

на это:

Код

   jpg := TJPEGImage.Create;    
    jpg.CompressionQuality := 100;    
    jpg.Assign(bm);//bmp:Tbitmap;
bm.Free;

Ты просто обращаешься к компоненту, когда он уже разрушен и выгружен из памяти.

Это сообщение отредактировал(а) Sunvas - 15.11.2006, 19:46


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Antarn
Дата 15.11.2006, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 11.8.2006

Репутация: нет
Всего: нет



и вправду.. хоть и не знал я этого, но подумать наверное все-таки стоило  smile 
спасибо тебе  smile 

вот конечная процедура, которая по клику кнопки делает скриншот , при этом не отображается сама программа и снимок сохраняется в *.jpg файл:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  bm:TBitMap;
  DC:HDC;
  jpg: TJpegImage;
begin
  ShowWindow(Form1.Handle, SW_Hide);
  ShowWindow(Application.Handle, SW_Hide);
  sleep(50);
    bm:=TBitMap.Create;
    bm.Width:=Screen.Width;
    bm.Height:=Screen.Height;
    DC:=GetDC(0);
    BitBlt(bm.Canvas.Handle, 1, 1, bm.Width, bm.Height, DC, 0, 0, SRCCOPY);
    ReleaseDC(0,DC);
    jpg := TJPEGImage.Create;
    jpg.CompressionQuality := 100;
    jpg.Assign(bm);//bmp:Tbitmap;
    jpg.SaveToFile('c:\1.jpg');
    jpg.Free;
    bm.Free;
  ShowWindow(Form1.Handle, SW_Show);
  ShowWindow(Application.Handle, SW_Show);
end;

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.