![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Пишу програмку используя компонент TWebBrowser. открываю странички нажимаю на ссылки файлов для скачки. открывается стандартное windows окно "Загрузка файла", в котором никак не получается нажать кнопку скачать. я получаю handle кнопки, но нажать программно не получается.в любых других окошках этот год проходит,а в этом окне кнопка только выбирается в фокус. Помогите приручить нажатие кнопки
Код:
h1 := FindWindow (nil, 'Загрузка файла');
if h1<> 0 then
begin
h2 := FindWindowEx(h1, 0,'Button', '&Сохранить');
SendMessage(h2,BM_CLICK,0,0)
end; |
|
#2
|
|||
|
|||
|
Попробуй так:
Кидаешь на форму NMHTTP. обработчик для кнопеля "скачать": Код:
procedure TForm1.Button1Click(Sender: TObject); begin NMHTTP1.InputFileMode:=True; NMHTTP1.Body(Filename); //название файла, куда сохранится то, на что указывает ссылка NMHTTP1.Get(url); //Ссылка на скачиваемый файл (Выдираешь из TWebbrowser) NMHTTP1.InputFileMode:=False; //Готово end; |
|
#3
|
|||
|
|||
|
мне нужно именно используя TWebBrowser. NMHTTP не спорю закачивает файл.
|
|
#4
|
|||
|
|||
|
Ну если с имитацией нажатия мыши что-то не клеится, то есть другой вариант. Кнопку можно нажать (если фокус на нее уже установлен) послав с клавиатуры нажатие клавиши "пробел". Выглядит это где-то вот так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var h: HWND;
begin
h:= FindWindow('Окно', nil); // ищем окно
SendMessage(h, WM_SYSCOMMAND, SC_HOTKEY, h); // активизируем его
Button2.Click;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
keybd_event(32,0,WM_KEYDOWN,0); //Имитируем нажатие клавиши "пробел" на клавиатуре
end; |
|
#5
|
|||
|
|||
|
Код HTML:
сейчас вижу что кнопка нажата но не отжата.. в итоге действие ее не выполняется |
|
#6
|
|||
|
|||
|
а если попробовать получить координаты кнопки, навести туда мышь и "кликнуть"?
|
|
#7
|
|||
|
|||
|
Ну есть еще такой вариант:
Код:
{keybd_event(32,0,WM_KEYDOWN,0);
keybd_event(32,0,WM_KEYUP,0);}
keybd_event(VK_SPACE, 0, 0 ,0);
keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP,0);
|
|
#8
|
|||
|
|||
|
вот что мне посоветовали на другом форуме.. все теперь работает
Код:
var h1,h2:hwnd;
begin
h1:=0;
h2:=0;
h1 := FindWindow ('#32770', 'Загрузка файла');
if h1<> 0 then
begin
h2 := FindWindowEx(h1, 0, 'Button', '&Сохранить');
if (h2<>0) then
begin
//Устанавливаем фокус на кнопку и активируем её - автоматом на окно
SetForegroundWindow(h2);
SendMessage(h2, WM_ACTIVATE, 1, 0);
SendMessage(h2, WM_ENABLE, 1, 0);
SendMessage(h2, WM_SETFOCUS, 1, 0);
//Переносим фокус на другое окно, чтобы перерисовалось окно IE
SetForegroundWindow(handle);
Application.ProcessMessages;
SetForegroundWindow(h2);
SendMessage(h2, WM_SETFOCUS, 1, 0);
Sleep(1000); //Делаем обязательную паузу, чтобы окно успело прорисоваться
//Посылаем Enter кнопке
keybd_event(VK_RETURN,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
keybd_event(VK_RETURN,0,KEYEVENTF_EXTENDEDKEY,0);
keybd_event(VK_RETURN,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
end;
end;Последний раз редактировалось Admin, 30.01.2009 в 20:29. |