Перехват Mouse_Down и Mouse_Up

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Перехват Mouse_Down и Mouse_Up

Сообщение Rody66 » 31.01.2011 (Пн) 18:24

Здравствуйте! Не знаю, как перехватить 2 отдельных события, которые происходят не обязательно на форме, а вообще в любом месте, любой точке Windows. Так же, имеется рабочий вариант перехвата просто клика мыши, но это не то, что надо.
Код: Выделить всё
If GetAsyncKeyState(vbKeyLButton) < 0 Then MsgBox "Нажата левая кнопка мыши"
. То есть 1 событие Left Mouse_Down (vbKeyLButton) мне нужно разделить на 2 разных события.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Хакер » 31.01.2011 (Пн) 18:26

Сначала опиши, зачем это нужно. В соответствии с задачей и обстоятельствами, будем выбирать решение.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Rody66 » 31.01.2011 (Пн) 19:31

Хакер, Вы как всегда со сверх оперативной реакцией, спасибо. А нужно это для известной задачи - запись макроса для автокликера. Автокликер есть, а вот возможномти записи макроса нет. Ну то есть, она как бы есть, но ограничена кликом. Вообще, кстати, мне бы для начала хоть справится с проблемой чуть проще: Просто однократно перехватывать маусдавн, то есть к примеру есть таймер с интервалом 1, в нем код
Код: Выделить всё
If GetAsyncKeyState(vbKeyLButton) < 0 Then Me.Caption = Me.Caption & 1

В итоге при одиночном клике он насчитывает в районе 10-20 кликов, то есть 10-20 однушек. Я уже не говорю о том, что будет, если кнопку мыши зажать.. Нужно, чтобы считывался всего 1 клик, то есть, по сути, нужно считывать только событие MouseDown. И увеличение интервала - не решение.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Хакер » 31.01.2011 (Пн) 19:59

Rody66 писал(а): И увеличение интервала - не решение.

С таймером — это вообще не решение.
Приложение, в котором осуществляются клики, — своё или чужое?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Rody66 » 31.01.2011 (Пн) 20:05

Приложение, в котором осуществляются клики, — своё или чужое?

Определенного приложения вообще нет, кликер для общественности, то есть для любых приложений.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Хакер » 31.01.2011 (Пн) 20:14

—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Rody66 » 31.01.2011 (Пн) 20:16

Что-то я такое слышал, что хуки в вин 7 не проходят с включенным UAC

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Хакер » 31.01.2011 (Пн) 20:23

Без понятия, я не использовал и не интересовался операционными системами старше XP.
Если всё так плохо, есть путь в обход: создать прозрачное окно и накрыть им весь экран. Ловить нажатия на нём, отмечать их, и пропускать ниже. Ещё, к тому же, нужно кучу всякой работы делать вроде эмуляции хит-тестов и показ разных курсоров.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Rody66 » 31.01.2011 (Пн) 20:34

есть путь в обход: создать прозрачное окно и накрыть им весь экран.

Кстати, отличный вариант, сделать форму прозрачной, на весь экран, при нажатии фиксировать, сворачивать форму, подавать клик по только что указанной точке и снова разворачивать форму, возвращаясь в исходное положение. Буду проверять..
ЗЫ У вас, на Вбстристс наверно около двух лет назад было огромнейшее количество полезных исходников, в том числе и исходник по манипуляциям с прозрачностью, не подскажите где эти архивы можно найти?

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Joo » 31.01.2011 (Пн) 20:41

Rody66 писал(а):хуки в вин 7 не проходят с включенным UAC

Если приложение пользователь запускает зная о её деятельности, то почему бы просто не попросить админских прав при запуске, тогда UAC не проблема?
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Rody66 » 31.01.2011 (Пн) 20:48

то почему бы просто не попросить админских прав при запуске, тогда UAC не проблема?

только что читал тут топик о перехвате команды выхода блокнота, и не дать ему закрыться. Вот как раз там и было написано, что если даже запустить от админа, то хук работать не будет, пока включен уац

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Хакер » 31.01.2011 (Пн) 21:23

Rody66 писал(а):сделать форму прозрачной,

Не форму, а окно.

Rody66 писал(а):сворачивать форму

Не форму, а окно. Сворачивать нет никакого смысла.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Rody66 » 31.01.2011 (Пн) 21:49

Не форму, а окно. Сворачивать нет никакого смысла.

