Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.10;
Скачать: CL | DM;

Вниз

Скриншот окна броузера   Найти похожие ветки 

 
kyn66 ©   (2008-07-09 11:57) [0]

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


 
Palladin ©   (2008-07-09 12:28) [1]

Alt+Print Screen


 
kyn66 ©   (2008-07-09 12:36) [2]

Мне не нужна распечатка, а тем боле всег экрана. В вопросе четко указана зона захвата.


 
Palladin ©   (2008-07-09 12:51) [3]

Alt+Print Screen
Paint


 
Leonid Troyanovsky ©   (2008-07-09 12:52) [4]

Удалено модератором
Примечание: Выбираем выражения...


 
brother ©   (2008-07-09 12:57) [5]

Удалено модератором


 
Anatoly Podgoretsky ©   (2008-07-09 13:00) [6]

Ну так Print же. Перевожу на падонский Распечатка


 
kyn66 ©   (2008-07-09 13:06) [7]

Ну и как доступ к этой области заполучить? Мне нужно в файл сохранить. Раньше делал так:

procedure TGenTFrm.SaveImageToFile(NameSave : String; TypeFile : Byte);
var
 BitMap1 : Graphics.TBitmap;
 Image1  : TImage;
 Jpeg1   : TJPEGImage;  
 Png1    : TPNGObject;
begin
 BitMap1 := TBitMap.Create;
 try
   BitMap1.Height:=GPanel1.Height;
   BitMap1.Width:=GPanel1.Width;
   BitBlt(BitMap1.Canvas.Handle, 0 {Лево}, 0{Top},GPanel1.Width, GPanel1.Height,
          GetDC(GPanel1.Handle), 0, 0, SRCCOPY);
   Image1 := TImage.Create(nil);
   BitMap1.IgnorePalette := True;
   Image1.Picture.Assign(BitMap1);
   Case TypeFile of
      0 : begin
            BitMap1.SaveToFile(NameSave + ".bmp");
          end;
      1 : begin
            Jpeg1 := TJpegImage.Create;
            Jpeg1.Assign(Image1.Picture.Bitmap);
            Jpeg1.SaveToFile(NameSave + ".jpg");
            Jpeg1.Free;
          end;
      2 : begin
            Png1 := TPNGObject.Create;
            Png1.Assign(Image1.Picture.Bitmap);
            Png1.SaveToFile(NameSave + ".png");
            Png1.Free;
          end;
   end;{Case}
   Image1.Free;
   Messager.Message := "Картинка скопирована " + #10#13 +
                       "на жесткий диск.";
   Messager.Show;
 finally
   BitMap1.Free;
 end;
end;


Только в данном случае я четко указывал на область копирования. А сейчас как быть?


 
brother ©   (2008-07-09 13:09) [8]

про delphi никто не говорил ;)


 
brother ©   (2008-07-09 13:12) [9]

как я себе это представляю:
находим окно броузера
выясняем его left, top, heigh, width
копируем только эту область...


 
kyn66 ©   (2008-07-09 13:18) [10]

Приблизительно так. Осталось его найти. Известен тока класс. Не имени нет , ничего.

про delphi никто не говорил ;)
А мы на каком форуме находимся? ;)


 
turbouser ©   (2008-07-09 13:19) [11]


> kyn66 ©   (09.07.08 13:18) [10]
>
> Приблизительно так. Осталось его найти.

GetForegroundWindow


 
brother ©   (2008-07-09 13:21) [12]

> А мы на каком форуме находимся? ;)

не знаю где остальные, я в танке))))))))))


 
clickmaker ©   (2008-07-09 13:22) [13]

> Приблизительно так. Осталось его найти. Известен тока класс

FindWindow


 
brother ©   (2008-07-09 13:23) [14]

> Известен тока класс.

по нему, как мне помнится, тож можно искать


 
Rouse_ ©   (2008-07-09 13:41) [15]

Это устроит?
http://www.swissdelphicenter.ch/en/showcode.php?id=1983


 
kyn66 ©   (2008-07-09 13:41) [16]

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


 
ketmar ©   (2008-07-09 14:03) [17]

>[16] kyn66 © (2008-07-09 13:41:00)
>Про окно ничего не известно

так узнай.

---
All Your Base Are Belong to Us


 
kyn66 ©   (2008-07-09 15:13) [18]

>Это устроит?
Что-то вроде похоже.... Спасибо, попробую разбираться.


 
Zeqfreed ©   (2008-07-09 15:26) [19]

Как вариант — использовать lynx и fbgrab ;)


 
ketmar ©   (2008-07-09 15:34) [20]

>[19] Zeqfreed © (2008-07-09 15:26:00)
тю. links --dump %-)

---
All Your Base Are Belong to Us


 
kyn66 ©   (2008-07-09 16:37) [21]

gs nf.cm разобраться с примером http://www.swissdelphicenter.ch/en/showcode.php?id=1983 , однако не понятно откуда взято:

 IDoc1: IHTMLDocument2;
 Web: ShDocVW_TLB.IWebBrowser2;


 
Rouse_ ©   (2008-07-09 18:22) [22]

uses ShDocVW


 
kyn66 ©   (2008-07-10 09:15) [23]

