Форум программистов, компьютерный форум CyberForum.ru

Delphi и WinAPI

Войти
Регистрация
Восстановить пароль
 
 
kипеш
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 19
#1

PostMessage. Найти ошибку в синтаксисе или алгоритме - Delphi WinAPI

21.02.2015, 17:36. Просмотров 970. Ответов 15
Метки нет (Все метки)

Да-да, знаю, уже миллион раз на форему поднимался вопрос и про дескрипторы, и про PostMeassage, и даже про имитацию нажатий мышью без использования курсора. Но я, вроде как, все эти знания уже почерпнул(да, я был на MSDN) и запилил кусок кода, который не выполняет своей функции, но и ошибки не выдаёт. Будьте добры, помогите. И будьте добры, не закидывайте отсылками к другим темам - я там был, точно вам говорю.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.FormCreate(Sender: TObject);
begin
  WebBrowser1.Navigate('cyberforum.ru');
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  click(10,10,WebBrowser1.Handle);
end;
 
procedure TForm1.Click(x,y:longint; Handle:longint);
begin
  PostMessage(Handle,WM_LBUTTONDOWN,MK_LBUTTON,MakeLParam(x,y));
  PostMessage(Handle,WM_LBUTTONUP,MK_LBUTTON,MakeLParam(x,y));
end;
 
procedure TForm1.FormResize(Sender: TObject);
begin
  WebBrowser1.Height:=Form1.Height;
  WebBrowser1.Width:=Form1.Width;
end;
По идее, мы нажимаем на кнопку, которая отправляет браузеру сообщение о нажатии ЛКМ в левый верхний угол обозревателя. А это, на сайте сайберфорума, должно возвращать нас на главную его страницу. Ставил координаты побольше - не помогало. Умножал на 64000, как это делается в МаусЭвентах - результата нет.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2015, 17:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос PostMessage. Найти ошибку в синтаксисе или алгоритме (Delphi WinAPI):

PostMessage - Delphi WinAPI
Доброго дня. Слал через PostMessage кнопки и беды не знал. PostMessage(h, WM_KEYDOWN, Ord('1'), 0);//Шлется единица PostMessage(h,...

Postmessage WinApi - Delphi WinAPI
Добрый день форумчане. Вообщем задача такая: Через программу написаную на Delphi открыть программу AnVir Task Manager (1), потом в ней...

Работа с WinAPI (PostMessage) - Delphi WinAPI
проблема с окном нарисованным в дериктХ,надло послать строку чату,например, фокус получают чат если нажать ентер(те сначала окну надо...

PostMessage(Handle, WM_CLOSE, 0, 0); - Delphi
Может я совсем глупый... Обрабатываю я некоторую информацию в OnShow формы и выясняю, что форму показывать оказывается совсем не...

Найти ошибку в синтаксисе - C++
#include <stdio.h> #include <stdlib.h> #include <conio.h> #define max (a,b,c) ((a>b ? (a>c ? a:c)(b>c ? b:c)) int main () { int...

Найти ошибку в синтаксисе - C (СИ)
#include <stdio.h> #include <conio.h> #include <math.h> #include <process.h> #include <locale.h> #define Pi 3.1415926 ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
northener
3074 / 2131 / 439
Регистрация: 15.07.2013
Сообщений: 12,416
22.02.2015, 02:33 #2
Цитата Сообщение от kипеш Посмотреть сообщение
По идее, мы нажимаем на кнопку, которая отправляет браузеру сообщение о нажатии ЛКМ в левый верхний угол обозревателя.
"По идее" ты отправляешь окну своей формы сообщение о нажатии ЛКМ в точке с координатами 10,10. И не более того.
kипеш
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 19
22.02.2015, 15:29  [ТС] #3
Гениально. Как я сам-то не догадался, когда код писал? Не работает, понимаете? Не. Ра. Бо. Та. Ет. Я и спрашиваю, почему может не работать.
mss
2333 / 2251 / 250
Регистрация: 24.12.2010
Сообщений: 13,729
22.02.2015, 16:00 #4
не имей привычку обзывать параметры и лок.переменные подпрограмм именами, совпадающими со свойствами и методами объектов

procedure TForm1.Click(x,y:longint; Handle:longint);
PostMessage(Handle... // у формы есть св-во Handle !!
kипеш
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 19
22.02.2015, 18:40  [ТС] #5
Переименование параметров процедуры не дало результатов.
planetoxod
236 / 147 / 16
Регистрация: 22.08.2014
Сообщений: 1,554
Записей в блоге: 1
23.02.2015, 07:57 #6
А если послать самому окну.

Добавлено через 7 минут
Нажать мышкой в определенных координатах неактивного окна

Добавлено через 8 минут
C++
1
2
3
4
5
6
7
8
9
HWND wnd1 = FindWindow(NULL,"Form1");
POINT pt;
pt.x=50; 
pt.y=50; 
 
HWND hwnd2 = ChildWindowFromPoint(wnd1, pt);
 
SendMessage (hwnd2, WM_LBUTTONDOWN, 0, MAKELPARAM(50,50)); 
SendMessage (hwnd2, WM_LBUTTONUP, 0, MAKELPARAM(50,50));
kипеш
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 19
23.02.2015, 10:10  [ТС] #7
Кое-что проверил. С паинтбоксом всё работает вполне. А вот браузер реагировать на нажатия не хочет. Совсем. Никак.
mss
2333 / 2251 / 250
Регистрация: 24.12.2010
Сообщений: 13,729
23.02.2015, 18:31 #8
Цитата Сообщение от kипеш Посмотреть сообщение
Переименование параметров процедуры не дало результатов
И не должно было)
Но теперь код стало легче читать.

Цитата Сообщение от kипеш Посмотреть сообщение
браузер реагировать на нажатия не хочет
А он и не обещал.
Там может быть куча проверок, позволяющий остудить пыл начинающих кулхацкеров)
kипеш
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 19
23.02.2015, 18:58  [ТС] #9
Цитата Сообщение от mss Посмотреть сообщение
Там может быть куча проверок, позволяющий остудить пыл начинающих кулхацкеров)
Вот этот ответ мне нравится уже больше. Только как же, уважаемый, эти проверки обойти? Попробовал жирный кусок кода, который был в ссылке:
Delphi
1
2
3
4
5
6
7
PostMessage(Handle, WM_SETCURSOR, 0, MAKELPARAM(x, y));
    PostMessage(Handle, WM_MOUSEMOVE, 0, MAKELPARAM(x, y));
    PostMessage(Handle, WM_MOUSEHOVER, 0, MAKELPARAM(x, y));
    PostMessage(Handle, WM_MOUSEACTIVATE, 0, MAKELPARAM(x, y));
    PostMessage(Handle, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(x, y));
    PostMessage(Handle, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y));
    PostMessage(Handle, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(x, y));
