3

MSDN フォーラムで、32 ビットと 64 ビットの整数に問題があるスレッドを見ました。それが私の問題かどうかはわかりませんが、このコードは機能するはずなので、少し混乱しています。

Windows 7 64 ビットで VB6 を互換モード (XP SP2) で実行しています。

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 ビットの数値です。これは 32 ビットの数値であるため、Long を使用する必要があります。

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 に答える