Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/30: Рейтинг темы: голосов - 30, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 19.10.2012
Сообщений: 13

Как отследить нажатия дополнительных кнопок мыши

19.10.2012, 19:25. Показов 6436. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всем привет.
как или с помощью чего можно отследить дополнительные кнопки мыши?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.10.2012, 19:25
Ответы с готовыми решениями:

Подскажите как отследить нажатия кнопок в памяти игры
Народ, кароче такая тема, кто может объяснить как в памяти игры отследить нажатия определенных кнопок? Желательно в скайпе, там и...

Как отследить нажатия кнопок на мышке вне формы
Что нужно для этого сделать ? Спасибо за ранее.

Как обрабатывать нажатия кнопок мыши?
Всем привет. Подскажите,пожалуйста, как обрабатывать нажатия кнопок мыши? Т.е. мне необходимо определять была ли нажата клавиша мыши и...

15
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
20.10.2012, 18:13
Попробуйте покурить мануал от Мелкософта
1
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
20.10.2012, 19:19
qzariy, многое зависит от понятия дополнительные кнопки мыши
Чаще всего хватает этого -
Visual Basic
1
2
3
4
5
6
7
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Select Case Button
Case 1: Caption = "левая"
Case 2: Caption = "правая"
Case 4: Caption = "средняя"
End Select
End Sub
0
1 / 1 / 0
Регистрация: 19.10.2012
Сообщений: 13
20.10.2012, 20:14  [ТС]
в моем случае этого не хватает)
основные кнопки их как правило 3( правая, левая, колесо/средняя)
дополнительные кнопки их как правило сколько угодно.
у меня это две боковые кнопки.
я нашёл код перехвата дополнительных кнопок на делфи и на си.
Вот думаю создать новую тему или скинуть код в эту чтоб перевели если не трудно)
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
20.10.2012, 21:03
Просто определите значение Button для дополнительных кнопок
Visual Basic
1
2
3
4
5
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
 
    Print Button
 
End Sub
1
1 / 1 / 0
Регистрация: 19.10.2012
Сообщений: 13
20.10.2012, 21:18  [ТС]
а это
Цитата Сообщение от SoftIce Посмотреть сообщение
Просто определите значение Button для дополнительных кнопок
Visual Basic
1
2
3
4
5
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
 
    Print Button
 
End Sub
и вот это разве не одно и тоже?
Цитата Сообщение от Апострофф Посмотреть сообщение
qzariy, многое зависит от понятия дополнительные кнопки мыши
Чаще всего хватает этого -
Visual Basic
1
2
3
4
5
6
7
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Select Case Button
Case 1: Caption = "левая"
Case 2: Caption = "правая"
Case 4: Caption = "средняя"
End Select
End Sub
если бы все так было просто я бы и вопрос не задавал)
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
20.10.2012, 21:30
Цитата Сообщение от qzariy Посмотреть сообщение
и вот это разве не одно и тоже
Нет не одно.
Во втором случае по значению переменной Button в заголовке пишется какая кнопка нажата, а в первом - узнаёте какое значение принимает переменная Button при нажатии определённых клавиш.

Добавлено через 5 минут
Во втором коде при нажатии дополнительных кнопок скорее всего ничего не произойдёт.
А в первом - получите какое-то значение.
Проверить не могу - у меня сейчас тач.
0
1 / 1 / 0
Регистрация: 19.10.2012
Сообщений: 13
20.10.2012, 22:01  [ТС]
результат такойже(
покапался в сети и нашёл 2 примера, 1 на си другой на дельфи может кто переведет( заранее спасибо)
Delphi
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
library hooklib;
 
uses
windows, sysutils, messages;
 
var
H, wh, cw : THandle;
 
function hook(code, w, l : integer): Lresult; stdcall;
var
  str:string;
  ll:tagMSLLHOOKSTRUCT;
begin
ll := PtagMSLLHOOKSTRUCT(l)^;
str:=IntToStr(HiWord(ll.mouseData));
str:=IntToStr(LoWord(w))+'_'+IntToS tr(HiWord(w));
if w <> 512 then SendMessage(Cw,WM_SETTEXT,0,lParam( str));
result := CallNextHookEx(H, code, w, l);
End;
 
 
procedure sethook;
begin
H:= SetWindowsHookEx(14, @hook, hInstance, 0);
wh:=FindWindow(nil,PChar('Form1'));
Cw:=FindWindowEx(Wh,0,PChar('TMemo' ),nil);
if H = 0 then
messagebox(0,'AAAAAA!!! ERORR!!!','ERROR',mb_iconhand);
end;
 
procedure removehook;
begin
UnhookWindowsHookEx(H);
end;
 
exports
sethook index 1 name 'sethook',
removehook index 2 name 'removehook';
end.
C#
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
65
66
67
68
69
70
71
72
sing System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
 
namespace GlobalHotKeysExperiments
{
    public partial class Form1 : Form
    {
        [DllImport("User32.dll")]
        public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
 
        [DllImport("User32.dll")]
        public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
 
        [DllImport("kernel32.dll")]
        public static extern Int16 GlobalAddAtom(string name);
 
        [DllImport("kernel32.dll")]
        public static extern Int16 GlobalDeleteAtom(Int16 nAtom);
 
        Int16 atom = GlobalAddAtom("PFight");
 
        public Form1()
        {
            bool state = RegisterHotKey(this.Handle, atom, Defines.MOD_CONTROL, (uint)Keys.Tab);
            InitializeComponent();
            this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
 
        }
 
        void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            UnregisterHotKey(this.Handle, atom);
            GlobalDeleteAtom(atom);
        }
 
        protected override void WndProc(ref Message m)
        {
            if (m.Msg == 0x0312 //WM_HOTKEY
                && m.WParam == atom) 
            {
                MessageBox.Show("Yahooo!");
            }
            base.WndProc(ref m);
        }
    }
}
 
