Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Cripting en 13 Diciembre 2016, 22:21 pm



Título: Ayuda Detectar MouseHand fuera del form
Publicado por: Cripting en 13 Diciembre 2016, 22:21 pm
Bueno en este programa quiero que al que me cambien el cursor al mousehand ( es la manita) fuera de el form me detecte que se ah cambiado esto ya lo eh echo desde C# pero no es lo mismo eh intentado con este codigo:
Código:
 If System.Windows.Forms.Cursor.Current = Cursors.Hand Then
            label1.text = "Se ah detectado el mouse hand"
            timer3.start()
        End If


Título: Re: Ayuda Detectar MouseHand fuera del form
Publicado por: Eleкtro en 14 Diciembre 2016, 01:33 am
Hola. Primero que nada, esto no es Visual Basic, es Visual Basic.NET, las dudas sobre lenguajes de la plataforma .NET debes publicarlas aquí.

La Class System.Windows.Forms.Cursor representa al cursor de la aplicación, no del sistema. Si quieres, muestra el código original en C# e indica lo que no te ves capaz de traducir, para poder ayudarte con eso.

De todas formas, para determinar el tipo de cursor actual del sistema, puedes utilizar la función Win32 GetCursorInfo pasándole por referencia una estructura Win32 CursorInfo, y entonces GetCursorInfo asignará un handle/identificador reservado (inmutable) en el miembro CursorInfo.hCursor, ese handle hace referencia al tipo de cursor del sistema, por ejemplo el handle 65567 equivale al cursor "Hand", la manita como tu dices.

Esto que voy a mostrarte lo he sacado de mi API gratuita ElektroKit, la cual puedes utilizar para multitud de propósitos diferentes:

(http://i.imgur.com/DRKjghj.png) (https://github.com/ElektroStudios/ElektroKit/tree/master/Solution)

  • CursorInfo Structure - ElektroKit (https://github.com/ElektroStudios/ElektroKit/blob/12f1ff734193945286b00b3abf605a1b89fea648/Solution/Elektro.Interop/Win32/Types/CursorInfo.vb)
  • CursorInfoFlags Enum - ElektroKit (https://github.com/ElektroStudios/ElektroKit/blob/12f1ff734193945286b00b3abf605a1b89fea648/Solution/Elektro.Interop/Win32/Enums/CursorInfoFlags.vb)
  • GetCursorInfo Function - ElektroKit (https://github.com/ElektroStudios/ElektroKit/blob/12f1ff734193945286b00b3abf605a1b89fea648/Solution/Elektro.Interop/Win32/NativeMethods/NativeMethods_User32.vb)

Código
  1. <SuppressUnmanagedCodeSecurity>
  2. <DllImport("User32.dll", SetLastError:=True)>
  3. Public Shared Function GetCursorInfo(ByRef refCursorInfo As CursorInfo) As <MarshalAs(UnmanagedType.Bool)> Boolean
  4. End Function
  5.  
  6. <StructLayout(LayoutKind.Sequential)>
  7. Public Structure CursorInfo
  8.    Public Size As Integer
  9.    Public Flags As CursorInfoFlags
  10.    Public CursorHandle As IntPtr
  11.    Public ScreenPosition As Point ' no nos resulta necesario usar un Win32 NativePoint.
  12. End Structure
  13.  
  14. Public Enum CursorInfoFlags As Integer
  15.    Hidden = &H0
  16.    Showing = &H1
  17.    Suppressed = &H2
  18. End Enum

Ejemplo de uso:
Código
  1. Dim cursorInfo As New CursorInfo()
  2. cursorInfo.Size = Marshal.SizeOf(GetType(CursorInfo))
  3. GetCursorInfo(cursorInfo)
  4.  
  5. If (cursorInfo.Flags = CursorInfoFlags.Showing) Then
  6.    Dim isHandCursor As Boolean = (cursorInfo.CursorHandle = New IntPtr(65567))
  7.  
  8.    If (isHandCursor) Then
  9.        ' Hand cursor detected...
  10.    End If
  11. End If

Nota: Lo he testeado en Windows 10 x64, desconozco si el valor 65567 puede ser distinto en otras versiones de Windows.

¡Saludos!


Título: Re: Ayuda Detectar MouseHand fuera del form
Publicado por: Cripting en 14 Diciembre 2016, 02:54 am
Hola. Primero que nada, esto no es Visual Basic, es Visual Basic.NET, las dudas sobre lenguajes de la plataforma .NET debes publicarlas aquí.

La Class System.Windows.Forms.Cursor representa al cursor de la aplicación, no del sistema. Si quieres, muestra el código original en C# e indica lo que no te ves capaz de traducir, para poder ayudarte con eso.

De todas formas, para determinar el tipo de cursor actual del sistema, puedes utilizar la función Win32 GetCursorInfo pasándole por referencia una estructura Win32 CursorInfo, y entonces GetCursorInfo asignará un handle/identificador reservado (inmutable) en el miembro CursorInfo.hCursor, ese handle hace referencia al tipo de cursor del sistema, por ejemplo el handle 65567 equivale al cursor "Hand", la manita como tu dices.

Esto que voy a mostrarte lo he sacado de mi API gratuita ElektroKit, la cual puedes utilizar para multitud de propósitos diferentes:

(http://i.imgur.com/DRKjghj.png) (https://github.com/ElektroStudios/ElektroKit/tree/master/Solution)

  • CursorInfo Structure - ElektroKit (https://github.com/ElektroStudios/ElektroKit/blob/12f1ff734193945286b00b3abf605a1b89fea648/Solution/Elektro.Interop/Win32/Types/CursorInfo.vb)
  • CursorInfoFlags Enum - ElektroKit (https://github.com/ElektroStudios/ElektroKit/blob/12f1ff734193945286b00b3abf605a1b89fea648/Solution/Elektro.Interop/Win32/Enums/CursorInfoFlags.vb)
  • GetCursorInfo Function - ElektroKit (https://github.com/ElektroStudios/ElektroKit/blob/12f1ff734193945286b00b3abf605a1b89fea648/Solution/Elektro.Interop/Win32/NativeMethods/NativeMethods_User32.vb)

Código
  1. <SuppressUnmanagedCodeSecurity>
  2. <DllImport("User32.dll", SetLastError:=True)>
  3. Public Shared Function GetCursorInfo(ByRef refCursorInfo As CursorInfo) As <MarshalAs(UnmanagedType.Bool)> Boolean
  4. End Function
  5.  
  6. <StructLayout(LayoutKind.Sequential)>
  7. Public Structure CursorInfo
  8.    Public Size As Integer
  9.    Public Flags As CursorInfoFlags
  10.    Public CursorHandle As IntPtr
  11.    Public ScreenPosition As Point ' no nos resulta necesario usar un Win32 NativePoint.
  12. End Structure
  13.  
  14. Public Enum CursorInfoFlags As Integer
  15.    Hidden = &H0
  16.    Showing = &H1
  17.    Suppressed = &H2
  18. End Enum

Ejemplo de uso:
Código
  1. Dim cursorInfo As New CursorInfo()
  2. cursorInfo.Size = Marshal.SizeOf(GetType(CursorInfo))
  3. GetCursorInfo(cursorInfo)
  4.  
  5. If (cursorInfo.Flags = CursorInfoFlags.Showing) Then
  6.    Dim isHandCursor As Boolean = (cursorInfo.CursorHandle = New IntPtr(65567))
  7.  
  8.    If (isHandCursor) Then
  9.        ' Hand cursor detected...
  10.    End If
  11. End If

Nota: Lo he testeado en Windows 10 x64, desconozco si el valor 65567 puede ser distinto en otras versiones de Windows.

¡Saludos!
Listo me sirvió mucho de apoyo tu código, lo que mas trabajo me costo fue encontrar el equivalente ami Hand pero ya esta resuelto muchas gracias  ;-)