Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2010, 12:06   #1
bunukar
Пользователь
 
Регистрация: 26.04.2010
Сообщений: 40
По умолчанию Работа по координатам экрана

Приветствую всех. Вобщем есть такая задача. Нужно написать приложение небольшое по реазмерам(1смх2см), которое всегда будет поверх остальных окон. На окошке кнопка. И чтобы при нажатии этой кнопки прога по координатам экрана(это поле на сайте) щелкала курсором и вставляла уже заготовленный текст. И далее САМА через кнопку Tab переходила на другое поле и вставляла следующий текст.
Вопрос к знатокам. Подскажи пожалуйста, как можно это реализовать? Или статейку, или литературу близкую к данному примеру.
bunukar вне форума Ответить с цитированием
Старый 01.05.2010, 12:56   #2
Dj_SheLL
Форумчанин
 
Аватар для Dj_SheLL
 
Регистрация: 14.10.2009
Сообщений: 128
По умолчанию

1. Поверх окон
Код:
Form1.FormStyle:=fsStayOnTop;
2. Кнопку я думаю вы сами добавите.
3. Клик мышью как-то так
Код:
var
 h: HWND;
begin
 // Находим окно
 h := FindWindow(nil, 'Безымянный - Paint'); //ну тут вместо Paint ваш браузер,которым пользуетесь :) ,короче говоря заголовок окна,к которому обращаетесь
 if h > 0 then
  begin
   // Нажимаем кнопку (X, Y - координаты в окне, в которых имитируем щелчок)
   SendMessage(h, WM_LBUTTONDOWN, 0, 65536 * Y + X);
   // Отпускаем кнопку
   SendMessage(h, WM_LBUTTONUP, 0, 65536 * Y + X);
  end;
или так
Код:
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
4. Насчёт заполнения полей ТУТ или так,используя компонент TWebBrowser на вкладке палитры компонентов Internet:
Код:
var
a:variant;
begin
a:=webbrowser1.oleobject.document.getelementbyid('идишник эдита из веб кода');
a.value:='1234';
a:=webbrowser1.oleobject.document.getelementbyid('идишник кнопки из веб кода');
a.click.
Здесь щёлкать не нужно по Tab,тут сразу вставляешь во все поля.Но для этого тебе надо знать структуру HTML,с которым ты работаешь.

Последний раз редактировалось Dj_SheLL; 01.05.2010 в 13:00.
Dj_SheLL вне форума Ответить с цитированием
Старый 01.05.2010, 14:20   #3
bunukar
Пользователь
 
Регистрация: 26.04.2010
Сообщений: 40
По умолчанию

Спасибо огромное.
Про HTML. В этом и вся загвоздка. Имена полей постоянно меняют на сайте. Поэтому желательно не иметь этой привязки, а просто переключаться Табом по полям.
В принципе уже разобрался что к чему. Но возник вопрос.
Как мне пропустить 2 поля табом?
После заполнения последнего поля, мне нужно пропустить ещё 2 и щаполнить ещё 1.
Я делаю так:
keybd_event($9,0, 0, 0); - Таб
keybd_event($9,0, 0, 0); - Ещё раз Таб
keybd_event($*,0, 0, 0); - И дальше заполняю нужную инфу.
Но почему то он не переходит 2 раза. А только 1 раз.
И п.с. Объясните, пожалуйста, новичку, что означают эти нули? keybd_event(0,0, 0, 0);

Последний раз редактировалось bunukar; 01.05.2010 в 14:23.
bunukar вне форума Ответить с цитированием
Старый 01.05.2010, 14:57   #4
Dj_SheLL
Форумчанин
 
Аватар для Dj_SheLL
 
Регистрация: 14.10.2009
Сообщений: 128
По умолчанию

keybd_event(0,0, 0, 0); - WinAPI функция.
Соответственно:
Код:
keybd_event
(
BYTE bVk, // код виртуальной клавиши
BYTE bScan, // аппаратный скэн-код
DWORD dwFlags, // флажки, определяющие различные параметры функции
DWORD dwExtraInfo // дополнительные данные, связанные с нажатием клавиши
);
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Keybd_event(VK_LWIN,   0, 0, 0);
  Keybd_event(Byte('R'), 0, 0, 0);
  Keybd_event(Byte('R'), 0, KEYEVENTF_KEYUP, 0);
  Keybd_event(VK_LWIN,   0, KEYEVENTF_KEYUP, 0);
end;
Параметры:
bVk
Определяет код виртуальной клавиши. Код должен быть значением в диапазоне от 1 до 254.
bScan
Определяет для клавиши аппаратный скэн-код.
dwFlags
Набор флаговых битов, которые определяют различные виды операций функции. Прикладная программа может использовать любую комбинацию следующих предопределенных постоянных значений, чтобы установить флажки:
KEYEVENTF_EXTENDEDKEY - Если она установлена, скэн-коду предшествует префиксный байт, имеющий значение 0xE0 (224).
KEYEVENTF_KEYUP - Если установлена, клавиша была отпущена. Если не установлена, клавиша была нажата.

dwExtraInfo
Определяет дополнительное 32-разрядное значение, связанное с нажатием клавиши.

