Сделай сам: IE и Delphi – вместе веселее! | Программирование на Delphi и не только

Реклама на сайте

Советуем резка металла - компания Металл-ателье.
Искусство флирта мужчина. Знакомство для флирта.

Почитайте!

Нас читают

Статьи о программировании и не только

Mail.Ru

Rambler's Top100

Programming Blogs - BlogCatalog Blog Directory

Сделай сам: IE и Delphi – вместе веселее!

28.01.2008 от Иван Ширко

Страница: 1 2 3 4 5 6

var
  winclass: array [0..255] of char;
begin
  //получаем класс окна
  GetClassName (Wnd, WinClass, sizeof(WinClass));
  //если у нас окно IE, то закрываем его
  if (WinClass='IEFrame') then
  PostMessage (Wnd, WM_CLOSE, 0, 0);
  //принимаем следующее окно
  CloseIE := true;
end;
begin
//перебираем все родительские окна, указывая,
//какой функцией будем их обрабатывать
  EnumWindows(@CloseIE, 0);
end;Переход "Вперёд\Назад"
Разделим нашу задачу на три составляющие:
1) Получить адрес (URL) текущей странички IE;
2) Увеличить (уменьшить) последнее число адреса на единицу;
3) Записать изменённый адрес в окно IE и заставить браузер перейти по нему.
Пункт 1: получить адрес текущей странички
Окно IE, как и любое порядочное окно, содержит множество дочерних окон (всякие там кнопочки, поля ввода, надписи и т.д.). В одном из таких окон содержится URL странички. После недолгого изучения иерархии окон в IE при помощи специальной программы, добраться до адреса совсем несложно. Следующая функция возвращает идентификатор поля ввода (класс 'Edit'), в котором содержится URL:
function FindEdit(var h:hwnd):boolean;
var
  wclass: array[0..255] of char;
begin
  //получаем идентификатор и класс "верхнего" окна
  h := getforegroundwindow;
  getclassname(h, wclass, sizeof(wclass));
  //если это окно IE, то "распутываем" иерархию дочерних окон
  if (wclass='IEFrame') then
  begin
    h := findwindowex(h, 0, 'WorkerA', nil);
    h := findwindowex(h, 0, 'ReBarWindow32', nil);
    h := findwindowex(h, 0, 'ComboBoxEx32', nil);
    h := findwindowex(h, 0, 'ComboBox', nil);
    h := findwindowex(h, 0, 'Edit', nil);
    result := true;
  end else
    result := false;
end;
После того, как мы добрались до поля ввода, в котором хранится адрес странички, извлечём его при помощи следующей функции:
function GetText(WindowHandle: hwnd): String;
var
  txtLength: Integer;
  buffer: String;
begin
  //Узнаём длину текста
  TxtLength := SendMessage(WindowHandle, WM_GETTEXTLENGTH, 0, 0);
  if (txtlength>0) then
  begin
    txtlength := txtlength + 1;
    setlength (buffer, txtlength);
    //записываем текст окна в buffer
    sendmessage(WindowHandle, wm_gettext, txtlength, longint(@buffer[1]));
    result := buffer;
  end else result := '';

Страница: 1 2 3 4 5 6

Рубрики: Delphi, Сделай сам |

Один комментарий

  1. Око пишет:

    Что-то так не выходит ничего

Оставить комментарий

Заметьте: Включена проверка комментариев. Нет смысла повторно отправлять комментарий.