Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Скриншот окна броузера [D7, WinXP]


Страницы:   1 2

kyn66 ©   (2008-07-09 11:57:00) 

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


Anatoly Podgoretsky   (2008-07-10 12:34:00) [1]

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

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

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


Rouse_   (2008-07-10 12:10:00) [2]


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

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

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;


kyn66   (2008-07-10 11:48:00) [3]

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

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


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

Используй ImageMagick.

man import


Rouse_   (2008-07-10 09:26:00) [5]


> используется 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;


kyn66   (2008-07-10 09:15:00) [6]

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


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

uses ShDocVW


kyn66   (2008-07-09 16:37:00) [8]

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

 IDoc1: IHTMLDocument2;
 Web: ShDocVW_TLB.IWebBrowser2;


ketmar   (2008-07-09 15:34:00) [9]

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

---
All Your Base Are Belong to Us


Zeqfreed   (2008-07-09 15:26:00) [10]

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


kyn66   (2008-07-09 15:13:00) [11]

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


ketmar   (2008-07-09 14:03:00) [12]

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

так узнай.

---
All Your Base Are Belong to Us


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

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


kyn66   (2008-07-09 13:41:00) [14]

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


brother   (2008-07-09 13:23:00) [15]

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

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


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

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

FindWindow


brother   (2008-07-09 13:21:00) [17]

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

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


turbouser   (2008-07-09 13:19:00) [18]


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

GetForegroundWindow


kyn66   (2008-07-09 13:18:00) [19]

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

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


brother   (2008-07-09 13:12:00) [20]

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо