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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2007, 10:57   #1
komex
Пользователь
 
Регистрация: 16.12.2006
Сообщений: 82
Вопрос Браузер

Здравствуйте.
У меня стоит такая задача: получить адрес из строки адреса браузера, но я не знаю как его получить.
С помощью FindWindow янахожу окно браузера, далее я с помощью EnumChildWindows нахожу все классы браузера:

Код:
function Enum(h: hwnd): bool; stdcall;
var
  Name, Text: array[0..255] of Char;
  F: TextFile;
begin
GetClassName(h, Name, 255);
AssignFile(F, 'test.txt');
Append(F);
Writeln(F, Name);
CloseFile(F);
Result := true;
end;

h := FindWindow(nil, 'Быстрый набор - Opera');
if h = 0 then exit;
EnumChildWindows(h, @Enum, 0);
В итоге у меня в файле "test.txt" находится следующее:

Код:
OUIWINDOW
OperaWindowClass
OpWindow
OpWindow
OperaWindowClass
OpWindow
OperaWindowClass
OperaWindowClass
OpWindow
OperaWindowClass
OpWindow
OperaWindowClass
OperaWindowClass
OpWindow
OperaWindowClass
OpWindow
OperaWindowClass
OperaWindowClass
OperaWindowClass
OperaWindowClass
По ходу я что-то не так делаю... Как мне найти тут строку адреса? Подскажите, плз!
komex вне форума Ответить с цитированием
Старый 08.05.2007, 19:06   #2
komex
Пользователь
 
Регистрация: 16.12.2006
Сообщений: 82
По умолчанию

Кто нибудь может мне помочь? Оч надо!
komex вне форума Ответить с цитированием
Старый 09.05.2007, 20:16   #3
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

ты же ищешь окно с названием "Быстрый набор ...", в нём только 9 квадратов с рисунками, и ссылки никакой в этой вкладке нет
что ты хочешь от него получить?
rpy3uH вне форума Ответить с цитированием
Старый 09.05.2007, 20:18   #4
komex
Пользователь
 
Регистрация: 16.12.2006
Сообщений: 82
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
ты же ищешь окно с названием "Быстрый набор ...", в нём только 9 квадратов с рисунками, и ссылки никакой в этой вкладке нет
что ты хочешь от него получить?
Так "Быстрый набор ..." - это заголовок всего окна браузера! По нему я находил браузер... Или надо как-то по-другому?
komex вне форума Ответить с цитированием
Старый 09.06.2007, 12:37   #5
Rouse_
Пользователь
 
Аватар для Rouse_
 
Регистрация: 31.05.2007
Сообщений: 56
По умолчанию

Если требуется найти какой-то определенный браузер (например текущий активный), то делай так:

Код:
 
unit Unit25;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm25 = class(TForm)
    Timer1: TTimer;
    Memo1: TMemo;
    procedure Timer1Timer(Sender: TObject);
  end;
 
var
  Form25: TForm25;
 
implementation
 
{$R *.dfm}
 
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;
end.
Vae Victis
(Горе побежденным (лат.))
Демки с открытым кодом:
http://rouse.drkb.ru
Rouse_ вне форума Ответить с цитированием
Старый 12.06.2007, 08:48   #6
komex
Пользователь
 
Регистрация: 16.12.2006
Сообщений: 82
Печаль

Что-то не работает этот код. ничего не выводит....
komex вне форума Ответить с цитированием
Старый 12.06.2007, 20:17   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от komex Посмотреть сообщение
Так "Быстрый набор ..." - это заголовок всего окна браузера! По нему я находил браузер... Или надо как-то по-другому?
вкладка "Быстрый набор ..." появляется только при создании новой вкладки, потом оно переименовывается в имя страницы
rpy3uH вне форума Ответить с цитированием
Старый 13.06.2007, 00:14   #8
komex
Пользователь
 
Регистрация: 16.12.2006
Сообщений: 82
По умолчанию

Да, но мне для начала находить браузер хотя бы так. Все равно это ничего не дает... =\
komex вне форума Ответить с цитированием
Старый 13.06.2007, 09:50   #9
Rouse_
Пользователь
 
Аватар для Rouse_
 
Регистрация: 31.05.2007
Сообщений: 56
По умолчанию

Этот код выводит путь активного браузера. Если ты заметишь работает он по таймеру. Если ты просто запустишь его - то активным приложением будет не браузер, а твое приложение, поэтому он ничего и не выведет.
Vae Victis
(Горе побежденным (лат.))
Демки с открытым кодом:
http://rouse.drkb.ru
Rouse_ вне форума Ответить с цитированием
Старый 13.06.2007, 15:14   #10
komex
Пользователь
 
Регистрация: 16.12.2006
Сообщений: 82
По умолчанию

Цитата:
Сообщение от Rouse_ Посмотреть сообщение
Этот код выводит путь активного браузера. Если ты заметишь работает он по таймеру. Если ты просто запустишь его - то активным приложением будет не браузер, а твое приложение, поэтому он ничего и не выведет.
Я понял. Даже немного изменил, но программа выводти только пустые строки. А у тебя норм работает?
komex вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Браузер Хамяг Общие вопросы Delphi 7 22.08.2008 23:42
Браузер DeDoK Общие вопросы Delphi 3 17.05.2008 17:32
БРАУЗЕР ben95 Общие вопросы Delphi 7 06.01.2008 07:04
Браузер CHERT Помощь студентам 6 08.06.2007 19:48
Web браузер BOBAH13 Общие вопросы Delphi 0 03.03.2007 10:51