Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Free Pascal, Pascal ABC и другие _ Проект

Автор: Bokul 16.09.2006 23:07

Опишу, что мне надо:
надо, что бы при нажатию на комбинацию клавиш моя прога, которая раньше сидела в трее (можна даже без трея, просто чтобы она могла среагировать на нажатия клавиш. Вроде хук для этого надо ставить...), могла проанализировать код поточной Html страницы в браузере( Internet Explorer), вытянуть нужные ссылки, и скинуть в буфер обмена, реализованный в http://forum.pascal.net.ru/index.php?showtopic=12777 . Трей и хуки можно оставить на потом, а сейчас же хотелося бы разобраться с браузером. Основная сложность это узнать Html. Я знаю, что все просматриваемое в браузерах сохраняется на винд, но определить, где он сохраняет все эти данные невозможно, так как Internet Explorer постоянно генерирует новые папки в Temporary Internet Files - система безопасности.
Честно говоря, я просто не знаю куда тыкаться и что для этого надо знать. Может меня спасет WinApi? Покажите, пожалуйста, мне путь.

Автор: volvo 16.09.2006 23:12

Стой, стой...

Ты при нажатии клавиш хочешь получить ссылки из IE, со страницы, которая СЕЙЧАС там отображается? Или со страниц, которые БЫЛИ до этого, и еще не обработаны?

Автор: Bokul 16.09.2006 23:15

Цитата
со страницы, которая СЕЙЧАС там отображается?

Да!
Цитата
Ты при нажатии клавиш

Хотелось бы оставить это на потом, чтобы не запутаться вначале.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Добавил потом:
Цитата
со страницы, которая СЕЙЧАС там отображается?

Чтобы не возникло путаницы уточню:
например, я зашел на сайт для скачки фильма, филь поделен на много частей. На каждую часть есть своя ссылка, так вот мне надо чтобы моя прога просто забирала все эти ссылки. Я уже сделал первую версию проги, но для ее работы мне надо было сохранять страницу на диск, а потом ей передавать путь к сохраненному файлу. Результат она сохраняет в вот таком виде ( теперь просто копирует в ClipBoard).
Цитата

http://www.filefactory.com/?f950a5
http://www.filefactory.com/?44316b
http://www.filefactory.com/?c30fe4
http://www.filefactory.com/?654ce4
http://www.filefactory.com/?8c073c
http://www.filefactory.com/?82f69b
http://www.filefactory.com/?8a85f1
http://www.filefactory.com/?762a1c
http://www.filefactory.com/?9815bb
http://www.filefactory.com/?531535
http://www.filefactory.com/?96f203
http://www.filefactory.com/?fcf974
http://www.filefactory.com/?8538b4
http://www.filefactory.com/?a051aa
http://www.filefactory.com/?d3c07a
http://www.filefactory.com/?d324af

Автор: volvo 17.09.2006 0:14

Ну, тогда...

FPC умеет работать с OLE? Умеет... Вот этот Дельфийский код выдирает все линки из страницы, переданной в objIE.Navigate... Как захватить текущую страницу IE написано в DRKB, если надо приведу код, получающий активные URL-ы ВСЕХ открытых на данный момент копий Internet Explorer... Переводишь код на FPC и вешаешь программу в Tray blum.gif

var
objIE:OleVariant;
procedure TForm1.Button11Click(Sender: TObject);
var i:integer;
begin
try
objIE := CreateOLEObject('InternetExplorer.Application');
objIE.Visible := 0;
objIE.Navigate( 'http://www.google.com/');
while objIE.Busy do sleep(200);
for i := 0 to objIE.document.links.length - 1 do
Memo1.Lines.add(objIE.document.links.Item(i))
finally
objIE := unassigned;
end;
end;

Автор: Bokul 17.09.2006 2:39

Volvo,я конечно извиняюсь, но я ничего не понял unsure.gif ypriamii.gif

Цитата
FPC умеет работать с OLE?

То есть я могу работать со структурой Html страницы, как бы работал, например, на JavaScript? .
Цитата
Переводишь код на FPC

Дельфи я не знаю и поэтому немогу перевести этот код для Fps...
Цитата
Вот этот Дельфийский код выдирает все линки из страницы, переданной в objIE.Navigate...


