Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Эмулирование мыши 
:(
    Опции темы
grust
Дата 27.12.2006, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 27.12.2006

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



Нужно написать прогу которая, будет нажимать сама в разных местах экрана, как это сделать?
PM MAIL   Вверх
codelord
Дата 28.12.2006, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 1
Всего: 39



тебе помогут 
Цитата

 Функция SetCursorPos

     Описание:
 function SetCursorPos(X, Y: Integer);

     Пеpемещает куpсоp в указанные кооpдинаты экpана. Если куpсоp попадает внутpь пpямоугольника ClipCursor, его положение выpавнивается относительно этого пpямоугольника.

     Паpаметpы:
     X, Y: Новое положение куpсоpа (в кооpдинатах экpана).

 функция находится в файле user32.dll

И
mouse_event


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
witex
Дата 28.12.2006, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 0
Всего: 4



Разделом ошибся! Это в winapi. ваабще всё в мсдн есть!
Код

BOOL SetCursorPos(          int X,
    int Y
);

установка координат.
установку дал.. остальное ищи=)

З.Ы. Codelord, чё то ты мня опередил=))

Это сообщение отредактировал(а) witex - 28.12.2006, 02:18
--------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. 
PM MAIL   Вверх
grust
Дата 28.12.2006, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 27.12.2006

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



А как сэмулировать нажатие на левую кнопку мыши?
PM MAIL   Вверх
WERITAS
Дата 28.12.2006, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Цитата
А как сэмулировать нажатие на левую кнопку мыши? 

В оконной процедуре обработать case WM_LBUTTONDOWN:, если ты конечно на API делаешь.


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
zkv
Дата 28.12.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(WERITAS @  28.12.2006,  23:20 Найти цитируемый пост)
В оконной процедуре обработать case WM_LBUTTONDOWN:, если ты конечно на API делаешь.


WERITAS, таким образом ты обработаешь реакцию программы на нажатие левой клавиши мыши.


grust,  не ленимся пользоваться поиском, ради интереса скопировал в гугл "как сэмулировать нажатие на левую кнопку мыши" 
PM MAIL   Вверх
grust
Дата 29.12.2006, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 27.12.2006

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



Мне нужно что он нажимал на кнопки в чужой программе
PM MAIL   Вверх
zkv
Дата 29.12.2006, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(grust @  29.12.2006,  00:28 Найти цитируемый пост)
Мне нужно что он нажимал на кнопки в чужой программе 

догадался, повторяю:
Цитата(zkv @  28.12.2006,  23:37 Найти цитируемый пост)
grust,  не ленимся пользоваться поиском, ради интереса скопировал в гугл "как сэмулировать нажатие на левую кнопку мыши"  



PM MAIL   Вверх
grust
Дата 29.12.2006, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 27.12.2006

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



Я просмотрел 10 страниц в  поисковике, но так и не нашёл ни чего интересного, кроме SendMessage(Хэндл окна,WM_LBUTTONDOWN, MK_LBUTTON,MAKELONG(15,10)) но я не знаю какой хэндл у приложения на котрое мне нужно нажимать, как отловить этот хэдл?
PM MAIL   Вверх
zkv
Дата 29.12.2006, 03:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



в первой ссылке пример для Дельфи, в третьей для Buildera...
вот в MFC:
Код

void CTestDlg::OnBnClickedOk()
{
    CPaintDC dc(this);
    int iWidth = dc.GetDeviceCaps( HORZRES );
    int iHeight = dc.GetDeviceCaps( VERTRES );

    POINT cur_pos;
    GetCursorPos(&cur_pos);
    cur_pos.x *= (65535 / iWidth );
    cur_pos.y *= (65535 / iHeight );
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); // нажали левую кнопку мыши
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); // отпустили левую кнопку мыши ( НЕ ЗАБЫВАТЬ )
}

PM MAIL   Вверх
W4FhLF
Дата 29.12.2006, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Между нажатием и отпусканием сделай паузу Sleep(50);
Часто сталкивался с ситациями, когда без этой задержки нажатие не осуществлялось, точнее оно может и было, но на него не успела отреагировать программа(вытесняющая многопоточность, не забываем).


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
grust
Дата 29.12.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 27.12.2006

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



mouse_event работает только на том окне, которое его запустило, а мне нужно, что бы он нажимал на чужое окно...
PM MAIL   Вверх
HellanD
Дата 29.12.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 16.5.2006
Где: Киев

Репутация: нет
Всего: 2




Цитата

но я не знаю какой хэндл у приложения на котрое мне нужно нажимать, как отловить этот хэдл? 



Дак ведь это делает функа FindWindow или FindWindowEx

Вот читай

Цитата

FindWindow Function

The FindWindow function retrieves a handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows. This function does not perform a case-sensitive search.

To search child windows, beginning with a specified child window, use the FindWindowEx function.

Syntax


HWND FindWindow(          LPCTSTR lpClassName,
    LPCTSTR lpWindowName
);
Parameters

lpClassName
[in] Pointer to a null-terminated string that specifies the class name or a class atom created by a previous call to the RegisterClass or RegisterClassEx function. The atom must be in the low-order word of lpClassName; the high-order word must be zero. 
If lpClassName points to a string, it specifies the window class name. The class name can be any name registered with RegisterClass or RegisterClassEx, or any of the predefined control-class names. 

If lpClassName is NULL, it finds any window whose title matches the lpWindowName parameter. 

lpWindowName
[in] Pointer to a null-terminated string that specifies the window name (the window's title). If this parameter is NULL, all window names match. 
Return Value

If the function succeeds, the return value is a handle to the window that has the specified class name and window name.

If the function fails, the return value is NULL. To get extended error information, call GetLastError. 





--------------------
Мой сайт на django
Japanese Innovations
PM ICQ   Вверх
zkv
Дата 29.12.2006, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(grust @  29.12.2006,  12:11 Найти цитируемый пост)
mouse_event работает только на том окне

неправда, следующий код кликнет куда угодно на экране:
Код

    CPaintDC dc(this);
    int iWidth = dc.GetDeviceCaps( HORZRES );
    int iHeight = dc.GetDeviceCaps( VERTRES );
    
    CString str;
    int iX = 0, iY = 0;
    m_EdX.GetWindowText( str ); //m_EdX и m_EdY - Edit'ы в которые вводятся координаты 
    sscanf( str, "%d", &iX);
    m_EdY.GetWindowText( str );
    sscanf( str, "%d", &iY);
    
    POINT cur_pos;
    GetCursorPos(&cur_pos);
    cur_pos.x *= (65535 / iWidth );
    cur_pos.y *= (65535 / iHeight );
    
    iX *= (65535 / iWidth );
    iY *= (65535 / iHeight );
    mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE,iX,iY,0,0);
    Sleep( 50 );
    mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_ABSOLUTE,0,0,0,0); // нажали левую кнопку мыши
    Sleep( 50 );
    mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_ABSOLUTE,0,0,0,0); // отпустили левую кнопку мыши ( НЕ ЗАБЫВАТЬ )
    Sleep( 50 );
    mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE,cur_pos.x,cur_pos.y,0,0);
 
PM MAIL   Вверх
grust
Дата 29.12.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 27.12.2006

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



Да, код работает, на других приложениях, кроме того кторое мне надо..( Приложение на которое мне нужно нажимать - игрушка, со всеми вытекающими последствиями, постоянный рэндеринг и т.д. так вот на него он не кликает(
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

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


 




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


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

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