![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отловить содержимое Edit'ов в форме IE ? [D6, Win95/98, WinME, NT4, Win2k, WinXP]
KOMBAS © (2004-12-20 21:55:00)Хочу написать программу которая выдергивает значение из поля ввода формы в IE
Для этого определил указатель на поле ввода, но функции WM_GetText и GetWindowText возвращяют пустое значение :(
Не хотят работать с классом "Internet Explorer_Server"
Как же тогда мне быть ?
KOMBAS (2004-12-23 01:51:00) [1]>> BIN
если можно по конкретнее объясни плз
а то я в COM не шарю :)
BiN (2004-12-22 17:21:00) [2]KOMBAS (22.12.04 16:40) [7]
читаем
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/objects/shell/shell.asp
обращаем внимание на свойство Windows объекта Shell
затем
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/reference/objects/internetexplorer.asp
и рождаем что-то типа
var
ShellObj:Variant;
shWindows, shWindowItem: Variant;
wCount, i: Integer;
strTemp: String;
begin
Memo1.Lines.Clear;
try
ShellObj:=CreateOleObject('Shell.Application');
if not VarIsNull(ShellObj) then
begin
shWindows:=ShellObj.Windows;
if not VarIsNull(shWindows) then
begin
wCount:=shWindows.Count;
for i:=0 to wCount-1 do
begin
shWindowItem:=shWindows.Item(i);
//здесь мы в shWindowItem имеем ссылку на один из InternetExporer object
strTemp:=Format('URL: %s; Path: %s',
[shWindowItem.LocationUrl, shWindowItem.Path]);
Memo1.Lines.Add(strTemp);
.....
....
// и так далее
end;
end;
shWindows:=Null;
end;
finally
ShellObj:=Null;
end;
end;
затем читаем
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/reference/objects/internetexplorer.asp
и
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/form.asp
а также
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/body.asp
особо радуемся, когда находим описания свойств innerText и innerHTML
с уважением
KOMBAS (2004-12-22 16:40:00) [3]>>Bin
Что это значит ?
Поконкретнее если можно плиззз
BiN (2004-12-22 13:43:00) [4]>>KOMBAS (20.12.04 21:55)
Копай в сторону ShellWindows Object
KOMBAS (2004-12-22 12:46:00) [5]Что значит нет хэндла, когда я его нашёл ?
И это не картинка!
Я проверял!
Отсылал эдиту WM_Char, работает ОК!
А вот брать текст из него не хочет
AGAMEMNUM (2004-12-22 01:01:00) [6]Народ прав, нету у эдита хендла так как не окно это вовсе, а картинка вобщем... и весь этот гемор тебе придется выписывать... но смотря что те нужно... если установить какое нить значение и отправить запрос, то не парься, а посмотри что в поле Action записано, подставляй параметры и пость на сервак... и IE для этого нафиг не нужен...
cerber1 (2004-12-21 22:25:00) [7]Если я не ошибаюсь, то у Едита на НТМЛ форме нет хендла?!
KOMBAS (2004-12-21 17:31:00) [8]Дело в том что я не сильно в этом разбираюсь :)
Не могли бы вы мне дать конкретный пример Please
Например хендл эдита находится в переменной hWndEdIE
как в переменную edcapt засунуть этот текст :)
Заранее благодарен за ответ !
Ihor Osov'yak (2004-12-21 03:34:00) [9]1. Получить от соотв. окна IHTMLDocument2
2. для решения Вашей задачи имея в руках IHTMLDocument2 нужно задействовать возможности mshtml.dll (и по парсингу, и по вводу-выводу)
Более подробно.
1. Примерно так:
type
TObjectFromLResult = function(LRESULT: lResult; const IID: TIID; WPARAM:
wParam; out pObject): HRESULT; stdcall;
const
MSG: Integer = 0;
hInstLib: HWND = 0;
ObjectFromLresult: TObjectFromLresult = nil;
function GetIDocFromHWND(WHandle: HWND; var iDoc: IHtmlDocument2): HRESULT;
var
lRes: Cardinal;
begin
Result := S_FALSE;
if hInstLib = 0 then
hInstLib := LoadLibrary('Oleacc.dll');
if not assigned(ObjectFromLresult) then
@ObjectFromLresult := GetProcAddress(hInstLib, 'ObjectFromLresult');
if @ObjectFromLresult <> nil then
begin
if MSG = 0 then
MSG := RegisterWindowMessage('WM_HTML_GETOBJECT');
SendMessageTimeOut(WHandle, MSG, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
Result := ObjectFromLresult(lRes, IHTMLDocument2, 0, iDoc);
end;
end;
2. как введение в тему поищите статью "Использование функциональности IE" в "подземелье магов" на Королевстве... Либо сразу поиск в msdn по ключевым словам IHTMLDocument2, IHTMLInputElement...