Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват событий мыши 
:(
    Опции темы
SergeiEx
  Дата 2.9.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день! Хочу написать программу по управлению громкостью с помощью мыши. Задача заключается в том, что нужно увеличить громкость, если прокрутить колесо мыши вверх и убавить, если прокрутить вниз, и все это при условии что в этот момент нажата правая кнопка мыши, т.е. зажал кнопку и регулируешь громкость. Все вроде сделал, но осталась одна загвоздка, при отжатии правой кнопки появляется контекстное меню. Так вот, можно ли программно перехватить правую кнопку мыши при ее нажатии и в случае если колесо мыши не двигалось все же программно нажать правую кнопку мыши. Если быть яснее, то при нажатии и отпускании программа должна перехватить событие, а потом отослать его активному окну, как обычный клик, а если при нажатии правой кнопки прокрутить колесо, то программа должна перехватить событие, отрегулировать громкость и активному окну ничего не передавать.
Вроде все объяснил.
Заранее спасибо.

PM MAIL   Вверх
diadiavova
Дата 2.9.2008, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Описывать долго и непонятно, поэтому я тебе примерчик высылаю. Здесь просто форма, внизу прогрессбар. Если прокрутить колесо вперёд при нажатой правой кнопке, на прогрессбаре значение увеличивается, назад - уменьшается. Всё как ты описал, только вместо громкости - прогрессбар. Пример простой, так что разберёшься. Высылаю полностью папку с проектом.

Присоединённый файл ( Кол-во скачиваний: 39 )
Присоединённый файл  WindowsApplication2.zip 66,02 Kb


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
SergeiEx
Дата 2.9.2008, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за ответ, но это немного не то. Наверное я не совсем понятно высказался. Дело в том что мне нужно чтоб программа работала с любого места в любой посторонней программе, а данный пример работает только со своим окном.
В интернете нашел функцию "SetWindowsHookEx", но как ее запустить я так и не понял. Может кто подскажет?!?
PM MAIL   Вверх
diadiavova
Дата 2.9.2008, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Вот здесь пример использования этой функции. Правда на C#.
А вообще по-моему в .Net Framework 3 пространство System.Windows.Automation как раз такими штуками занимается, но я в нём ещё не разбирался.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
SergeiEx
Дата 2.9.2008, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



За ссылку спасибо. Немного разъяснилось, оказывается функцию я использовал правильно, вот только не знал я, что ГЛОБАЛЬНЫЕ ловушки с программы (exe файла) не работают их нужно с DLL вытягивать, который нужно сначала написать, а VB .Net DLL'ки не пишет  smile 
PM MAIL   Вверх
diadiavova
Дата 2.9.2008, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5820
Регистрация: 14.8.2008
Где: В Коньфпольте

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



На счёт DLL'ок не понял, а функции импортируются так
Код

   Public Delegate Function HookProc(ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
    Public Declare Auto Function SetWindowsHookEx Lib "User32.dll" (ByVal idHook As Integer, ByVal lpfn As HookProc, _
 ByVal hInstance As IntPtr, ByVal threadId As Integer) As Integer


после этого вызывай её и пользуйся на здоровье.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
SergeiEx
Дата 3.9.2008, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну это я понял, именно так я их и импортиролвал но она не работала, дело в том, что  
Цитата

Global hooks are not supported in the .NET Framework
Except for the WH_KEYBOARD_LL low-level hook and the WH_MOUSE_LL low-level hook, you cannot implement global hooks in the Microsoft .NET Framework. To install a global hook, a hook must have a native DLL export to inject itself in another process that requires a valid, consistent function to call into. This behavior requires a DLL export. The .NET Framework does not support DLL exports. Managed code has no concept of a consistent value for a function pointer because these function pointers are proxies that are built dynamically.

Low-level hook procedures are called on the thread that installed the hook. Low-level hooks do not require that the hook procedure be implemented in a DLL.
 т.е. глобальные ловушки не поддерживаются в .NET Framework, только low-level, но меня они не устраивают. Как я понял из далее следующего текста, использовать их можно, только требуется DLL.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1200 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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