Модераторы: 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   Вверх
W4FhLF
Дата 29.12.2006, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



grust, писал такое для игры(CS) и как раз с помощью mouse_event, правда флаги были другими, попробуй вот  так:

Код

mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, cbuttons, dwExtraInfo);
Sleep(50);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, cbuttons, dwExtraInfo);


Всё чётко работало и работает.


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


Новичок



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

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



не компилируеться
.\hook.cpp(41) : error C2065: 'cbuttons' : undeclared identifier
.\hook.cpp(41) : error C2065: 'dwExtraInfo' : undeclared identifier
PM MAIL   Вверх
W4FhLF
Дата 29.12.2006, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Цитата

не компилируеться
.\hook.cpp(41) : error C2065: 'cbuttons' : undeclared identifier
.\hook.cpp(41) : error C2065: 'dwExtraInfo' : undeclared identifier



Даже не знаю почему, наверное так сложились звёзды...


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


Опытный
**


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

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



если  windows 2000/xp то dwData параметр  там где cbutton вообще не нужен:
Цитата

Windows 2000/XP: 
Если dwFlags - не MOUSEEVENTF_WHEEL, MOUSEEVENTF_XDOWN, или MOUSEEVENTF_XUP, то dwData должен быть нулевым


а второй пармерт dwExtraInfo можно найти:
Код

 LPARAM  dwExtraInfo;
 dwExtraInfo = GetMessageExtraInfo();


Добавлено @ 21:34 
Цитата(W4FhLF @  29.12.2006,  14:50 Найти цитируемый пост)
Всё чётко работало и работает.

а что делает если не секрет smile


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

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



Цитата(W4FhLF @  29.12.2006,  20:57 Найти цитируемый пост)
Даже не знаю почему, наверное так сложились звёзды...

smile

Цитата(W4FhLF @  29.12.2006,  18:50 Найти цитируемый пост)
 писал такое для игры(CS)


W4FhLF, хы, а что скрипт делал? smile средствами самого cstrike не получалось обойтись?




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
zkv
Дата 29.12.2006, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(grust @  29.12.2006,  19:38 Найти цитируемый пост)
не компилируеться
.\hook.cpp(41) : error C2065: 'cbuttons' : undeclared identifier
.\hook.cpp(41) : error C2065: 'dwExtraInfo' : undeclared identifier 

можно посоветовать только книжку почитать какую-нибудь по С/С++
Цитата(W4FhLF @  29.12.2006,  20:57 Найти цитируемый пост)
Даже не знаю почему, наверное так сложились звёзды... 

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


found myself
****


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

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



Цитата

а что делает если не секрет


Цитата

W4FhLF, хы, а что скрипт делал?  средствами самого cstrike не получалось обойтись?


А может кстати и не для CS, я точно не знаю, мне просто заказали. Делала она следующее:
Если держать 1.5 секунды левую кнопку мыши, то после этого периода  кнопка начинает программно нажиматься каждый 100 миллисекунд. Ну насколько я понял, человеку это нужно было для того, чтобы из пистолета стрелять как из автоматаsmile


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

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



W4FhLF, понятно. Это просто делается и средствами CS, можно к примеру повесить выстрел и на нажатие кнопки мыши и на отжатие. А задержки кстати зависят напрямую от качества линии, то есть нужно их подстраивать. Наверное все-таки не для CS..





--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Alx
Дата 18.8.2010, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

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



Столкнулся с похожей задачей:
сразу несколько вопросов:

1) а игры могут распознать, что клик такими средствами был сэмулирован? что, если они как-то работают напрямую? (с DirectX?)

2) возможно, тогда встает необходимость написать драйвер, эмулирующий мышь? наверное, это должно быть на основе DDK/WDK?

3) может лежит уже что-то в форме API у кого нибудь? ищу 2 дня, пока не нашел..  smile 

Это сообщение отредактировал(а) Alx - 18.8.2010, 12:26


--------------------
PM MAIL WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1106 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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