Сделай сам: IE и Delphi – вместе веселее!
28.01.2008 от Иван Ширко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 := '';
Рубрики: Delphi, Сделай сам |
28.06.2009 в 14:21
Что-то так не выходит ничего