Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
1

Во время зажатой мыши отправлять клики

19.08.2013, 09:53. Показов 3095. Ответов 13

Author24 — интернет-сервис помощи студентам
Народ помогите, пожалуйста!
Очень нужна такая программулинка, которая перехватывала бы нажатие левой кнопки мыши и пока она нажата, передавала 1000 кликов в минуту системе.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.08.2013, 09:53
Ответы с готовыми решениями:

Клики мыши вне формы
Как можно поймать клик мыши даже если он произошел вне формы?

Перемещение мыши и клики в определенных местах
Вся суть в том что нужно при нажатии клавиши на клавиатуре чтобы мышка перемещалась на определенные...

"Проглатываются" нажатия клавиш или клики мыши
Для примера: форма запускается в невидимом режиме. При нажатии ЛКМ+ПКМ она показывается. Модуль:...

Клики левой кнопки мыши по таймеру, при зажатой левой кнопке мыши (user32.lib)
Уважаемые форумчане, взорвался мозг. Помогите. Есть одна, по мне, невыполнимая, задача, которую я...

13
DimN
19.08.2013, 09:59
  #2

Не по теме:

А чё, винда тупыми вопросами достаёт?? :)

0
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
19.08.2013, 10:07  [ТС] 3
-DimN-,
нет на самом деле требуется для онлайн стрелялки, при чем не мне одному. Проблема в игре состоит в том, что есть некоторые оружия с высокой скорострельностью, но увы они НЕ автоматические, и приходиться "вручную" очень быстро кликать!
Этот "макрос" (так называются они в игре) очень поможет 39ти людям!
0
98 / 49 / 0
Регистрация: 14.08.2013
Сообщений: 230
Записей в блоге: 4
19.08.2013, 14:11 4
Забей в поисковике AutoClicker - получишь массу таких прог...
0
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
19.08.2013, 14:18  [ТС] 5
-DimN-, Я думаю они врятли будут кликать от нажатия до отжатия клавиши. Тем более исходный код тоже ведь интересен.
Кроме этого мне нужно поставить на правую клавишу, чтобы при отжатии посылался правый клик и тоже самое с шифтом.
0
Модератор
9866 / 3773 / 876
Регистрация: 22.02.2013
Сообщений: 5,626
Записей в блоге: 78
19.08.2013, 19:05 6
Используй Api функцию mouse_event.
0
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
19.08.2013, 20:34 7
Цитата Сообщение от The trick Посмотреть сообщение
Используй Api функцию mouse_event.
А подробнее, плз - к какому событию привязаться-то
0
6807 / 2837 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
19.08.2013, 21:24 8
Цитата Сообщение от morgann55 Посмотреть сообщение
к какому событию привязаться-то
К событию "нажата левая клавиша мыши" Можно по таймеру проверять
Visual Basic
1
2
3
4
5
6
7
8
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Sub Timer1_Timer()
 keyresult = GetAsyncKeyState(1)
    If keyresult = -32768 Then
    Print "[L_DOWN]"
    End If
 
End Sub
Таймер интервал 1

Добавлено через 3 минуты
The trick,
У меня другие сомнения - будет ли mouse_event срабатывать, если зажата физическая кнопка мыши?
Я так быстренько проверил, вроде не работает.
2
Модератор
9866 / 3773 / 876
Регистрация: 22.02.2013
Сообщений: 5,626
Записей в блоге: 78
19.08.2013, 21:45 9
Цитата Сообщение от Pro_grammer Посмотреть сообщение
У меня другие сомнения - будет ли mouse_event срабатывать, если зажата физическая кнопка мыши?
Скорее всего будет. Вот примерчик, только я особо с константами не проверял.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Option Explicit
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
 
Private Const MOUSEEVENTF_LEFTDOWN = &H2 '  left button down
Private Const MOUSEEVENTF_LEFTUP = &H4 '  left button up
 
Private Sub Timer1_Timer()
    Dim keyresult As Integer, N As Long
    keyresult = GetAsyncKeyState(1)
    If keyresult < -32767 Then
        For N = 0 To 999
            mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
            mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
        Next
    End If