Не помогло. Может, вы сможете меня просветить?
mss
2333 / 2251 / 250
Регистрация: 24.12.2010
Сообщений: 13,729
23.02.2015, 19:06 #10
Да все что угодно может быть - и проверка фактического положения курсора мыши, и проверка на фокус ввода)..
kипеш
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 19
23.02.2015, 19:24  [ТС] #11
Цитата Сообщение от mss Посмотреть сообщение
Да все что угодно может быть - и проверка фактического положения курсора мыши, и проверка на фокус ввода)..
В обычном WebBrowser? Который объект формы? Я ведь не про хром какой-нибудь...
mss
2333 / 2251 / 250
Регистрация: 24.12.2010
Сообщений: 13,729
23.02.2015, 19:32 #12
Цитата Сообщение от kипеш Посмотреть сообщение
не закидывайте отсылками к другим темам - я там был, точно вам говорю
Ну врешь ведь)
И здесь был ? И мед-пиво пил ? И по усам текло ? И в рот не попало ?)
kипеш
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 19
23.02.2015, 19:47  [ТС] #13
Цитата Сообщение от mss Посмотреть сообщение
Ну врешь ведь)
И здесь был ? И мед-пиво пил ? И по усам текло ? И в рот не попало ?)
http://cs621416.vk.me/v621416524/11254/tbwM3tragm8.jpg
Увы, вот такая ошибка. Так что ни про мёд, ни про пиво сказать ничего не могу(
mss
2333 / 2251 / 250
Регистрация: 24.12.2010
Сообщений: 13,729
23.02.2015, 19:58 #14
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ну а загуглить и в первой же полученной ссылке найти решение ?)
Не получится из тебя программист - гуглить не умеешь)
kипеш
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 19
23.02.2015, 20:06  [ТС] #15
Цитата Сообщение от mss Посмотреть сообщение
Ну а загуглить и в первой же полученной ссылке найти решение ?)
Не получится из тебя программист - гуглить не умеешь)
Преклоняюсь перед вами. Не то чтобы я гуглить не умел.. кучу функций я всё-таки смог найти. Но вот недогуглил, видимо. В общем, благодарствую)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2015, 20:06
Привет! Вот еще темы с ответами:

Оператор if then else: найти ошибку в синтаксисе - Turbo Pascal
что не так?

Помогите найти ошибку в синтаксисе. - Visual Basic
Компайлер говорит, что в районе = в sql-команде ошибка в синтаксе. Я уже заискался... Свежие глаза, взгляните пожалуйста! ...

не могу найти ошибку в синтаксисе: - PHP
Добрый день проблема в том, что вызываемый из хтмл по ссылке а href="...имя файла" пхп выдает, как и ожидалось, список кликабельных...

Никак не могу найти ошибку в синтаксисе... =( - Pascal
Код: program bankir; uses crt; type proctype = record maxres: integer; usedres: integer; end;


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.02.2015, 20:06
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru