|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
Именно в Twebbroser
Ну если с имитацией нажатия мыши что-то не клеится, то есть другой вариант. Кнопку можно нажать (если фокус на нее уже установлен) послав с клавиатуры нажатие клавиши "пробел". Выглядит это где-то вот так:
Код:
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. |