То есть в данном варианте я получу все линки, находящимся на http://www.google.com/?
Цитата

Как захватить текущую страницу IE написано в DRKB, если надо приведу код, получающий активные URL-ы ВСЕХ открытых на данный момент копий Internet Explorer...


Надо! Надо! Надо! !mol1.gif

Автор: volvo 17.09.2006 2:54

Цитата(Bokul @ 16.09.2006 22:39)
То есть я могу работать со структурой Html страницы, как бы работал, например, на JavaScript?
Я не знаю, я в JavaScript не силен smile.gif

Цитата(Bokul @ 16.09.2006 22:39)
То есть в данном варианте я получу все линки, находящимся на http://www.google.com/?
Ага... Список всех линков, которые там содержатся...
Цитата(Bokul @ 16.09.2006 22:39)
Надо! Надо! Надо! !mol1.gif
Ну, если надо, то вот тебе версия для FPC... Запусти несколько окон IE (лучше - чтоб они были с разными страничками, для проверки работоспособности), и запусти это:

{$mode DELPHI}
uses windows;

function EnumIEChildProc(AHandle: hWnd; AnObject: TObject): BOOL; stdcall;
var theClassName: string;
Text: array [0..255] of Char;
begin
Result := True;
SetLength(theClassName, 256);
GetClassName(AHandle, PChar(theClassName), 255);
if Pos('Edit', theClassName) > 0 then
begin
SendMessage(AHandle, WM_GETTEXT, SizeOf(Text), Longint(@Text));
if text<>'' then writeln(Text);
end;
end;

function IEWindowEnumProc(AHandle: hWnd; AnObject: TObject): BOOL; stdcall;
var theClassName: string;
Text: array [0..255] of Char;
begin
Result := True;
SetLength(theClassName, 256);
GetClassName(AHandle, PChar(theClassName), 255);
if Pos('IEFrame', theClassName) > 0 then EnumChildWindows(AHandle, @EnumIEChildProc, longInt(0))
end;

begin
EnumWindows(@IEWindowEnumProc, LongInt(0));
end.


Насчет переноса Дельфи-кода под FPC, скорее всего должно откомпилироваться без изменений, только вывод делать не на VCL-контролы, а в консоль... Я чуть попозже попробую, скажу что получилось yes2.gif

Автор: Bokul 17.09.2006 3:58

Цитата
Запусти несколько окон IE (лучше - чтоб они были с разными страничками, для проверки работоспособности), и запусти это:


Запустить, то я запустил, даже получил правильный результат, но разобраться во всем этом wacko.gif .
Как все это работает, понять одному мне, наверное, не под силам...
Ух, вопросов выше крыши... Давайте по порядку:
Что делает функция?
Цитата
function EnumIEChildProc(AHandle: hWnd; AnObject: TObject): BOOL;


Цитата
stdcall;

А это нужно, чтобы потом можна было вызывать функцию, как параметр?
Цитата
GetClassName(AHandle, PChar(theClassName), 255);

Тут мы, наверное, получаем класс окна... а вот какого окна и что такое клас для меня осталось загадкой... AHandle тоже константа? На что она указывает?

Цитата
if Pos('Edit', theClassName) > 0 then

Что мы определяем с его помощю 'Edit'?

Цитата
SendMessage(AHandle, WM_GETTEXT, SizeOf(Text), Longint(@Text));

А эта функция и является основной, да? С ее помощью мы наверное и получаем адрес поточной страницы?
Кому мы посылаем сообщения? Самому себе? WM_GETTEXT - неужели тоже константа? Даже в могущественном msdn не написано, какие другие значения могут быть на его месте. Longint знаю есть такой тип переменной, но чтобы функция... Ну а загадочный знак '@' ,вообще выше моего понимания.

Цитата
Я чуть попозже попробую, скажу что получилось

Будем ждать.


P.S Volvo, надеюсь у тебя хватет терпения, чтобы не послать меня подальше... rolleyes.gif

Автор: Bokul 17.09.2006 5:45