End Sub
2
6807 / 2837 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
19.08.2013, 22:07 10
Цитата Сообщение от The trick Посмотреть сообщение
Вот примерчик,
Так срабатывает, если после клика отпускать кнопку - в цикле 1000 раз. А я то пытался при зажатой кнопке mouse_event использовать (keyresult = -32768), без цикла...
0
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
19.08.2013, 22:52 11
Наверно надо посылать клики через Do...Loop с проверкой на ОтпусканиеЛКМ....
0
Модератор
9866 / 3773 / 876
Регистрация: 22.02.2013
Сообщений: 5,626
Записей в блоге: 78
20.08.2013, 00:06 12
Между вызовами нажатия и отжатия устанавливать флаг, а после сбрасывать. И проверять статус при отсутствующем флаге.

Добавлено через 44 минуты
Цитата Сообщение от morgann55 Посмотреть сообщение
А подробнее, плз - к какому событию привязаться-то
Можно хук поставить WH_MOUSE_LL, флагом LLMHF_INJECTED проверять, программный или реальных клик
0
Модератор
9866 / 3773 / 876
Регистрация: 22.02.2013
Сообщений: 5,626
Записей в блоге: 78
20.08.2013, 00:27 13
Лучший ответ Сообщение было отмечено как решение

Решение

Модуль:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Option Explicit
 
Public Type POINT
    X As Long
    Y As Long
End Type
Public Type MSLLHOOKSTRUCT
    pt As POINT
    mouseData As Long
    flags As Long
    time As Long
    dwExtraInfo As Long
End Type
 
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
 
Private Const HC_ACTION = 0
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
 
Private Const WH_MOUSE_LL = &HE&
Private Const LLMHF_INJECTED = 1
 
Private hHook As Long
 
Public Sub StartHook()
    hHook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf LowLevelMouseProc, App.hInstance, 0)
End Sub
Public Sub StopHook()
    UnhookWindowsHookEx hHook
End Sub
 
Public Function LowLevelMouseProc(ByVal uCode As Long, ByVal wParam As Long, lParam As MSLLHOOKSTRUCT) As Long
    Dim hs As MSLLHOOKSTRUCT
    If uCode = HC_ACTION Then
        If wParam = WM_LBUTTONDOWN Then         ' Нажатие
            CopyMemory hs, ByVal lParam, Len(hs)
            If Not CBool(hs.flags And LLMHF_INJECTED) Then
                Debug.Print "Real MouseDown"
                frmMain.tmrClick.Enabled = True
            End If
        ElseIf wParam = WM_LBUTTONUP Then       ' Отпускание
            CopyMemory hs, ByVal lParam, Len(hs)
            If Not CBool(hs.flags And LLMHF_INJECTED) Then
                Debug.Print "Real MouseUp"
                frmMain.tmrClick.Enabled = False
            End If
        End If
    End If
    LowLevelMouseProc = CallNextHookEx(hHook, uCode, wParam, lParam)
End Function

Форма с таймером:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit
 
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
 
Private Const MOUSEEVENTF_LEFTDOWN = &H2 '  left button down
Private Const MOUSEEVENTF_LEFTUP = &H4 '  left button up
 
Private Sub Form_Load()
    StartHook
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    StopHook
End Sub
 
Private Sub tmrClick_Timer()
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
Вложения
Тип файла: rar LLMouseHook.rar (2.1 Кб, 42 просмотров)
3
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
20.08.2013, 16:50  [ТС] 14
The trick, отлично работает!
Но в откомпилированном виде у меня даже не даёт запуститься.. попробуйте, пожалуйста, на своём компе.. А то мне кажется это из-за системы защиты на моём рабочем компе (по крайней мере SendKeys у меня блокируется на работе).
0
20.08.2013, 16:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2013, 16:50
Помогаю со студенческими работами здесь

Windows и программы через некоторое время перестают реагировать на клики мыши
по порядку, при включении компьютера все загружается но не работает мышь, вытаскиваю мышь из usb,...

Движение мыши с точки А в точку Б с зажатой правой кнопкой мыши
Здравствуйте, мне нужно сделать программу которая бы плавно перемещала курсор мыши из А в Б причем...

Двойные клики мыши во всех браузерах, так же если браузер запущен двойные клики происходят во всей ОС
Так же сам по себе открывается explorer

MouseMove при зажатой кнопки мыши
private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru