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:
<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:
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!