А, теперь я понял сам принцип, но только принцип - детали остаются тайной, работы проги:
С помощью EnumWindows мы проходим все родительские окна, если они проходят проверку if Pos('IEFrame', theClassName) ( так мы проверяем является ли это окно окном IE?), мы проходим через все дочерние окна с помощью EnumChildWindows и снова выполняем проверку if Pos('Edit', theClassName) > 0 then ( а что этим проверяется...), при успешной проверке, выполняем это
SendMessage(AHandle, WM_GETTEXT, SizeOf(Text), Longint(@Text));
if text<>'' then writeln(Text);


Правильно? Если да, то это не совсем то, что нужно. Мне надо найти только поточное окно IE, а не все.

Автор: volvo 17.09.2006 5:48

Цитата(Bokul @ 16.09.2006 23:58)
Что делает функция?
function EnumIEChildProc(AHandle: hWnd; AnObject: TObject): BOOL;

Смотри... Есть в WinAPI такая функция:
http://www.firststeps.ru/mfc/winapi/win/r.php?64
она получает одним из параметров так называемую CallBack функцию (функцию обратного вызова), и EnumIEChildProc как раз и подставляется как CallBack Function в эту самую EnumChildWindows...

То же самое, кстати, и с http://www.firststeps.ru/mfc/winapi/win/r.php?67 ... Ей тоже нужна CallBack Function, и эту роль выполняет IEWindowEnumProc

Цитата(Bokul @ 16.09.2006 23:58)
А это нужно, чтобы потом можна было вызывать функцию, как параметр?
Не совсем...
Цитата(DRKB)
Соглашения о вызовах
Директива stdcall
Параметры помещаются в стек слева направо. Очистка стека осуществляется вызываемой процедурой. Этот вызов обеспечивает обработку фиксированного числа параметров.


Цитата(Bokul @ 16.09.2006 23:58)
Тут мы, наверное, получаем класс окна... а вот какого окна и что такое клас для меня осталось загадкой... AHandle тоже константа? На что она указывает?
Функции, начинающиеся с Enum... - функции перечисления, то есть действия свои они производят над ВСЕМИ объектами, являющимися ... Как бы это сказать, второй частью названия, что-ли... Если EnumWindows, то над всеми окнами, если EnumСhildWindows, то над всеми дочерними окнами, и т.д.

А AHandle - это передаваемый системой в функцию перечисления Enum... хендл объекта, чтоб с ним (с объектом) можно было работать...

Цитата(Bokul @ 16.09.2006 23:58)
Что мы определяем с его помощю 'Edit'?
Как что? Адресная строка Internet Explorer-а - не что иное, как Edit, и если в имени класса дочернего окна найден 'Edit', то все, забрать оттуда текст, это и будет адрес страницы, отображенной в данный момент в одной из копий IE...

Цитата(Bokul @ 16.09.2006 23:58)
А эта функция и является основной, да? С ее помощью мы наверное и получаем адрес поточной страницы? Кому мы посылаем сообщения? Самому себе?
Это как раз та функция, которая реализует механизм отправки сообщения... Только почему же "самому себе"? Тому объекту, который имеет хендл AHandle... Мы же нашли, что в его имени класса есть Edit, то есть это - адресная строка... smile.gif

Цитата(Bokul @ 16.09.2006 23:58)
WM_GETTEXT - неужели тоже константа? Даже в могущественном msdn не написано, какие другие значения могут быть на его месте.
yes2.gif Тоже константа... Одна из нескольких тысяч... Я же говорил, что в MSDN все равно придется лазить, что ты ответил? smile.gif

Цитата(Bokul @ 16.09.2006 23:58)
Longint знаю есть такой тип переменной, но чтобы функция...
А это не функция... Приведение типа... Все параметры должны быть строго того типа, который описан в заголовке, а ноль - он и как байт "ноль", и как Integer - "ноль", и как LongInt - тоже ноль... Вот и указывем, что ЭТОТ НОЛЬ - трактовать именно как имеющий тип LongInt...

Цитата(Bokul @ 16.09.2006 23:58)
Ну а загадочный знак '@' ,вообще выше моего понимания.
blink.gif Операция взятия адреса?

Вроде, на все вопросы постарался ответить? smile.gif

Цитата
Мне надо найти только поточное окно IE, а не все.
Что в твоем понимании "поточное окно"? И откуда я знаю, какой у него заголовок... Найду через FindWindow, а это будет другое... И все, некорректная работа программы? nea.gif

Автор: Bokul 17.09.2006 6:15

Спасибо, volvo. Не знаю сколько пришлось бы перечитать, чтобы все понять самому.

Цитата
что в MSDN все равно придется лазить

Да я и лажу, а найти не могу.
Цитата
что ты ответил?

ну так это мой первый проект вне доса yes2.gif
Цитата
Вроде, на все вопросы постарался ответить?

Почти, вот этот забыл:
Цитата
что такое клас для меня осталось загадкой

Цитата
Это как раз та функция, которая реализует механизм отправки сообщения

А для чего вообще нужны сообщения? И конкретно в данном случае?
Цитата
if Pos('IEFrame', theClassName) ( так мы проверяем является ли это окно окном IE?)

Значит я прав?
Цитата
Что в твоем понимании "поточное окно"? И откуда я знаю, какой у него заголовок... Найду через FindWindow, а это будет другое... И все, некорректная работа программы?

Поточное - то, что я ввижу перед собой. То есть мне надо брать ссылки не со всех окон IE, а только с этого, ведь ссылки на фильм находятся только на нем...

Автор: volvo 17.09.2006 12:32

Цитата
А для чего вообще нужны сообщения? И конкретно в данном случае?
Вообще - это основной механизм обмена информацией между приложениями Windows... А в данном случае - это единственный правильный способ получить содержимое контрола чужого приложения.

Цитата
Поточное - то, что я ввижу перед собой. То есть мне надо брать ссылки не со всех окон IE, а только с этого
Смотри на картинки... И в первом, и во втором случае я вижу перед собой почти одно и то же. Но с точки зрения системы - это СОВЕРШЕННО разные ситуации, и если в одном случае я бы мог воспользоваться GetActiveWindow, то в другом без EnumWindows не обойтись...
Прикрепленное изображение Прикрепленное изображение

Цитата
что такое клас для меня осталось загадкой

Смотри здесь: "DRKB -> Системные функции и WinAPI -> Delphi и Windows API (Статья)" ... Там есть объяснение основ работы с WinAPI.

Автор: volvo 17.09.2006 16:34

blink.gif Проблемы пришли оттуда, откуда их меньше всего ждали... Как, впрочем, и всегда...

FPC отказывается работать с OLE. Напрочь. Не хочет, и все тут. Так что, вместо того компактного кода, который я приводил, придется делать одно из двух:
1) либо писать DLL на Дельфи, которая будет вытягивать линки из нужной странички так, как я показал в посте №4, и сохранять их в файл, а потом уже через FPC открывать файл и делать с линками все, что захочется
2) либо по заголовку (или через EnumWindows) находить хендл окна, и пытаться запустить сохранение странички на диск через меню этого окна (это сопряжено с дополнительными трудностями, например, как заставить страничку сохраняться туда, куда НАМ нужно, чтоб потом не рыскать по всем дискам в ее поисках; если все же удастся заменить директорию для сохранения в нее странички - то ее же надо еще и назад вернуть, а то как-то нехорошо получится...)

Я бы выбрал первый вариант... yes2.gif

Автор: Bokul 17.09.2006 22:20

Цитата
Смотри на картинки... И в первом, и во втором случае я вижу перед собой почти одно и то же. Но с точки зрения системы - это СОВЕРШЕННО разные ситуации, и если в одном случае я бы мог воспользоваться GetActiveWindow, то в другом без EnumWindows не обойтись...


Может я не понимаю полностью EnumWindows... Вот, например, я зашел на сайт и открыл 5 окон с разными фильмами, но прочитав краткое содержания о каждом, захотел скачать только один. Окно с ним остается перед моими глазами - активное, другие окна с оставшимся 4 фильмами не закрыты. Так вот, EnumWindows позволяет найти только этот фильм? Если да, то никаких проблем.
А по-поводу GetActiveWindow и второй картинки - если окно с IE не активное, то можно вывести сообщение о этом. Вопрос другой - когда я буду вызывать свою прогу, сидящею в трее, по комбинации клавиш, какое приложения будет активное? Моя программа или IE? И еще один вопрос - можно ли сделать так, чтобы прога не имела своего окна, только иконку в трее?

Цитата