using System.Runtime.InteropServices;
 
public class Form1 : Form
{
    [DllImport("User32.dll")]
    private static extern short GetAsyncKeyState(System.Windows.Forms.Keys vKey);
 
    public Form1()
    {
        MethodInvoker mi = new MethodInvoker(WaitKey);
        mi.BeginInvoke(null, null);
    }
 
    private void WaitKey()
    {
        while (this.IsHandleCreated)
        {
            //XButton1 или XButton2 соответственно 4 и 5 кнопки
            int res1 = Convert.ToInt32(GetAsyncKeyState(Keys.XButton1).ToString());
            if (res1 != 0)
                MessageBox.Show("Hello");
        }
    }
}
или мне отдельную тему по просьбе о переводе лучше создать?
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
20.10.2012, 22:25
qzariy, а что печатается на форме при нажатии кнопок мыши в этом коде?
Visual Basic
1
2
3
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
     Print Button
 End Sub
0
1 / 1 / 0
Регистрация: 19.10.2012
Сообщений: 13
20.10.2012, 22:28  [ТС]
в том и дело что не что не печатается при нажатии дополнительных кнопок мыши, реакции 0.
ну а основные естественно откликаются.
0
Телекомпания ВИD
 Аватар для anny05
1364 / 115 / 19
Регистрация: 14.10.2012
Сообщений: 100
20.10.2012, 23:31
Лучший ответ Сообщение было отмечено как решение

Решение

Здесь не обойтись без глобального хука на события мыши.
Необходимо отслеживать параметр wParam.

Постарайтесь узнать wParam для своих дополнительных кнопок (у меня их нет). В примере показано глобальное отслеживание мышиных событий нажатия и вывод параметра wParam. От этого параметра и нужно отталкиваться конкретно для Вашей задачи.
Вложения
Тип файла: rar MHK.rar (7.1 Кб, 121 просмотров)
4
1 / 1 / 0
Регистрация: 19.10.2012
Сообщений: 13
21.10.2012, 07:02  [ТС]
спасибо за пример))) наконецто их можно отследить)

Добавлено через 7 часов 9 минут
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18031 / 7734 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
21.10.2012, 19:10
Вот результаты wParam для мыши A4-Tech X-710FS:

КнопкаНажатиеwParam
ЛКМDown513
 Up514
ПКМDown516
 Up517
СКМDown519
 Up520
Доп.кнопка 1Down523
 Up524
Доп.кнопка 2Down523
 Up524

Обе дополнительные кнопки дают одинаковый код возврата.
Есть еще варианты?
1
1 / 1 / 0
Регистрация: 19.10.2012
Сообщений: 13
25.10.2012, 00:49  [ТС]
Visual Basic
1
2
If lParam.mouseData = "что написать сюда чтобы определить боковую кнопку?" Then
End If
1
Телекомпания ВИD
 Аватар для anny05
1364 / 115 / 19
Регистрация: 14.10.2012
Сообщений: 100
25.10.2012, 11:09
Спасибо, что протестировали и затронули тему различия боковых кнопок! Няк))

Hex от wParam - это и есть зарезервированные константы, которые должны быть одинаковы у всех.
Если было событие прокрутки колеса, mouseData определяет направление прокрутки (положительное значение - вперед, отрицательное - назад).
Если событие связано с дополнительными кнопками, mouseData по идее, также должна возвращать различные значения - какая именно дополнительная кнопка нажималась (но повторюсь, проверить не могу, нет дополнительных кнопок). В остальных случаях mouseData=0.
Либо можно попробовать определять состояние по значениям виртуальных клавиш с помощью GetAsyncKeyState.

Попробуйте добавить в объявления:
Visual Basic
1
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
а строку вывода в моей программе сделать такой:
Visual Basic
1
2
3
4
Form1.List1.AddItem "wParam:" & Hex(wParam) _
" mouseData:" & (lParam.mouseData) _
& " ДК1:" & CBool(GetAsyncKeyState(&H5)) _
& " ДК2:" & CBool(GetAsyncKeyState(&H6))
Понажимайте боковые кнопки и выясните, что выводится. Это и используйте затем в конструкции If.
1
1 / 1 / 0
Регистрация: 19.10.2012
Сообщений: 13
26.10.2012, 17:27  [ТС]
да это вам спасибо что откликнулись) и посодеиствовали в таком не лёгком на МОЙ взгляд вопросе)
вопрос решён, тема закрыта!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.10.2012, 17:27
Помогаю со студенческими работами здесь

Как сделать эмуляцию нажатия кнопок мыши в игре?
Как сделать эмуляцию нажатия кнопок мыши в игре? игра AtomFishing 2 нужно чтобы эмулировались нажатия двух кнопок G H до определенного...

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

Нажатия кнопок мыши
коды кнопок мыши 1, 2, 4.....но не работают у меня. Не знаю что делать Private Sub TextBox1_KeyDown(ByVal KeyCode As...

Отлов нажатия кнопок мыши
С помощью какого прерывания можно узнать когда на жата какая-либо клавиша мыши. Зарание спасибо за помощь.

Обработчик событий нажатия кнопок мыши внутри цикла
Товарищи, подскажите. Уже весь мозг сломал. Проблема в следующем: я использую модуль graphABC, который с помощью цикла (for, repeat,...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru