Public Shared WithEvents mhook As New WindowsHook.MouseHook
You cannot implement global hooks in Microsoft .NET Framework. To install a global hook, a hook must have a native DLL export to insert 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.
А у тебя dll НЕ нативная. Тем не менее у тебя эти хуки работают.Где то нестыковочка, не находишь?To install a global hook, a hook must have a native DLL export to insert itself in another process
...
The .NET Framework does not support DLL exports.
Нестыковочка только в твоем непонимании мира программирвоания.А у тебя dll НЕ нативная
ANDLL писал(а):Public Shared WithEvents mhook As New WindowsHook.MouseHook замени на сначала объявление переменной, а потом в try-catch создавай объект.
ANDLL писал(а):Если не поможет - не объявляй статический объект, просто создавай и через reflection плюсуся к событию
ANDLL, это ты к чему??ANDLL писал(а):Nord777 писал(а):А у тебя dll НЕ нативная
Нестыковочка только в твоем непонимании мира программирвоания.
У него нативная dll, нистуковка в том что ты почемуто называет нативные dll не таковыми...А у тебя dll НЕ нативная. Тем не менее у тебя эти хуки работают.Где то нестыковочка, не находишь?
А ты проект смотрел?ANDLL писал(а):У него нативная dll, нистуковка в том что ты почемуто называет нативные dll не таковыми...
Nord777 писал(а):viter.alex там дел на три минуты, ты уже пол дня решаешь эту "проблему"
во вложении - без всяких dll
ANDLL писал(а):Ну хотя бы через CreateObject.
У Type есть метод GetEvent который возвращает Event. У него есть метод AddEventHandler который угадай что делает
Попробуй запустить не из под студии.Наконец-то я смог попробовать. Но не работает.
С того, что работаетС чего ты взял, что работает?
Через CreateObject если это COM-объект.Как создать объект?
Nord777 писал(а):Попробуй запустить не из под студии.
Скорее всего автор библы где-то накосячил. У меня в каком-то из проектов хуки прекрасно работают и такой фигни не было замечено.Действительно. Ничего не скажешь, очень удобно в отладке
Удачи. Она тебе понадобитсяТеперь всё-таки попробую разобраться с созданием объекта
Помниться я как-то умудрился сделать, что хуки приложения работали в Design-Time , вот это и правда было очень "удобно"...Nord777 писал(а):Скорее всего автор библы где-то накосячил. У меня в каком-то из проектов хуки прекрасно работают и такой фигни не было замечено.Действительно. Ничего не скажешь, очень удобно в отладке
MIT писал(а):Помниться я как-то умудрился сделать, что хуки приложения работали в Design-Time , вот это и правда было очень "удобно"...Nord777 писал(а):Скорее всего автор библы где-то накосячил. У меня в каком-то из проектов хуки прекрасно работают и такой фигни не было замечено.Действительно. Ничего не скажешь, очень удобно в отладке
MIT писал(а):Это не прикол, это принятая на некоторых форумах манера написания оффтопа, текста, к теме особо не относящегося. Какбэ невидимый пост, который можно и не читать.
Денис писал(а):[spoiler]Где там наш топик про внесение новых тегов в форумы?[/spoiler]
Подробнее о явлении спойлера в кино. И там же о применении в разметке.
Imports System
Imports System.Reflection
Public Class Form1
Private Shared hooklib As [Assembly]
Private Shared mhook As Object
Private Shared handlerType As Type
Private Shared LibPath As String = "c:\Мои документы\Visual Studio 2008\Projects\Source Code and Demo\WindowsHookDemo\WindowsHookDemo\bin\Debug\WindowsHookLib.dll"
Private Shared d As [Delegate]
Dim eInfoMClick As EventInfo
Dim mInfoInstall As MethodInfo
Delegate Sub MouseHookClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
'Загрузка библиотеки
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
hooklib = [Assembly].LoadFile(LibPath)
Catch ex As Exception
MsgBox(String.Format("Не удалось загрузить библиотеку {0}.", LibPath), MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, Me.Text)
Exit Sub
End Try
mhook = hooklib.CreateInstance("WindowsHook.MouseHook")
Debug.Print("Events:")
Debug.Indent()
For Each ei As EventInfo In mhook.GetType.GetEvents
Debug.Print(ei.Name)
Next
Debug.Unindent()
Debug.Print("Methods:")
Debug.Indent()
For Each mi As MethodInfo In mhook.GetType.GetMethods
Debug.Print(mi.Name)
Next
Debug.Unindent()
End Sub
'Кнопка, устанавливающая хук
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Try
mhook.GetType.GetMethod("InstallHook").Invoke(mhook, Nothing)
Me.Text = ""
Catch ex As Exception
End Try
End Sub
'Кнопка, удаляющая хук
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Try
mhook.GetType.GetMethod("UninstallHook").Invoke(mhook, New Object())
Catch ex As Exception
End Try
End Sub
'По идее, это обработчик одниочного клика мышью
Private Sub MouseSingleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Select Case e.Button
Case Windows.Forms.MouseButtons.Left
Me.Text += 1
End Select
End Sub
End Class
viter.alex писал(а):А попутно вопрос, что означают квадратные скобки? Не первый раз встречаю
Imports System
Imports System.Reflection
Public Class Form1
Private Shared hooklib As [Assembly]
Private Shared mhook As Object
Private Shared handlerType As Type
Private Shared LibPath As String = "c:\Мои документы\Visual Studio 2008\Projects\Source Code and Demo\WindowsHookDemo\WindowsHookDemo\bin\Debug\WindowsHookLib.dll"
'Загрузка библиотеки
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
hooklib = [Assembly].LoadFile(LibPath) 'Загружаем библиотеку
mhook = hooklib.CreateInstance("WindowsHook.MouseHook") 'Создаём экземпляр объекта
'Добавляем обработчик события на одинарный клик
mhook.GetType.GetEvent("MouseClick").AddEventHandler(mhook, New MouseEventHandler(AddressOf MouseSingleClick))
'Добавляем обработчик события на двойной клик
mhook.GetType.GetEvent("MouseDoubleClick").AddEventHandler(mhook, New MouseEventHandler(AddressOf MouseDblClick))
Catch ex As Exception
MsgBox(String.Format("Не удалось загрузить библиотеку {0}.", LibPath), MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, Me.Text)
Exit Sub
End Try
End Sub
'Кнопка, устанавливающая хук
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Try
mhook.GetType.GetMethod("InstallHook").Invoke(mhook, New Object() {})
Me.Text = "Хук установлен"
Catch ex As Exception
Me.Text = "Хук не удалось установить"
End Try
End Sub
'Кнопка, удаляющая хук
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Try
mhook.GetType.GetMethod("RemoveHook").Invoke(mhook, New Object() {})
Me.Text = "Хук снят"
Catch ex As Exception
Me.Text = "Хук не удалось снять"
End Try
End Sub
'По идее, это обработчик одниочного клика мышью
Private Sub MouseSingleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Select Case e.Button
Case Windows.Forms.MouseButtons.Left
Label1.Text = "Одниарный клик левой"
Case Windows.Forms.MouseButtons.Middle
Label1.Text = "Одниарный клик средней"
Case Windows.Forms.MouseButtons.Right
Label1.Text = "Одниарный клик правой"
End Select
End Sub
Private Sub MouseDblClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Select Case e.Button
Case Windows.Forms.MouseButtons.Left
Label1.Text = "Двойной клик левой"
Case Windows.Forms.MouseButtons.Middle
Label1.Text = "Двойной клик средней"
Case Windows.Forms.MouseButtons.Right
Label1.Text = "Двойной клик правой"
End Select
End Sub
End Class
Да поправит меня знающий, но по-моему, "{}" отвечает за инициализацию создаваемого массива (эквивалентно Dim arr() as object: redim arr(-1) или Dim arr(-1) as object)viter.alex писал(а):Чем отличается строка New Object() от New Object() {}?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 51