1) либо писать DLL на Дельфи, которая будет вытягивать линки из нужной странички так, как я показал в посте №4, и сохранять их в файл, а потом уже через FPC открывать файл и делать с линками все, что захочется
-----------------------------
Я бы выбрал первый вариант...


Пусть будет первый, я только за. Но Дельфи не знаю, DLL писать не умею. Дельфи 7 есть в наличие.

Цитата
Смотри здесь: "DRKB -> Системные функции и WinAPI -> Delphi и Windows API (Статья)" ... Там есть объяснение основ работы с WinAPI.


Прочитал. Кидайте еще инфу по теме: про DLL, WinAPI и т.п.

Автор: volvo 17.09.2006 22:39

Bokul, сегодня явно не твой день smile.gif

Цитата(Bokul @ 17.09.2006 18:20)
EnumWindows позволяет найти только этот фильм?
Нет... EnumWindows будет искать ВСЕ копии Internet Explorer-а, которые запущены... Значит, придется делать GetActiveWindow...
Цитата(Bokul @ 17.09.2006 18:20)
Вопрос другой - когда я буду вызывать свою прогу, сидящею в трее, по комбинации клавиш, какое приложения будет активное? Моя программа или IE?
Есд=ли программа будет активизироваться, НЕ показывая своего окна, или показывая его, но не делая активным, то активным останется то, что и было ранее, т.е. IE...
Цитата(Bokul @ 17.09.2006 18:20)
И еще один вопрос - можно ли сделать так, чтобы прога не имела своего окна, только иконку в трее?
Можно, только на самом деле это НЕ "прога не имеет окна, а только иконку", а "программа имеет окно (если этого не будет, она просто не запустится под Windows), и держит его невидимым, и иконку в трее"

А теперь - по поводу первой фразы этого сообщения... Попробовал я сделать DLL, и... Не работает это из консольного режима... Т.е. тебе придется писать программу в оконном режиме, чтобы использовать DLL... Я даже проверил программу в Дельфи без DLL, но в консоли, и это не работает. В принципе, ничего страшного, объем кода чуть увеличится, зато все преимущества Windows будешь использовать на полную катушку...

Теперь встречный вопрос... Если у тебя стоит D7, почему не пишешь на ней? Ты много теряешь, ибо OLE как ты видел - ОЧЕНЬ мощная штука (к сожалению, пока недоступная в FPC), меньше чем в 10 строк помещается процедура, выдирающая линки с любой страницы...

Автор: Bokul 17.09.2006 22:55

Цитата
Bokul, сегодня явно не твой день

Пошел стреляться mega_chok.gif smile.gif
Цитата
Теперь встречный вопрос... Если у тебя стоит D7, почему не пишешь на ней?

Боюсь я ее. Пару раз пробовал начинать программировать на ней, но то ли книги не те попадались( покажут как кнопочку ставить и сразу к базам данных), то ли я такой отм-ок, через недельку, две кидал я это занятия.
Цитата
Т.е. тебе придется писать программу в оконном режиме, чтобы использовать DLL

На Fpc?
Цитата
В принципе, ничего страшного, объем кода чуть увеличится, зато все преимущества Windows будешь использовать на полную катушку...

yes2.gif yes2.gif yes2.gif

Автор: Bokul 18.09.2006 0:04

А в Fpc возможно работать с реестром?

Автор: volvo 18.09.2006 0:43

Через функции WinAPI - да, возможно...

см. в MSDN: RegCreateKey, RegOpenKey, RegCloseKey, RegDeleteKey, RegEnumKey, RegQueryValue, RegSetValue

Не знаю, есть ли в FPC спецсредства для обработки реестра, не пользовался никогда...

Автор: Bokul 18.09.2006 1:41

Вот нашел в Drkb тему "Как добавить кнопку в панель инструментов IE?", подумал может это будет лучше чем HotKey, а может можна сделать то и то. Сейчас питаюсь перевести пример на Fpc.
Вот сам пример:

Цитата

1. ButtonText = Всплывающая подсказка к кнопке
2. MenuText = Текст, который будет использован для пункта в меню "Сервис"
3. MenuStatusbar = *Ignore*
4. CLSID = Ваш уникальный classID. Для создания нового CLSID (для каждой кнопки) можно использовать GUIDTOSTRING.
5. Default Visible := Показать ей.
6. Exec := Путь к Вашей программе.
7. Hoticon := иконка из shell32.dll когда мышка находится над кнопкой
8. Icon := иконка из shell32.dll

