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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 29.10.2011, 19:26   #1
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию скриншот окна программы

допустим я нашол дескриптор окна программы, возможно ли сделать скрин только етого окна а не всего рабочего стола?
Pein95 вне форума
Старый 29.10.2011, 19:31   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну если вы знаете размеры окна, то кто мешает взять нужную часьть изображения?
так же если окно видимо, то можно попробовать его само скопировать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 29.10.2011, 19:37   #3
Хамяг
Форумчанин
 
Аватар для Хамяг
 
Регистрация: 22.08.2008
Сообщений: 105
По умолчанию

SetForegroundWindow, GetWindowPlacement, BitBlt

попробуйте через эти функции.
Хамяг вне форума
Старый 29.10.2011, 19:39   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Как сделать BMP снимок с экрана?

Код от Alar (весь экран):
Код:
var 
ScreenDC:HDC; 
Canvas:TCanvas; 
Image1:TImage; 
Begin 
ScreenDC := GetDC(0); 
Canvas:=TCanvas.Create(); 
Canvas.Handle:=ScreenDC; 
Image1 := TImage.Create(nil); 
Image1.Width := Screen.Width; 
Image1.Height := Screen.Height; 
Image1.Canvas.CopyRect(Rect(0, 0, Image1.Width, Image 1.Height), Canvas, Rect(0, 0, Screen.Width, Screen.Height)); 
ReleaseDC(0,ScreenDC); 
Canvas.Free; 
end;
Попробуйте, заменив
Код:
ScreenDC := GetDC(0);
на
Код:
ScreenDC := GetDC(Form4.Handle);
Можете даже отдельный компонент скриншотить, задав, например,
Код:
ScreenDC := GetDC(Form4.Panel1.Handle);
З.Ы. Не забудьте заменить Screen.Width на Form4.Width и т.д.

Последний раз редактировалось mihali4; 29.10.2011 в 19:43.
mihali4 вне форума
Старый 29.10.2011, 19:46   #5
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

спс за код буду пробовать)
Pein95 вне форума
Старый 29.10.2011, 19:49   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

SetForegroundWindow
или как-то так. В любом случаее нужное окно выдвинуть окно вперёд.
т.к. скрин не отрисованнного окна зделать невозможно.
Человек_Борща вне форума
Старый 29.10.2011, 20:19   #7
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

ну собственно сделал я скрин нужного мне окна загрузил его в Image, как мне теперь нажать на тот елемент что мне нужно? зарание спасибо за ответ) делаю скрин вот таким кодом:
Код:
procedure ScreenShot(hWindow: HWND; bm: TBitmap);
 var
   Left, Top, Width, Height: Word;
   R: TRect;
   dc: HDC;
   lpPal: PLOGPALETTE;
 begin

   if not IsWindow(hWindow) then Exit;

   GetWindowRect(hWindow, R);
   Left := R.Left;
   Top := R.Top;
   Width := R.Right - R.Left;
   Height := R.Bottom - R.Top;
   bm.Width  := Width;
   bm.Height := Height;

   dc := GetDc(0);
   if (dc = 0) then
    begin
     Exit;
   end;

   if (GetDeviceCaps(dc, RASTERCAPS) and
     RC_PALETTE = RC_PALETTE) then
    begin

     GetMem(lpPal,
       SizeOf(TLOGPALETTE) +
     (255 * SizeOf(TPALETTEENTRY)));

     FillChar(lpPal^,
       SizeOf(TLOGPALETTE) +
     (255 * SizeOf(TPALETTEENTRY)),
       #0);

     lpPal^.palVersion := $300;

     lpPal^.palNumEntries :=
       GetSystemPaletteEntries(dc,
       0,
       256,
       lpPal^.palPalEntry);
     if (lpPal^.PalNumEntries <> 0) then
      begin

       bm.Palette := CreatePalette(lpPal^);
     end;
     FreeMem(lpPal, SizeOf(TLOGPALETTE) +
     (255 * SizeOf(TPALETTEENTRY)));
   end;

   BitBlt(bm.Canvas.Handle,
     0,
     0,
     Width,
     Height,
     Dc,
     Left,
     Top,
     SRCCOPY);

   ReleaseDc(0, dc);
 end;
Pein95 вне форума
Старый 29.10.2011, 20:53   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
как мне теперь нажать на тот елемент что мне нужно?
Ну а теперь из вас нужно вытягивать, а что ж такое тот елемент что мне нужно?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума
Старый 29.10.2011, 20:57   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Причина закрытия темы ?
Наверху, на темном фоне, читайте 4-ю строку...
Еще лучше - прочитайте правила раздела, там много интересного...
mihali4 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прорисовка окна программы bagfinder Общие вопросы Delphi 2 15.01.2010 15:23
оптимальный размер окна программы street-walker Общие вопросы Delphi 10 06.01.2010 00:04
Указание слоя окна программы kakawkin Win Api 4 11.10.2009 12:10
Изменить размеры окна программы КамТерДал Microsoft Office Excel 6 08.10.2009 14:47
Информация с окна программы Артэс Общие вопросы C/C++ 3 24.04.2008 05:21