Возвращаемые значения
У этой функции нет возвращаемых значений.

Замечания
Несмотря на то, что keybd_event посылает в Windows OEM-зависимый аппаратный скэн-код, прикладные программы не должны использовать скэн-код. Windows внутри себя преобразует его в коды виртуальной клавиши и сбрасывает/устанавливает биты в скэн-коде перед передачей его в прикладную программу.
Прикладная программа может смоделировать нажатие клавиши PrintScreen, чтобы получить снимок экрана и сохранить его в буфере обмена Windows. Чтобы делать это, вызовите keybd_event с установленным параметром bVk в VK_SNAPSHOT, а параметром bScan установите в 0 для снимка полного экрана, или установите bScan в 1 для снимка активного окна.

Про TAB-ы не знаю,не работал.
Вот тут ещё есть про эмуляцию нажатия клавиши для любого активного приложения.
Ну и тут ещё кое-что интересное возможно есть.

Последний раз редактировалось Dj_SheLL; 01.05.2010 в 15:02.
Dj_SheLL вне форума Ответить с цитированием
Старый 01.05.2010, 15:20   #5
bunukar
Пользователь
 
Регистрация: 26.04.2010
Сообщений: 40
По умолчанию

Ну спасибо вам, Dj_SheLL Очень интересная информация.
И возник ещё один вопросик. Можно ли имитировать прокрутку scroll'a? В данном случае мне нужно промотать вниз.
bunukar вне форума Ответить с цитированием
Старый 01.05.2010, 15:40   #6
Dj_SheLL
Форумчанин
 
Аватар для Dj_SheLL
 
Регистрация: 14.10.2009
Сообщений: 128
По умолчанию

Цитата:
Сообщение от bunukar Посмотреть сообщение
Ну спасибо вам, Dj_SheLL Очень интересная информация.
И возник ещё один вопросик. Можно ли имитировать прокрутку scroll'a? В данном случае мне нужно промотать вниз.
Если это веббраузер,то получается вам не нужно конкретно scroolbar-ом управлять.Насколько мне известно скроллить ввер-вниз можно по нажатию клавиш
(Name:'DOWN'; VKey:VK_DOWN),
(Name:'UP'; VKey:VK_UP),
т.е. это кнопки со стрелками соответственно "Вниз" и "Вверх",где я ссылку на статью давал-там пример,как эмулировать.
Но перед этим нужно программно щёлкнуть по пустому полю страницы (кликать мышкой мы теперь уже умеем ),иначе если у вас будет курсор мигать в edit-е вебстраницы,то скролл естественно работать не будет.

Последний раз редактировалось Dj_SheLL; 01.05.2010 в 15:44.
Dj_SheLL вне форума Ответить с цитированием
Старый 01.05.2010, 15:45   #7
bunukar
Пользователь
 
Регистрация: 26.04.2010
Сообщений: 40
По умолчанию

Не,не,не. Мне нужно не страницу скроллить. Выпадает список с выбором страны. Вот мне и нужно его проскроллить до моей страны(либо по времени, либо по считыванию). Page Up, Page down - не работают в таком случае. Только что попробовал, что если зажать левую кнопку мыши и мотать стрелкой в низ то получается. Сейчас попробую реализовать.
bunukar вне форума Ответить с цитированием
Старый 01.05.2010, 15:51   #8
Dj_SheLL
Форумчанин
 
Аватар для Dj_SheLL
 
Регистрация: 14.10.2009
Сообщений: 128
По умолчанию

Ну тогда не знаю.Может всё таки структуру страницы посмотреть,я думаю выбор страны вряд ли будет меняться.Если мне не изменяет память,каждой строке в таком блоке присвоен свой идентификатор...могу ошибаться.
Dj_SheLL вне форума Ответить с цитированием
Старый 01.05.2010, 16:04   #9
bunukar
Пользователь
 
Регистрация: 26.04.2010
Сообщений: 40
По умолчанию

С кодом страницы думаю бесполезно. Поле страны тоже меняют.(типо _country, c_10203,f_co и т.д.). Со стрелками попробовал - не работает. Единтсвенный вариант остается - это открыть список выбора, имитировать клавишами выбор поиска на странице, ввести страну и закрыть окошко. В таком варианте страна появляется прямо по середине списка.
В любом случае, спасибо за помощь.
А возможно имитировать например Ctrl+F?

Последний раз редактировалось bunukar; 01.05.2010 в 16:07.
bunukar вне форума Ответить с цитированием
Старый 01.05.2010, 16:07   #10
Dj_SheLL
Форумчанин
 
Аватар для Dj_SheLL
 
Регистрация: 14.10.2009
Сообщений: 128
По умолчанию

Не за что.
Насчёт Ctrl+F(что-то) не задумывался.Возможно.
Dj_SheLL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Площадь фигуры по координатам вершин Maksss123 Фриланс 8 09.03.2010 21:30
Вывод по координатам Alyonka_v Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 15.09.2009 20:10
Принадлежность объекта по координатам Angel_CJ Помощь студентам 9 12.09.2007 18:43
Рассчет времени по координатам Квэнди Свободное общение 5 28.12.2006 12:59