Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31

Hook на мышку

30.03.2015, 09:18. Показов 3780. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем Привет...
Огромная просьба мне помочь...Я не давно начал изучать Pere Basic.
И вот уже 4 дня мучаюсь...и вообще не могу сдвинуться с места...
То есть суть такова ..Есть Autoit скрипт Хука на колесико мышки..с использованием .dll
нужно его перевести на Pure Basic.
везде обыскал.не нашел
попадались примеры Хука на мышку но они без использования .dll...
А мне нужно чтоб использовалась Hook.dll
Переведите Пожалуйста ...Очень Надо...

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Const $WH_MOUSE = 7
Const $WM_AUTOITMOUSEWHEELUP = 0x1400 + 0x0D30
Const $WM_AUTOITMOUSEWHEELDOWN = 0x1400 + 0x0D31
 
Global $tr = 0, $setico='', $TrGui=0, $iniTrn, $iniX, $iniY, $iniAtSt, $iniDV, $iniColBk, $iniColVol, $a, $iniHK='', $iniHKM=''
$gui = GUICreate("", 30, 135, 0, 0)
 
Global $DLLinst = DllCall("kernel32.dll", "hwnd", "LoadLibrary", "str", ".\hook.dll")
Global $mouseHOOKproc = DllCall("kernel32.dll", "hwnd", "GetProcAddress", "hwnd", $DLLinst[0], "str", "MouseProc")
Global $hhMouse = DllCall("user32.dll", "hwnd", "SetWindowsHookEx", "int", $WH_MOUSE, "hwnd", $mouseHOOKproc[0], "hwnd", $DLLinst[0], "int", 0)
 
DllCall(".\hook.dll", "int", "SetValuesMouse", "hwnd", $gui, "hwnd", $hhMouse[0])
GUIRegisterMsg($WM_AUTOITMOUSEWHEELUP, "myfunc")
GUIRegisterMsg($WM_AUTOITMOUSEWHEELDOWN, "myfunc")
 
While sleep(500)
WEnd
 
Func MyFunc($hWndGUI, $MsgID, $WParam, $LParam)
   ConsoleWrite("А")
EndFunc
Вот и сам Hook.dll
https://www.dropbox.com/s/btvk... k.dll?dl=0
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.03.2015, 09:18
Ответы с готовыми решениями:

Реакция на мышку
Хочу узнать, есть ли стандартные функции реакции изображений (положение в основном, а так - в плоть до изменения изображения) на положение...

ПК не видит мышку
Привет всем, проблема заключается в том, что ПК не видит мышку пока я его не перезагружу. Мышка рабочая, новая, да и со старыми такая-же...

посоветуйте мышку
посоветуйте хорошую мышку(проводную) в районе до 700-800р. я всегда пользовался самыми дешевыми мышками(70-150р) дома лежит уже 4...

20
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
31.03.2015, 09:55  [ТС]
Ну никто не поможет..??
0
Эксперт по электронике
6493 / 3123 / 331
Регистрация: 28.10.2011
Сообщений: 12,277
Записей в блоге: 7
31.03.2015, 10:52
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#WM_AUTOITMOUSEWHEELUP   = $1400 + $0D30
#WM_AUTOITMOUSEWHEELDOWN = $1400 + $0D31
 
Procedure MyFunc(hWndGUI, MsgID, WParam, LParam)
  PrintN("A")
EndProcedure
 
OpenConsole()
gui = OpenWindow(0, 30, 135, 0, 0, "")
 
DLLinst = LoadLibrary_(".\hook.dll")
*mouseHOOKproc = GetProcAddress_(DLLinst, "MouseProc")
hhMouse = SetWindowsHookEx_(#WH_MOUSE, *mouseHOOKproc, DLLinst, 0)
 
CallFunctionFast(GetProcAddress_(DLLinst, "SetValuesMouse"), gui, hhMouse)
BindEvent(#WM_AUTOITMOUSEWHEELUP, @MyFunc())
BindEvent(#WM_AUTOITMOUSEWHEELDOWN, @MyFunc())
Repeat
  WaitWindowEvent()
ForEver
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
31.03.2015, 13:35  [ТС]
locm, тут выдает ошибку ..
PureBasic
1
2
BindEvent(#WM_AUTOITMOUSEWHEELUP, @MyFunc())
BindEvent(#WM_AUTOITMOUSEWHEELDOWN, @MyFunc())
Добавлено через 8 минут
Строка: BindEvent() Не функция,Массив,Макрос или Связанный писок.
0
Эксперт по электронике
6493 / 3123 / 331
Регистрация: 28.10.2011
Сообщений: 12,277
Записей в блоге: 7
31.03.2015, 14:00
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#WM_AUTOITMOUSEWHEELUP   = $1400 + $0D30
#WM_AUTOITMOUSEWHEELDOWN = $1400 + $0D31
 
Procedure MyFunc(hWndGUI, MsgID, WParam, LParam)
  If MsgID=#WM_AUTOITMOUSEWHEELUP Or MsgID=#WM_AUTOITMOUSEWHEELDOWN
    PrintN("A")
  EndIf
EndProcedure
 
OpenConsole()
gui = OpenWindow(0, 30, 135, 0, 0, "")
DLLinst = LoadLibrary_(".\hook.dll")
*mouseHOOKproc = GetProcAddress_(DLLinst, "MouseProc")
hhMouse = SetWindowsHookEx_(#WH_MOUSE, *mouseHOOKproc, DLLinst, 0)
CallFunctionFast(GetProcAddress_(DLLinst, "SetValuesMouse"), gui, hhMouse)
SetWindowCallback(@MyFunc(), 0)
 
Repeat
  WaitWindowEvent()
ForEver
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
31.03.2015, 14:05  [ТС]
locm, Не проверяли у Вас работает нет..
Пишет букву (А) ?
0
Эксперт по электронике
6493 / 3123 / 331
Регистрация: 28.10.2011
Сообщений: 12,277
Записей в блоге: 7
31.03.2015, 14:07
Нет не проверял.
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
31.03.2015, 14:10  [ТС]
locm, не работает у мя..
Помогитеееееееее..Пож..
0
Эксперт по электронике
6493 / 3123 / 331
Регистрация: 28.10.2011
Сообщений: 12,277
Записей в блоге: 7
31.03.2015, 14:19
Проверил. Все работает.
Вложения
Тип файла: zip HookTest.zip (8.0 Кб, 25 просмотров)
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
31.03.2015, 14:29  [ТС]
locm, Ваш скомпилированый файл работает..
а я компилирую...и не работает..не знаете в чем причина...
А так спасибо Большое...
0
Эксперт по электронике
6493 / 3123 / 331
Регистрация: 28.10.2011
Сообщений: 12,277
Записей в блоге: 7
31.03.2015, 14:31
Компилируйте исходник из вложения или скопированный текст из этой темы?
Какая версия PureBasic и разрядность? Не x64?
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
31.03.2015, 14:34  [ТС]
Пишет сразу при запуске ( программа прекращает свою работу.)
мой скомпилирован файл
0
Эксперт по электронике
6493 / 3123 / 331
Регистрация: 28.10.2011
Сообщений: 12,277
Записей в блоге: 7
31.03.2015, 14:36
Запустите в PureBasic с включенным отладчиком. Должно показать проблемную строку и написать что не так.
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
31.03.2015, 14:37  [ТС]
Вин 8-64
PureBasic 4.60 (Windows - x64)
Feel the ..Pure.. Power

Добавлено через 1 минуту
Вот эта строка красным горит..
PureBasic
1
CallFunctionFast(GetProcAddress_(DLLinst, "SetValuesMouse"), gui, hhMouse)
0
Эксперт по электронике
6493 / 3123 / 331
Регистрация: 28.10.2011
Сообщений: 12,277
Записей в блоге: 7
31.03.2015, 14:53
Лучший ответ Сообщение было отмечено MyStErI как решение

Решение

Нужна версия x86.
Дело в том что библиотека hook.dll 32 битная, а PureBasic x64 создает 64 битные исполняемые файлы. Нельзя загрузить 32 битную библиотеку в 64 битный процесс и наоборот.
Варианта решения как минимум два.
1. Использовать PureBasic x86.
2. Написать аналог hook.dll и компилировать в PureBasic x64 чтобы получить 64 битную DLL.
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
31.03.2015, 14:59  [ТС]
https://www.dropbox.com/s/1sbu... 1.png?dl=0

Добавлено через 2 минуты
locm, А если я установлю PureBasic 4.60 (Windows - x86)
и скомпилирую ..то я думаю что будет работать и на 86 и на 64..
А вы как думаете..?
0
Эксперт по электронике
6493 / 3123 / 331
Регистрация: 28.10.2011
Сообщений: 12,277
Записей в блоге: 7
31.03.2015, 15:03
Цитата Сообщение от MyStErI Посмотреть сообщение
то я думаю что будет работать и на 86 и на 64
Все правильно.
1
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
31.03.2015, 16:13  [ТС]
Еще вопросик..
как мне сделать чтоб печатало не только в консоли а везде например в блокноте ?

Добавлено через 1 час 5 минут
как написать этот код Autoit на Pure Basic
PureBasic
1
2
3
WinWait("Окно другой программы")
If Not WinActive("Окно другой программы")  Then WinActivate("Окно другой программы")
WinWaitActive("Окно другой программы")
Подскажите..
0
Эксперт по электронике
6493 / 3123 / 331
Регистрация: 28.10.2011
Сообщений: 12,277
Записей в блоге: 7
31.03.2015, 17:32
Цитата Сообщение от locm Посмотреть сообщение
2. Написать аналог hook.dll и компилировать в PureBasic x64 чтобы получить 64 битную DLL.
Написать конечно можно, но есть один нюанс. В DLL сохраняется идентификатор окна и адрес функции, но поскольку библиотека подгружается во всех процессы, то возникает такая ситуация что в других процессах работать нормально не будет, т. к. у каждого процесса свои переменные и то что сохранили в процессе установки хука, в другие процессы передано не будет.
По этой причине нужна общая память для всех процессов, например общая секция, которую можно создать используя возможности FASMа. Что-то типа.
PureBasic
1
2
3
4
5
6
7
8
DataSection
  ! section '.shared' data readable writeable shareable
  
  SharedLabel:
  Data.i 0, 0, 0, 0
  
  ! section '.data' data readable writeable
EndDataSection
Этот код резервирует место под 4 переменные типа Integer, получить доступ к которым можно например присвоив указатель метки структуре.

Получилось следующее.
DLL.
PureBasic
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
55
56
57
58
59
60
61
62
63
64
#WM_AUTOITMOUSEWHEELUP   = $1400 + $0D30
#WM_AUTOITMOUSEWHEELDOWN = $1400 + $0D31
 
Structure MOUSEHOOKSTRUCTEX
  MOUSEHOOKSTRUCT.MOUSEHOOKSTRUCT
  mouseData.l
EndStructure
 
Structure SharedData
  hWnd.i
  *Proc
EndStructure
 
Global *g_SharedData.SharedData
 
Procedure.w MouseWheelDelta(Code)
  x.w = ((Code>>16)&$FFFF) 
  ProcedureReturn -(x / 120) 
EndProcedure 
 
ProcedureDLL SetValuesMouse(hWnd, *MProc)
  *g_SharedData\hWnd=hWnd
  *g_SharedData\Proc=*MProc
EndProcedure
 
ProcedureDLL MouseProc(nCode, wParam, *lParam.MOUSEHOOKSTRUCTEX)
  Protected *Proc
  
  If nCode >= 0
    
    If wParam = #WM_MOUSEWHEEL
     
      If *g_SharedData\hWnd
        If MouseWheelDelta(*lParam\mouseData)>0
          Code = #WM_AUTOITMOUSEWHEELDOWN
        Else
          Code = #WM_AUTOITMOUSEWHEELUP
        EndIf
        ProcedureReturn PostMessage_(*g_SharedData\hWnd, Code, 0, 0)
      EndIf
    EndIf
    
  EndIf
  
  *Proc=*g_SharedData\Proc
  If *Proc=0
    *Proc=@MouseProc()
  EndIf
  
  ProcedureReturn CallNextHookEx_(*Proc, nCode, wParam, *lParam)
EndProcedure
 
ProcedureDLL AttachProcess(Instance)
  *g_SharedData = ?SharedLabel
EndProcedure
 
DataSection
  ! section '.shared' data readable writeable shareable
  
  SharedLabel:
  Data.i 0, 0, 0, 0
  
  ! section '.data' data readable writeable
EndDataSection
EXE.
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#WM_AUTOITMOUSEWHEELUP   = $1400 + $0D30
#WM_AUTOITMOUSEWHEELDOWN = $1400 + $0D31
 
Procedure MyFunc(hWndGUI, MsgID, WParam, LParam)
  If MsgID=#WM_AUTOITMOUSEWHEELUP
    PrintN("A")
  ElseIf MsgID=#WM_AUTOITMOUSEWHEELDOWN
    PrintN("B")
  EndIf
  
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
 
OpenConsole()
gui = OpenWindow(0, 30, 135, 0, 0, "")
DLLinst = LoadLibrary_("hook.dll")
*mouseHOOKproc = GetProcAddress_(DLLinst, "MouseProc")
hhMouse = SetWindowsHookEx_(#WH_MOUSE, *mouseHOOKproc, DLLinst, 0)
CallFunctionFast(GetProcAddress_(DLLinst, "SetValuesMouse"), gui, hhMouse)
SetWindowCallback(@MyFunc(), 0)
 
Repeat
  WaitWindowEvent()
ForEver
Вложения
Тип файла: zip Hook_dll.zip (9.2 Кб, 15 просмотров)
2
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 31
31.03.2015, 18:08  [ТС]
locm, Спасибо большое...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2015, 18:08
Помогаю со студенческими работами здесь

Какую мышку взять?
Добрый день(ну или вечер), хочу взять мышку для эксплуатации в основном в играх. Не играю в шутеры поэтому не очень сильно гонюсь за...

Как подключить мышку?
Здравствуйте. Есть беспроводная мышь Oklick 412sw. Софт-Винда 7. Как подключить её??? При включении мыши-загорается на секунду а дальше...

Мышку и кошку в 1 норку
Я нахожусь на даче и выехать куда то не хочу.... Надо работать Есть 2 ноута - 1 тошиба с проблемами (про нее забыли) и 2- маленький...

Заставить мышку кликать
Доброго времени суток, есть класс QCursor, в нем есть метод setPos(), это я понял, но можно ли как то заставить мышку кликать в этой же...

Не видит мышку при установки
Устанавливаю iAtkos на ноутбук Lenovo G580. После загрузки окна по принятию лицензии, не могу двинуть мышку. Что делать?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru