Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Эмуляция нажатия кнопки мыши, PostMessage SendMessage 
:(
    Опции темы
Гость_Aaz
Дата 30.12.2005, 12:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Мне нужно эмуляция нажатия кнопки мышы в определенном окне.
Мой код:
HWND wnd1 = FindWindow(NULL,"XXX");

//PostMessage(wnd1, WM_KEYDOWN, VK_F1, 0);
//Проверял правильно ли найдено окно. Все ок Кнопка Ф1 срабатывала

// Пробовал так ничего возвращает true- в очередь ставит
// PostMessage(wnd1, WM_LBUTTONDOWN, 0, MAKELPARAM(300,300));
// PostMessage(wnd1, WM_LBUTTONUP, 0, MAKELPARAM(300,300));

// Так Ничего тоже самое
// PostMessage(wnd1, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(300,300));
// PostMessage(wnd1, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(300,300));

//Попробовал напрямую без очереди Выдает false
bool y = SendMessage(wnd1, WM_LBUTTONDOWN, 0, 300*65536+300);
bool yy = SendMessage(wnd1, WM_LBUTTONUP, 0, MAKELPARAM(300,300));

Помогите плиззз..я уже незнаю что придумать или что я упустил.
Может кто подскажет др реализацию эмуляции мыши не через PostMessage
заранее спасибо

  Вверх
_hunter
Дата 30.12.2005, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



а ты уверен что мышой нажать нужно в окне а не на какой-нить кнопке?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Гость_Aaz
Дата 30.12.2005, 13:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











В часности мне надо нажимать кнопки в флешь обекте, на веб странице.
Вполне возможно что придеться не только кнопки но и просто нажатие в отдельную точку.
Поэтому и пытаюсь сразу с мышкой разобраться...А не конкретизироваться на отдельных кнопках.
Но если нечего не получиться то придеться и кнопкоми заняться...Тока как определить индификатор Флешь кнопки в Флешь обекте???
  Вверх
Romikgy
Дата 30.12.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 7
Всего: 146



Цитата
300,300

Мож не попадаешь по кнопке???


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Гость_Aaz
Дата 30.12.2005, 13:49 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вставлял строчку

SetCursorPos(300,300);

И разворачивал окно на весь экран что бы небыло делем с относительными координатами экрана и окна.

Так же на простом приложении AkelPad пробовал эмуляции нажатия правой кнопки. Должно было вылезни меню, по всей поверхности приложения. Ничего те же результаты. при SendMessage выдает false
  Вверх
_hunter
Дата 30.12.2005, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



нарисуй тестовое приложение ( с одной кнопкой и попробуй ему таким образом послать сообщения )
+ координаты тым не абсолютные а оконные


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
_hunter
Дата 30.12.2005, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



тут дело, скорее всего, в адресате
потому как в тестовом приложении такой:
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    PostMessage(Button2->Handle, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(10,10));
    PostMessage(Button2->Handle, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(10,10));
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    MessageBox(Handle, "test", "test", MB_OK);
}
//---------------------------------------------------------------------------

код работает, а такой
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    PostMessage(Handle, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(Button2->Top + 5, Button2->Left + 5));
    PostMessage(Handle, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(Button2->Top + 5, Button2->Left + 5));
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    MessageBox(Handle, "test", "test", MB_OK);
}
//---------------------------------------------------------------------------

уже нет...
Добавлено @ 14:08
+ вот что spy++
показывает:
Код

<00302> 002B0362 R WM_SETCURSOR fHaltProcessing:False
<00303> 002B0362 S WM_PARENTNOTIFY fwEvent:WM_LBUTTONDOWN xPos:64 yPos:23
<00304> 002B0362 R WM_PARENTNOTIFY
<00305> 002B0362 S WM_MOUSEACTIVATE hwndTopLevel:002B0362 nHittest:HTCLIENT uMsg:WM_LBUTTONDOWN
<00306> 002B0362 R WM_MOUSEACTIVATE fuActivate:MA_ACTIVATE
<00307> 002B0362 S WM_SETCURSOR hwnd:003B0374 nHittest:HTCLIENT wMouseMsg:WM_LBUTTONDOWN
<00308> 002B0362 R WM_SETCURSOR fHaltProcessing:False
<00309> 002B0362 S WM_CTLCOLORBTN hdcButton:2A01136A hwndButton:003B0374
<00310> 002B0362 R WM_CTLCOLORBTN hBrush:3010153C
<00311> 002B0362 S WM_CTLCOLORBTN hdcButton:2A01136A hwndButton:003B0374
<00312> 002B0362 R WM_CTLCOLORBTN hBrush:3010153C
<00313> 002B0362 S WM_COMMAND wNotifyCode:0000 wID:884 hwndCtl:003B0374
<00314> 002B0362 R WM_COMMAND
<00315> 002B0362 P WM_LBUTTONDOWN fwKeys:MK_LBUTTON xPos:44 yPos:13
<00316> 002B0362 P WM_LBUTTONUP fwKeys:MK_LBUTTON xPos:44 yPos:13

последние два -- уже реакция кнопки.
попробуй такой же набор послать


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Гость_Aaz
Дата 30.12.2005, 14:15 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Создал форму. С одной большой кнопкой и текст полем для отоброжения результата.

Координаты относительно окна.
Навсякий случай подвинул форму в левый верзний угол.

код
Код

HWND wnd1 = FindWindow(NULL,"Form1");
               
PostMessage(wnd1, WM_LBUTTONDOWN, 0,MAKELPARAM(100,100)); 
PostMessage(wnd1, WM_LBUTTONUP, 0,MAKELPARAM(100,100));
PostMessage(wnd1, WM_LBUTTONDOWN, 0, MAKELPARAM(100,100)); 
PostMessage(wnd1, WM_LBUTTONUP, 0, MAKELPARAM(100,100));


непомогает...ничего.... Уже Пробовал перестовлять PostMessage(wnd1, WM_LBUTTONDOWN, MAKELPARAM(100,100),0); параметры....Уже крыша едет smile.
Может ещо у кого есть соображения.
  Вверх
Aleksandor
Дата 30.12.2005, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

Репутация: 10
Всего: 12



А пробовал SetFocus(wnd1) перед тем как слать ему сообщения? Попробуй вставить Beep(3000,200); чтобы узнать получает ли окно твои сообщения.


--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
_hunter
Дата 30.12.2005, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



я ж говорю. сообщения идут адресату, а он ( адресат ) не пытается определить есть ли у него дети по заданным координатам.



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Гость_Aaz
Дата 30.12.2005, 15:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











to hunter :
Я ещо только учусь поправь где я непонял пожалуйста.
--Spy++ Перехватывает сообщения окну.
R ответ окна
S SendMessage
P PostMessage

И поручаеться нужно послать окну (по твоему коду):

Код

SendMessage(wnd1, WM_LBUTTONDOWN, 0, MAKELPARAM(64,23));
SendMessage(wnd1, WM_MOUSEACTIVATE, 0, MAKELPARAM(HTCLIENT,WM_LBUTTONDOWN));
SendMessage(wnd1, WM_SETCURSOR, 0, MAKELPARAM(HTCLIENT,WM_LBUTTONDOWN));
SendMessage(wnd1, WM_COMMAND, 884, 0x003B0374);
PostMessage(wnd1, WM_LBUTTONDOWN, MK_LBUTTON,MAKELPARAM(44,13));
PostMessage(wnd1, WM_LBUTTONUP, MK_LBUTTON,MAKELPARAM(44,13));



Или я тебя неправильно понял????
Потому что при этом коде тоже ничего непроисходит.
  Вверх
Aleksandor
Дата 30.12.2005, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Практик
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 22.11.2005
Где: россия, зеленогра д

Репутация: 10
Всего: 12



А если так
Код

POINT pt;
pt.x=5; pt.y=5; 

hwnd = ChildWindowFromPoint(hwndParent, &pt);
SendMessage (hwnd, WM_LBUTTONDOWN, 0, (LPARAM)0xF000F); 
SendMessage (hwnd, WM_LBUTTONUP, 0, (LPARAM)0xF000F);  




--------------------
Call out Gouranga be happy!!!
Gouranga Gouranga Gouranga ....
That which brings the highest happiness!!
PM MAIL   Вверх
_hunter
Дата 30.12.2005, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 13
Всего: 98



Гость_Aaz, по-идее -- так. ( хотя с флешем может и не сработать -- лучше spy' ем посмотри такие же ему сообщения идут или нет )

Aleksandor, посылать нужно не нормальному окну, а во флеш


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Гость_Aaz
Дата 30.12.2005, 15:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











to Alexsandor:
О гуру smile
РАБОТАЕТ smile))))))))
Оканчательный вариант
Код

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));  

Мдя......Я бы долго соображал....
  Вверх
Гость_Aaz
Дата 30.12.2005, 15:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











огромное спасибо всем кто неполенился подумать над моей проблемой.
  Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1122 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.