Код

1 --------------------------------------------------------------------
procedure CreateExplorerButton;
const
  TagID = '\{10954C80-4F0F-11d3-B17C-00C0DFE39736}\';
var
  Reg: TRegistry;
   ProgramPath: string;
  RegKeyPath: string;
begin
ProgramPath := 'c:\folder\exename.exe';
Reg := TRegistry.Create;
try
  with Reg do begin
   RootKey := HKEY_LOCAL_MACHINE;
   RegKeyPath := 'Software\Microsoft\Internet Explorer\Extensions';
   OpenKey(RegKeyPath + TagID, True);
2 --------------------------------------------------------------------
  WriteString('ButtonText', 'Your program Button text');
   WriteString('MenuText', 'Your program Menu text');
   WriteString('MenuStatusBar', 'Run Script');
   WriteString('ClSid', '{1FBA04EE-3024-11d2-8F1F-0000F87ABD16}');
   WriteString('Default Visible', 'Yes');  
   WriteString('Exec', ProgramPath);
   WriteString('HotIcon', ',4');
   WriteString('Icon', ',4');
  end
3------------------------------------------------------------
finally
  Reg.CloseKey;
  Reg.Free;
end;
end;


Как я понимаю в первой части кода проходит открытие ключа. Вот замена для Fpc:
Код

