3

我在MSDN 论坛上看到一个线程,其中存在 32 位与 64 位整数的问题。我不确定这是否是我的问题,但似乎这段代码应该可以工作,所以我有点困惑。

我在 Windows 7 64 位中以兼容模式 (XP SP2) 运行 VB6。

Type POINTAPI ' This holds the logical cursor information
    x As Integer
    y As Integer
End Type

Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Timer1_Timer()...

Dim mousePos As POINTAPI
Call GetCursorPos(mousePos)
MsgBox mousePos.x & " " & mousePos.y

此消息框显示鼠标 x 坐标的正确值,但无论鼠标在屏幕上的哪个位置,它都显示"0"为。y还有,GetCursorPos()正在回归1

4

2 回答 2

7

在 VB6 中,整数数据类型是 16 位数字。您必须使用 Long 因为这是一个 32 位数字。

Type POINTAPI ' This holds the logical cursor information
  x As Long
  y As Long
End Type

Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

或使用:

Declare Function GetCursorPos Lib "user32.dll" (lpPoint As POINT_TYPE) As Long 
于 2012-07-02T04:20:33.803 回答
4

如果您在 VB6 中运行,您的 POINTAPI 声明需要使用 Long 作为您的点声明:

Type POINTAPI ' This holds the logical cursor information 
    x As Long
    y As Long 
End Type 

就返回 1 而言,这意味着您成功了:

返回值Long - 成功时非零,失败时为零。设置 GetLastError

“从 Visual Basic 程序员指南到 Win32 API”

于 2012-07-02T04:21:39.943 回答