Да, с этим разобрался, однако ни пример http://www.swissdelphicenter.ch/en/showcode.php?id=1983 ни GetForegroundWindow не подходит. В первом случае используется TWebBrowser(а задача сосотит в том, чтобы получить скрин со стндртного IE или Оперы), во втором случае берется полностью окно, а не его рабочая область. Решение пока не найдено. Есть ешшо варианты?


 
Rouse_ ©   (2008-07-10 09:26) [24]


> используется TWebBrowser(а задача сосотит в том, чтобы получить
> скрин со стндртного IE

Интерфейс один и тот-же. Немного измени и все. А для получения окна IE вот тебе пример, ищет хэндл браузера в который открыт указанный путь, походя перебирает все открытые окна браузеров.

procedure TForm1.Button1Click(Sender: TObject);

 function ParceURLName(const Value: String): String;
 const
   scFilePath: array [0..7] of Char = ("f", "i", "l", "e", ":", "/", "/", "/");
 begin
   if CompareMem(@scFilePath[0], @Value[1], 8) then
   begin
     Result := Copy(Value, 9, Length(Value));
     Result := StringReplace(Result, "/", "\", [rfReplaceAll]);
     Result := StringReplace(Result, "%20", " ", [rfReplaceAll]);
   end
   else
     Result := Value;
 end;

var
 iShellWindow: IShellWindows;
 iWB: IWebBrowserApp;
 spDisp: IDispatch;
 I: Integer;
 S: String;
begin
 iShellWindow := CoShellWindows.Create;
 for I := 0 to iShellWindow.Count - 1 do
 begin
   spDisp := iShellWindow.Item(I);
   if spDisp = nil then Continue;
   spDisp.QueryInterface(IWebBrowserApp, iWB);
   if iWB <> nil then
   begin
     S := ParceURLName(iWB.LocationURL);
     if AnsiUpperCase(S) = AnsiUpperCase(Edit1.Text) then
     begin
       ShowMessage("Окно найдено, хэндл окна: " + IntToStr(iWB.HWND));
       Exit;
     end;
   end;
 end;
 ShowMessage("Окно не найдено");
end;


 
iZEN   (2008-07-10 09:35) [25]

Используй ImageMagick.

man import


 
kyn66 ©   (2008-07-10 11:48) [26]

>Rouse_
Так, уже что-то ближе. Однако проверив  убедился, что данный код работает только с IE, а с Оперой нет. И нет смысла перебирать все окна, нужно остановиться только на тивном. Получается, что найти хэндл окна можно только зная урл.... НУжно активное и все.

>iZEN
Используй ImageMagick.
Это мне ни о чем не говорит :(


 
Rouse_ ©   (2008-07-10 12:10) [27]


> Получается, что найти хэндл окна можно только зная урл..
> .. НУжно активное и все.

А с активным то у тебя какие проблемы? Неужто чуть-чуть покумекать и поменять немного код нельзя?

uses
 SHDocVw;

function ParceURLName(const Value: String): String;
const
 scFilePath: array [0..7] of Char = ("f", "i", "l", "e", ":", "/", "/", "/");
begin
 if CompareMem(@scFilePath[0], @Value[1], 8) then
 begin
   Result := Copy(Value, 9, Length(Value));
   Result := StringReplace(Result, "/", "\", [rfReplaceAll]);
   Result := StringReplace(Result, "%20", " ", [rfReplaceAll]);
 end
 else
   Result := Value;
end;

function GetBrowserPath(TID: DWORD): String;
var
 iShellWindow: IShellWindows;
 iWB: IWebBrowserApp;
 spDisp: IDispatch;
 I: Integer;
begin
 Result := "";
 iShellWindow := CoShellWindows.Create;
 for I := 0 to iShellWindow.Count - 1 do
 begin
   spDisp := iShellWindow.Item(I);
   if spDisp = nil then Continue;
   spDisp.QueryInterface(IWebBrowserApp, iWB);
   if iWB <> nil then
     if GetWindowThreadProcessId(iWB.HWND) = TID then
     begin
       Result := ParceURLName(iWB.LocationURL);
       Break;
     end;
 end;
end;

procedure TForm25.Timer1Timer(Sender: TObject);
begin
 Memo1.Lines.Add(GetBrowserPath(
   GetWindowThreadProcessId(GetForegroundWindow)));
end;


 
Anatoly Podgoretsky ©   (2008-07-10 12:34) [28]

> kyn66  (10.07.2008 11:48:26)  [26]

> Это мне ни о чем не говорит :(

Спроси у Гугл, он знает и тебе расскажет тоже.



Страницы: 1 вся ветка

Текущий архив: 2008.08.10;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.017 c
2-1215428715
kirillrepin
2008-07-07 15:05
2008.08.10
DBGrid


15-1214471303
denic
2008-06-26 13:08
2008.08.10
Панель компонентов -> вкладка ActiveX ->


2-1214996937
JanMihail
2008-07-02 15:08
2008.08.10
Количество элементов в множестве


11-1192280293
Elec3C
2007-10-13 16:58
2008.08.10
F12


11-1192387325
INFINITY
2007-10-14 22:42
2008.08.10
PTimer