purebasic.info

PureBasic forum
Текущее время: Сб янв 20, 2018 9:48 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
СообщениеДобавлено: Чт май 04, 2017 7:03 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2241
Откуда: Russia — Belarus
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
Пункты репутации: 11
Приветствую. Имеется беспроводная мышь (Jet.A Comfort OM-U54G).
На ней боковые кнопки (якобы MOUSE4, MOUSE5) играют роль копирования и вставки (COPY/PASTE). Очень сомнительный ход производителя. Я всю жизнь использовал боковые кнопки на мышках, как Вперед/Назад, это удобно везде (в брауезере, проводнике, играх).
Вопрос: как переназначить? И можно ли? Windows 7.

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт май 04, 2017 10:09 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Сб мар 28, 2015 11:06 pm
Сообщений: 113
Откуда: Україна
Благодарил (а): 7 раз.
Поблагодарили: 6 раз.
Пункты репутации: 4
попробуй для начала https://www.highrez.co.uk/downloads/xmo ... ontrol.htm
если меняет - то смотри что и где..


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт май 05, 2017 2:29 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2241
Откуда: Russia — Belarus
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
Пункты репутации: 11
LinXP писал(а):
попробуй для начала https://www.highrez.co.uk/downloads/xmo ... ontrol.htm
если меняет - то смотри что и где..

