![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Скриншот окна броузера [D7, WinXP]
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
копируем только эту область...