基于 Visual Basic 获取鼠标指针句柄及图像

本代码片段展示了如何在 Visual Basic 环境下获取当前鼠标指针的句柄以及指针图像。该方法适用于所有窗体,并且已经过 Visual Studio 2010 环境测试。

请注意: 以下代码仅供学习交流,请勿用于商业用途。

'  声明 API 函数用于获取鼠标指针句柄
Declare Function GetCursorInfo Lib "user32" (ByRef pci As CURSORINFO) As Boolean

' 声明 API 函数用于获取设备场景
Declare Function GetDC Lib "user32" (ByVal hwnd As IntPtr) As IntPtr

' 声明 API 函数用于释放设备场景
Declare Function ReleaseDC Lib "user32" (ByVal hwnd As IntPtr, ByVal hdc As IntPtr) As Int32

' 声明 API 函数用于绘制图标
Declare Function DrawIconEx Lib "user32" (ByVal hdc As IntPtr, ByVal x As Int32, ByVal y As Int32, ByVal hIcon As IntPtr, ByVal cxWidth As Int32, ByVal cyWidth As Int32, ByVal istepIfAniCur As Int32, ByVal hbrFlickerFreeDraw As IntPtr, ByVal diFlags As Int32) As Boolean

' 定义 CURSORINFO 结构体

Public Structure CURSORINFO
    Public cbSize As Int32
    Public flags As Int32
    Public hCursor As IntPtr
    Public ptScreenPos As POINT
End Structure

' 定义 POINT 结构体

Public Structure POINT
    Public x As Int32
    Public y As Int32
End Structure

' 获取鼠标指针句柄和图像
Public Sub GetCursorInfoExample()
    Dim ci As New CURSORINFO
    ci.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(ci)
    GetCursorInfo(ci)

    ' 获取鼠标指针句柄
    Dim hCursor As IntPtr = ci.hCursor

    ' 获取桌面设备场景
    Dim hdc As IntPtr = GetDC(IntPtr.Zero)

    ' 在指定位置绘制鼠标指针图像
    DrawIconEx(hdc, 10, 10, hCursor, 32, 32, 0, IntPtr.Zero, 0)

    ' 释放设备场景
    ReleaseDC(IntPtr.Zero, hdc)
End Sub

代码说明:

  1. 首先声明了所需的 Windows API 函数,包括 GetCursorInfoGetDCReleaseDCDrawIconEx
  2. 然后定义了 CURSORINFOPOINT 结构体,用于存储鼠标指针信息。
  3. GetCursorInfoExample 函数中,首先初始化 CURSORINFO 结构体,并调用 GetCursorInfo 函数获取当前鼠标指针的信息。
  4. 然后通过 ci.hCursor 获取鼠标指针句柄。
  5. 接着获取桌面设备场景,并使用 DrawIconEx 函数在指定位置绘制鼠标指针图像。
  6. 最后释放设备场景。
rar 文件大小:113.92KB