Верно, сворачивать нет необходимости, только что проверил, все прекрасно работает, осталось только события начать фиксировать.. Что именно Вы называете окном?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Хакер » 31.01.2011 (Пн) 21:56

Я называю окнами окна. Понятно?

Способ плохой, потому что как только нижележащее приложение сделает Capture, ты ничего не получишь, пока оно не вызовет ReleaseCapture.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Rody66 » 31.01.2011 (Пн) 22:04

Верно, сворачивать нет необходимости, только что проверил, все прекрасно работает

Ошибся, не прекрасно работает. Работает только с хайдом формы, клик, а потом снова шоу.
Я называю окнами окна.

Перефразирую - объясните неучу в чем разница между окном и формой?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Хакер » 31.01.2011 (Пн) 23:21

Rody66 писал(а):Ошибся, не прекрасно работает. Работает только с хайдом формы, клик, а потом снова шоу.

Значит ты клик делаешь неправильным методом. Каким-нибудь mouse_event, даже к бабке не ходи.

Rody66 писал(а):Перефразирую - объясните неучу в чем разница между окном и формой?

Форма — это класс.
Окно — это экземпляр класса.

Форма — это описание того, каким нужно создать одно или несколько окон.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Rody66 » 31.01.2011 (Пн) 23:46

Значит ты клик делаешь неправильным методом. Каким-нибудь mouse_event,

Верно, а как вы посоветуете?
Форма — это класс.
Окно — это экземпляр класса.

Форма — это описание того, каким нужно создать одно или несколько окон.

Хм.. А в чем разница между созданием формы и созданием окна. И каким образом создастся окно, а каким форма?

Благодарю Вас за терпение.. Я понимаю, что Вам мягко сказать не очень интересно все это мне объяснять и Вы в итоге выступаете в роли безвозмездного учителя-благодетеля.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Хакер » 31.01.2011 (Пн) 23:58

Rody66 писал(а):Верно, а как вы посоветуете?

Ну значит ты и ловишь не так.
Поймал сообщение и переслал сообщение. Так.

Rody66 писал(а):Хм.. А в чем разница между созданием формы и созданием окна

Создание формы невозможно в принципе. Только создание экземпляра формы (то есть окна).

И каким образом создастся окно, а каким форма?

Экземпляр формы создаётся так же, как и экземпляр любого другого класса — с помощью New. Впрочем, для каждой формы в проекте автоматически объявляется глобальная одномённая DAN-ссылка Dim Form1 As New Form1, что является причиной огромного числа заблуждений насчёт форм.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Rody66 » 01.02.2011 (Вт) 0:34

Поймал сообщение и переслал сообщение. Так.

Вы говорите загадкой.. Нельзя описать точный метод?
Экземпляр формы создаётся так же, как и экземпляр любого другого класса — с помощью New. Впрочем, для каждой формы в проекте автоматически объявляется глобальная одномённая DAN-ссылка Dim Form1 As New Form1, что является причиной огромного числа заблуждений насчёт форм.

Спасибо. Из этого следует, что обозначение "Добавить форму" на самом деле означает Добавить окно, то есть, на сколько я понял, выражение "New Form" - это изначально не совсем верная формулировка.

И еще один момент.
Создание формы невозможно в принципе.

Так если оно невозможно, для чего же тогда было вводить сам термин "Форма" ("Form")?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Хакер » 01.02.2011 (Вт) 0:37

Rody66 писал(а):Вы говорите загадкой.. Нельзя описать точный метод?

Я говорю нормально. Иди и ищи информацию и читай об оконных сообщениях и очереди сообщений потока.

Rody66 писал(а):Из этого следует, что обозначение "Добавить форму" на самом деле означает Добавить окно

Где находится такое обозначение? Вне контекста ничего не могу сказать.

Rody66 писал(а):на сколько я понял, выражение "New Form" - это изначально не совсем верная формулировка.

Если речь идёт о пункте в меню Project, то там всё совершенно верно.

Rody66 писал(а):Так если оно невозможно, для чего же тогда было вводить сам термин "Форма" ("Form")?

Если тень сама по себе не существует, а только отбрасывается от чего-то, зачем было вообще вводить термин «тень»?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Хакер » 01.02.2011 (Вт) 0:47

На, изучай пример (а именно Sub Main) и делай выводы, что есть форма, а что есть экземпляр формы.

form_instances.zip
(2.05 Кб) Скачиваний: 65
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Rody66 » 01.02.2011 (Вт) 1:06

Если речь идёт о пункте в меню Project, то там всё совершенно верно.

Это имеется в виду при непосредственно создании проекта, или же даже когда в процессе редактирования проекта именно таким образом добавляется форма?
Если тень сама по себе не существует, а только отбрасывается от чего-то, зачем было вообще вводить термин «тень»?

Благодарю за столь схожую аналогию.
На, изучай пример (а именно Sub Main) и делай выводы, что есть форма, а что есть экземпляр формы.

Большое спасибо! Весьма интересно. Значит получается, что окно создается только так, как Вы показали в примере, т.е.
Код: Выделить всё
    Dim r As Form1
    Set r = New Form1
    r.Show

или же есть какие то еще варианты создания именно экземпляров?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Хакер » 01.02.2011 (Вт) 1:16

Rody66 писал(а):Это имеется в виду при непосредственно создании проекта, или же даже когда в процессе редактирования проекта именно таким образом добавляется форма?

В любом случае при работе над проектом добавляются формы и классы, а не их экземпляры. Экземпляры порождаются только при работе программ.

Rody66 писал(а):или же есть какие то еще варианты создания именно экземпляров?

Экземляры классов и форм (форма — частный случай класса) создаются только таким образом (при помощи New).

Если в проект добавлена форма с именем Form1, параллельно создаётся переменная с именем Form1.

Переменная может быть объявлена как у меня:
Код: Выделить всё
Dim vvvvv as ccccc

а может быть и так:
Код: Выделить всё
Dim vvvv As New cccccc


В последнем случае любое обращение к переменной становится экивалентно обращению, которому предшествуют такой код:
Код: Выделить всё
If vvvvv Is Nothing Then Set vvvvv = New cccccc


Такие переменные-ссылки я называю DAN-ссылками (Declared As-New)

Для каждой имеющейся в проекте формы (но не для каждого класса) создаётся одноимённая DAN-ссылка, и именно автоматическое наличие такой ссылки даёт возможность написать Form1.Show без использования доп. переменных. Однако такой подход многих вводит в заблуждение и не позволяет понять истинный смысл происходящего.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Rody66 » 01.02.2011 (Вт) 1:22

Спасибо, теперь вроде как хоть различать я из научился..
И пока последний вопрос - В чем практическая разница между экземпляром формы и собственно самой формой?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Хакер » 01.02.2011 (Вт) 1:28

Rody66 писал(а):И пока последний вопрос - В чем практическая разница между экземпляром формы и собственно самой формой?

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

Иди и найди азы ООП и прочитай их, поняв разницу между классом и объектом ( равно экземпляром класса). После того, как ты это сделаешь, прими, что форма является классом, а экземпляр формы — экземляром класса.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Перехват Mouse_Down и Mouse_Up

Сообщение Rody66 » 01.02.2011 (Вт) 1:35

Иди и найди азы ООП и прочитай их, поняв разницу между классом и объектом ( равно экземпляром класса). После того, как ты это сделаешь, прими, что форма является классом, а экземпляр формы — экземляром класса.

Вы, похоже, очень большой любитель послать куда нибудь "искать" или что либо "читать". Куда пойти, где найти, что искать, не ясно.
Из этого вопроса следует, что ничего различать ты не научился.

Я у Вас просто спросил отстает ли по каким либо параметрам экземпляр формы от формы. Я не помню, чтобы Вы мне это прямым текстом говорили. Тогда откуда же мне это знать?

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Перехват Mouse_Down и Mouse_Up

Сообщение FireFenix » 01.02.2011 (Вт) 1:50

Rody66 писал(а):
Иди и найди азы ООП и прочитай их, поняв разницу между классом и объектом ( равно экземпляром класса). После того, как ты это сделаешь, прими, что форма является классом, а экземпляр формы — экземляром класса.

Вы, похоже, очень большой любитель послать куда нибудь "искать" или что либо "читать". Куда пойти, где найти, что искать, не ясно

Очевидно, что купить/найти в библиотеке/найти у друзей/найти в инете учебник по азам программирования и почитать. В частности про ООП

http://www.google.ru
http://ru.wikipedia.org

Rody66 писал(а):
Из этого вопроса следует, что ничего различать ты не научился.

Я у Вас просто спросил отстает ли по каким либо параметрам экземпляр формы от формы. Я не помню, чтобы Вы мне это прямым текстом говорили. Тогда откуда же мне это знать?

Fail

Класс
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 82

    TopList