Пробовал эту программу. Проблема в том, что в ней нет таких инпутов, как COPY & PASTE :(.
Изображение

Может кто знает как на PB сделать подобный перехват? Правда я не могу найти даже подходящий Virtual-Key Code. Нашел только VK_OEM_COPY, но вроде как это не то.

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт май 05, 2017 5:39 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6224
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Проверь этот код:
Код:
1
2
3
4
5
6
7
8
9
10
OpenWindow(0, 0, 0, 500, 500, "Мыша", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
 
Repeat
        Event = WaitWindowEvent(10)
        If GetAsyncKeyState_(#VK_LBUTTON) & 1 :  Debug "Left " : EndIf
        If GetAsyncKeyState_(#VK_RBUTTON) & 1 :  Debug "Right " : EndIf
        If GetAsyncKeyState_(#VK_MBUTTON) & 1 :  Debug "Middle " : EndIf
        If GetAsyncKeyState_(#VK_XBUTTON1) & 1 : Debug "X1 Mouse Clicked" : EndIf
        If GetAsyncKeyState_(#VK_XBUTTON2) & 1 : Debug "X2 Mouse Clicked" : EndIf
Until Event = #PB_Event_CloseWindow


_________________
read-only


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт май 05, 2017 2:10 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2241
Откуда: Russia — Belarus
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
Пункты репутации: 11
kvitaliy, на основе этого кода выяснил, что при нажатии этих двух кнопок вызывается на какой-нибудь #VK_OEM_COPY код (для копирования, например), а #VK_CONTROL + #VK_C (и #VK_V) соответственно, т.е. словно CTRL + C / CTRL + V, что очень печально :oops:.

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт май 05, 2017 4:04 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11080
Благодарил (а): 4 раз.
Поблагодарили: 385 раз.
Мышка также является клавиатурой, т. е. составное HID устройство и при подключении мышки в диспетчере устройств появляется дополнительная клавиатура?

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт май 05, 2017 4:08 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Сб мар 28, 2015 11:06 pm
Сообщений: 113
Откуда: Україна
Благодарил (а): 7 раз.
Поблагодарили: 6 раз.
Пункты репутации: 4
qpAHToMAS писал(а):
Пробовал эту программу. Проблема в том, что в ней нет таких инпутов, как COPY & PASTE :(.

Просто попробуй повесить какое то действие на Mouse Button 4, Mouse Button 5


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт май 05, 2017 4:59 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6224
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
qpAHToMAS писал(а):
kvitaliy, на основе этого кода выяснил, что при нажатии этих двух кнопок вызывается на какой-нибудь #VK_OEM_COPY код (для копирования, например), а #VK_CONTROL + #VK_C (и #VK_V) соответственно, т.е. словно CTRL + C / CTRL + V, что очень печально :oops:.

Не печалься! :D
С одной стороны, сама мышка вряд ли может вызывать эти действия, значит есть программа, которая ей управляет, а значит и есть настройка этой программы. Надо только поискать.
Если нет, то опять же хуки, перехватываем нажатия этих кнопок и назначаем свои действия. В принципе там нет ни чего сложного, для правой кнопки например перехват очень простой, для дополнительных чуть замороченнее, у меня просто нет такой мышки, но смысл в перехвате WM_XBUTTONUP и WM_XBUTTONDOWN ,а потом анализ что это за кнопка MK_XBUTTON1 или MK_XBUTTON2 ? В общем сам посмотри, MSDN почитай, должен разобраться.
Код:
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
 
 ; For VB6, для PB переделывается в виде #WM_XBUTTONDOWN = $20B
;   WM_XBUTTONDOWN = &H20B
;   WM_XBUTTONUP  = &H20C
;   WM_XBUTTONDBLCLK  = &H20D
;   XBUTTON1  = &H1
;   XBUTTON2 = &H2
 
 
Procedure HookProc(nCode,wParam,lParam)
   Select wParam
      Case #WM_RBUTTONDOWN
        Debug "RBUTTON DOWN"
        ProcedureReturn 1
      Case #WM_RBUTTONUP
      Debug "RBUTTON UP"
      ProcedureReturn 1                           ; перехват отпускания правой клавиши - выкл. контекстное меню!
    Case #MK_XBUTTON1                       ;https://msdn.microsoft.com/en-us/library/windows/desktop/ms646245(v=vs.85).aspx
      Debug "The first X button is down."
      ProcedureReturn 1
    Case #MK_XBUTTON2
      Debug "The second  X button is down."
      ProcedureReturn 1
   EndSelect
   
   ProcedureReturn CallNextHookEx_(0,nCode,wParam,lParam)  
EndProcedure
 
OpenWindow(0,0,0,240,140,"Mouse Block",#WS_CAPTION | #WS_SYSMENU | 1)
 
StickyWindow(0,1)
 
hhkLLMouse = SetWindowsHookEx_(#WH_MOUSE_LL,@HookProc(),GetModuleHandle_(0),0)
 
AddKeyboardShortcut(0,#PB_Shortcut_Escape,101)
 
Repeat
   EventID = WaitWindowEvent()
   
Until EventID = #PB_Event_CloseWindow Or EventMenu() = 101
 
UnhookWindowsHookEx_(hhkLLMouse)
 


_________________
read-only


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт май 05, 2017 5:08 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2241
Откуда: Russia — Belarus
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
Пункты репутации: 11
Пётр писал(а):
Мышка также является клавиатурой, т. е. составное HID устройство и при подключении мышки в диспетчере устройств появляется дополнительная клавиатура?

Да, появляется "Клавиатура HID" и аж пять таких девайсов:
Изображение
(причем пробовал отключать их, и по сути мышь это одно "USB-устройство ввода", после отключения которого, мышь не работает)

Цитата:
сама мышка вряд ли может вызывать эти действия

По-моему именно так. Мышь тупо отсылает CTRL + C / CTRL + V словно ты их нажал с клавиатуры.

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

И да, отвратительная мышь. Часто затупляет (курсор ходит рывками или вовсе не двигается).
Jet.A Comfort OM-U54G, OM-U54G, беспроводная мышь, DNS-SHOP, DNS магазин

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт май 05, 2017 5:22 pm 
Не в сети
док
Аватар пользователя

Зарегистрирован: Сб мар 28, 2015 11:06 pm
Сообщений: 113
Откуда: Україна
Благодарил (а): 7 раз.
Поблагодарили: 6 раз.
Пункты репутации: 4
qpAHToMAS писал(а):
Проблема в том, что в ней нет таких инпутов, как COPY & PASTE :(.

Изображение

Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт май 05, 2017 10:08 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6224
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
qpAHToMAS писал(а):
Т.е. как я понимаю, хук едва ли возможен, или на уровне собственного драйвера для клавиатуры (мыши)...

Нормально ставится хук:
Код:
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
Procedure HookProc(nCode,wParam,lParam)
    Debug EventwParam()
    Select wParam
         
      Case #WM_XBUTTONDOWN;
                Debug "The  X button is down. "
      ProcedureReturn 1
     
    Case #WM_XBUTTONUP      
           Debug "The X button is up.  "
      ProcedureReturn 1
   EndSelect
   
   ProcedureReturn CallNextHookEx_(0,nCode,wParam,lParam)  
EndProcedure
 
OpenWindow(0,0,0,240,140,"Mouse Block",#WS_CAPTION | #WS_SYSMENU | 1)
 
StickyWindow(0,1)
 
hhkLLMouse = SetWindowsHookEx_(#WH_MOUSE_LL,@HookProc(),GetModuleHandle_(0),0)
 
AddKeyboardShortcut(0,#PB_Shortcut_Escape,101)
 
Repeat
   EventID = WaitWindowEvent()
   
 
Until EventID = #PB_Event_CloseWindow Or EventMenu() = 101
 
UnhookWindowsHookEx_(hhkLLMouse)



Единственно, что не могу сделать это разделить кнопки, согласно MSDN информация по кнопкам именно в разрядах wParam:
Младшее слово указывает, находятся ли какие-либо виртуальные клавиши в нажатом состоянии. Оно может состоять из одного или нескольких ниже перечисленных значений.
Значение Предназначение
MK_CONTROL Клавиша CTRL находится в нажатом состоянии.
MK_LBUTTON Левая кнопка мыши находится в нажатом состоянии.
MK_MBUTTON Средняя кнопка мыши находится в нажатом состоянии.
MK_RBUTTON Правая кнопка мыши находится в нажатом состоянии.
MK_SHIFT Клавиша SHIFT находится в нажатом состоянии.
MK_XBUTTON1 Первая X-кнопка находится в нажатом состоянии.
MK_XBUTTON2 Вторая X-кнопка находится в нажатом состоянии.

Старшее слово указывает, какая кнопка производила двойной щелчок. Оно может быть одним из ниже перечисленных значений.
Значение Предназначение
XBUTTON1 Двойной щелчок производила первая X-кнопка.
XBUTTON2 Двойной щелчок производила вторая X-кнопка.



И как эту конструкцию запустить в PB я не врубаюсь:
Код:
1
2
3
fwKeys = GET_KEYSTATE_WPARAM (wParam); 
fwButton = GET_XBUTTON_WPARAM (wParam);
 


Опять же без мышки сложно разрулить :D

_________________
read-only


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт май 05, 2017 11:03 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11080
Благодарил (а): 4 раз.
Поблагодарили: 385 раз.
kvitaliy писал(а):
Единственно, что не могу сделать это разделить кнопки, согласно MSDN информация по кнопкам именно в разрядах wParam
Из описания очевидно же что это делается таким образом.
Код:
1
2
3
4
5
6
7
If (wParam & $FFFF) & #MK_XBUTTON1
  Debug "XBUTTON1"
EndIf
 
If (wParam & $FFFF) & #MK_XBUTTON2
  Debug "XBUTTON2"
EndIf


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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб май 06, 2017 5:33 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6224
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Пётр писал(а):
Из описания очевидно же что это делается таким образом.
Код:
1
2
3
4
5
6
7
If (wParam & $FFFF) & #MK_XBUTTON1
  Debug "XBUTTON1"
EndIf
 
If (wParam & $FFFF) & #MK_XBUTTON2
  Debug "XBUTTON2"
EndIf



По идее должно работать, только я применял макросы
Код:
1
2
3
4
5
6
7
Macro LOWORD(Value)
  Value & $FFFF
EndMacro
 
Macro HIWORD(Value)
  (Value >> 16) & $FFFF
EndMacro



Но почему то не работает :(

_________________
read-only


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб май 06, 2017 8:08 am 
Не в сети
доцент

Зарегистрирован: Сб янв 19, 2013 9:48 am
Сообщений: 33
Благодарил (а): 0 раз.
Поблагодарили: 10 раз.
попробуйте MKey http://www.seriosoft.org/index.php


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб май 06, 2017 9:17 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11080
Благодарил (а): 4 раз.
Поблагодарили: 385 раз.
kvitaliy писал(а):
Нормально ставится хук:
Код:
1
2
3
4
5
Procedure HookProc(nCode,wParam,lParam)
    Debug EventwParam()
    Select wParam
      Case #WM_XBUTTONDOWN
...

Может вместо Select wParam должно быть Select nCode?

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


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB