Ayuda Detectar MouseHand fuera del form

Iniciado por Cripting, 13 Diciembre 2016, 22:21 PM

0 Miembros y 1 Visitante están viendo este tema.

Cripting

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:
If System.Windows.Forms.Cursor.Current = Cursors.Hand Then
            label1.text = "Se ah detectado el mouse hand"
            timer3.start()
        End If

Eleкtro

#1
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:




Código (vbnet) [Seleccionar]
<SuppressUnmanagedCodeSecurity>
<DllImport("User32.dll", SetLastError:=True)>
Public Shared Function GetCursorInfo(ByRef refCursorInfo As CursorInfo) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function

<StructLayout(LayoutKind.Sequential)>
Public Structure CursorInfo
   Public Size As Integer
   Public Flags As CursorInfoFlags
   Public CursorHandle As IntPtr
   Public ScreenPosition As Point ' no nos resulta necesario usar un Win32 NativePoint.
End Structure

Public Enum CursorInfoFlags As Integer
   Hidden = &H0
   Showing = &H1
   Suppressed = &H2
End Enum


Ejemplo de uso:
Código (vbnet) [Seleccionar]
Dim cursorInfo As New CursorInfo()
cursorInfo.Size = Marshal.SizeOf(GetType(CursorInfo))
GetCursorInfo(cursorInfo)

If (cursorInfo.Flags = CursorInfoFlags.Showing) Then
   Dim isHandCursor As Boolean = (cursorInfo.CursorHandle = New IntPtr(65567))

   If (isHandCursor) Then
       ' Hand cursor detected...
   End If
End If


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

¡Saludos!








Cripting

Cita de: 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:




Código (vbnet) [Seleccionar]
<SuppressUnmanagedCodeSecurity>
<DllImport("User32.dll", SetLastError:=True)>
Public Shared Function GetCursorInfo(ByRef refCursorInfo As CursorInfo) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function

<StructLayout(LayoutKind.Sequential)>
Public Structure CursorInfo
    Public Size As Integer
    Public Flags As CursorInfoFlags
    Public CursorHandle As IntPtr
    Public ScreenPosition As Point ' no nos resulta necesario usar un Win32 NativePoint.
End Structure

Public Enum CursorInfoFlags As Integer
    Hidden = &H0
    Showing = &H1
    Suppressed = &H2
End Enum


Ejemplo de uso:
Código (vbnet) [Seleccionar]
Dim cursorInfo As New CursorInfo()
cursorInfo.Size = Marshal.SizeOf(GetType(CursorInfo))
GetCursorInfo(cursorInfo)

If (cursorInfo.Flags = CursorInfoFlags.Showing) Then
    Dim isHandCursor As Boolean = (cursorInfo.CursorHandle = New IntPtr(65567))

    If (isHandCursor) Then
        ' Hand cursor detected...
    End If
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  ;-)