Var x:hWnd;
begin
RegOpenKey(HKEY_LOCAL_MACHINE,'Software\Microsoft\Internet Explorer\Extensions\{10954C80-4F0F-11d3-B17C-00C0DFE39736}\', x);


Не уверен в третьем параметре...

Во второй части мы модифицируем этот ключ с помощю TRegistry.WriteString, в WinApi этой функции, наверное, отвечает REGSETVALUE...?
Аналог
Код

WriteString('ButtonText', 'Your program Button text');

для Fpc:
Код
RegSetValue(HKEY_LOCAL_MACHINE,'Software\Microsoft\Internet Explorer\Extensions\{10954C80-4F0F-11d3-B17C-00C0DFE39736}\','ButtonText',REG_SZ, 'Your program Button text');



Ну и закрываем ключ
Код

RegCloseKey(x);


Правильно?

Автор: volvo 18.09.2006 3:01

Я бы этого не делал... Понимаешь, в чем дело... Реестр - это очень уязвимое место, легко напортачить, и потом что будешь делать?

Я, кстати, набросал тут кое-что, посмотри, насколько отличается размер программы, и... Это уже полноценное Windows-приложение, кроме того не оставляющее кнопки на TaskBar-е smile.gif и запихивающее иконку в трей... Правда, пока ничего кроме этого приложение делать не умеет, но с каждой строкой, добавленной в программу, она будет уметь все больше и больше...

Еще одна идея... У каждого приложения есть системное меню, так? Ну, то самое, что открывается при нажатии на иконку слева вверху... Можно попробовать сделать так: при загрузке своей программы внедрить в системное меню всех копии IE свой пункт, например, "Get Links", и при его выборе вызывать процедуру, которая будет делать всю работу... Это так, мысли вслух... smile.gif




Прикрепленные файлы
Прикрепленный файл  bokul.pas ( 3.35 килобайт ) Кол-во скачиваний: 378

Автор: Bokul 18.09.2006 3:10

Цитата
Я, кстати, набросал тут кое-что, посмотри, насколько отличается размер программы, и... Это уже полноценное Windows-приложение, кроме того не оставляющее кнопки на TaskBar-е и запихивающее иконку в трей... Правда, пока ничего кроме этого приложение делать не умеет, но с каждой строкой, добавленной в программу, она будет уметь все больше и больше...

Спасибо, только у меня нету модуля ShellApi ohmy.gif . Это ж для Fpc?
Цитата
Еще одна идея... У каждого приложения есть системное меню, так? Ну, то самое, что открывается при нажатии на иконку слева вверху... Можно попробовать сделать так: при загрузке своей программы внедрить в системное меню всех копии IE свой пункт, например, "Get Links", и при его выборе вызывать процедуру, которая будет делать всю работу...

А насколько сложно будет сделать такое?

Автор: volvo 18.09.2006 3:26

Цитата
Это ж для Fpc?
yes2.gif

Проверь в папке {FPC_PATH}\units\i386-win32\winunits файл ShellApi.ppu
Если нет, значит, у тебя неполная версия, качай полную... Без этого файла практически невозможно работать под Windows...

Цитата
А насколько сложно будет сделать такое?
Ну, если этим заниматься, и не будет никаких подводных камней (я никогда не работал на этом уровне в FPC, все делал в Delphi), то ничего сверхсложного в этом нет... smile.gif

Автор: Bokul 18.09.2006 3:33

Цитата
Проверь в папке {FPC_PATH}\units\i386-win32\winunits файл ShellApi.ppu

Есть. Почему же не компилится? Ошибка: Can't find unit ShellApi
Цитата
я никогда не работал на этом уровне в FPC, все делал в Delphi

Я выбрал FPC, потому что думал, что после Turbo Pascal он будет более легчий в изучении, но если не так - наверное надо начинать изучать Delphi...

Автор: volvo 18.09.2006 4:22

Цитата(Bokul @ 17.09.2006 23:33)
Есть. Почему же не компилится? Ошибка: Can't find unit ShellApi
А что у тебя в Options -> Directories -> Unit Directories прописано?

У меня вот так: F:\FPC\units\i386-win32;F:\FPC\units\i386-win32\*;F:\FPC\units\i386-win32\rtl, то есть модули ищутся во всех поддиректориях UNITS...

Автор: Bokul 18.09.2006 4:41

Ну наконец-то заработало!!!!

Цитата
У меня вот так: F:\FPC\units\i386-win32;F:\FPC\units\i386-win32\*;F:\FPC\units\i386-win32\rtl, то есть модули ищутся во всех поддиректориях


Поменял F на C и добавил после FPC папку 2.0.2\ и зароботало.

-------------------------
По поводу проги:
И тебе привет! Я в восторге good.gif , буду разбираться потихоньку...

Автор: Bokul 18.09.2006 8:15

Цитата
Я, кстати, набросал тут кое-что, посмотри, насколько отличается размер программы, и... Это уже полноценное Windows-приложение, кроме того не оставляющее кнопки на TaskBar-е и запихивающее иконку в трей... Правда, пока ничего кроме этого приложение делать не умеет, но с каждой строкой, добавленной в программу, она будет уметь все больше и больше...

Цитата
буду разбираться потихоньку

Я и не думал, что все так быстро разберу..., а все благодаря вот этому http://freepascal.ru/article//book/win32-01/ ресурсу, ну и ,конечно, http://msdn.microsoft.com. Все начинает проясняться! yes2.gif

Автор: Bokul 18.09.2006 11:38

Цитата
которая будет вытягивать линки из нужной странички так, как я показал в посте №4, и сохранять их в файл

Так, заметка: rolleyes.gif
Вот только что перечитывал тему и заметил одну деталь. Мне хотелося бы, чтобы я имел возможность работать сразу со всем Html кодом. Для данного случае, конечно нужны только линки , но для других проектов эта прога может послужить каркасом - все что надо сделать это поменять процедуру обработки Html.

Автор: volvo 18.09.2006 12:31

Цитата
Мне хотелося бы, чтобы я имел возможность работать сразу со всем Html кодом

Я же тебе говорил, что OLE - очень мощная вещь? Добавляешь одну строку:
Var BodyTag: String;
...
BodyTag := objIE.document.body.innerHTML; { <--- Вот такую, например }

перед циклом в программу, приведенную в посте №4, и в переменной BodyTag получаешь полный HTML код самого тела сайта (именно то, что записано в его теге BODY) blum.gif

Автор: Bokul 19.09.2006 3:23

Цитата
Попробовал я сделать DLL, и... Не работает это из консольного режима... Т.е. тебе придется писать программу в оконном режиме, чтобы использовать DLL... Я даже проверил программу в Дельфи без DLL, но в консоли, и это не работает. В принципе, ничего страшного, объем кода чуть увеличится, зато все преимущества Windows будешь использовать на полную катушку...



Ну как, теперь можно использовать DLL в моем приложении?

Автор: volvo 19.09.2006 3:32

Погоди пока... У меня появилась более интересная задумка, как это можно сделать smile.gif Я ее сейчас попробую набросать, а потом посмотрю, стОит ли тебе начинать копать в эту сторону...

Автор: volvo 19.09.2006 18:16

А вот и идея (см. аттач, так это выглядит)... Если нужно выдрать линки со страницы - перетягиваешь мышкой иконку слева от адреса в свое окошко, и получаешь в нем все линки... Drag-and-Drop в действии smile.gif

Возьмешься?


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Bokul 20.09.2006 2:53

Цитата
А вот и идея (см. аттач, так это выглядит)... Если нужно выдрать линки со страницы - перетягиваешь мышкой иконку слева от адреса в свое окошко, и получаешь в нем все линки... Drag-and-Drop в действии

good.gif
Цитата
Возьмешься?
Конечно yes2.gif . С чего начинать?

Автор: Bokul 21.09.2006 3:21

Цитата
А вот и идея (см. аттач, так это выглядит)... Если нужно выдрать линки со страницы - перетягиваешь мышкой иконку слева от адреса в свое окошко, и получаешь в нем все линки... Drag-and-Drop в действии

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

Автор: volvo 21.09.2006 3:25

no1.gif Я сделал проект на Дельфи, ты же хочешь попробовать FPC?

Если хочешь, выложу Дельфийский исходник...

Автор: Bokul 21.09.2006 3:33

Цитата
Я сделал проект на Дельфи, ты же хочешь попробовать FPC?

Да - хотел бы. Неужеди FPC и Делфи так сильно отличаются?
Цитата
Если хочешь, выложу Дельфийский исходник...

Давай... Компоненты какие-то надо кидать?

Автор: volvo 21.09.2006 4:14

Вот проект полностью...

Все, что надо добавить - сохранение ссылок в файл, но это - 1 строка кода. blum.gif


Прикрепленные файлы
Прикрепленный файл  p_link.rar ( 3.38 килобайт ) Кол-во скачиваний: 294

Автор: Bokul 21.09.2006 4:42

Что то не получается, перетягиваю картинку слева от адреса в окно проги, но ничего не происходит... mega_chok.gif


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: volvo 21.09.2006 4:56

blink.gif blink.gif Когда перетягиваешь, курсор меняется на "Документ с плюсом"? Линки на странице есть? Может, адрес страницы покажешь, я попробую у себя, а то не разобрать, мелко очень...

Автор: Bokul 21.09.2006 5:05

http://binmovie.ru/2006/09/19/poslednee_kazino__the_last_casino_2005_dvdrip__treker.html

Цитата
Когда перетягиваешь, курсор меняется на "Документ с плюсом"?

Нет, появляется стрелочка с квадратиком. Может я не то перетягиваю?

Автор: volvo 21.09.2006 5:43

no1.gif Это я тебе старый проект выслал... Вот этот попробуй:



Прикрепленные файлы
Прикрепленный файл  Test.rar ( 4.08 килобайт ) Кол-во скачиваний: 311

Автор: Bokul 21.09.2006 5:52

Так работает. good.gif Спасибо.

Насколько сложно будет все это перенести на FPC?

Автор: volvo 21.09.2006 5:55

ЭТО - невозможно... Там же OLE+COM чистой воды...

Так что, делай на Дельфи. И время сэкономишь, и язык выучишь...

Автор: Bokul 21.09.2006 5:59

Цитата
ЭТО - невозможно... Там же OLE+COM чистой воды...

cray.gif
А через Dll нельзя? unsure.gif

Автор: volvo 21.09.2006 11:59

Ну, и зачем тебе это? Искусство ради искусства? Во-первых, надо еще добиться работоспособности такой связки, а это значит, навесить костыли... Во-вторых, при необходимости поменять что-то - опять же запускать Дельфи, перекомпилировать DLL, и не факт, что обойдется без дополнительных костылей...

Если программа пишется на чистом API, это одно дело, тут все понятно - хочешь Delphi, хочешь - FPC... Но когда дело касается особенностей реализации - надо выбирать подходящий инструмент...

Автор: Bokul 22.09.2006 5:15

Жалко... Но всеравно, еще раз большое спасибо за помощь!!! 4.gif