2012-07-02 4 views
3

J'ai vu un thread sur un MSDN forum où il y avait un problème avec les entiers 32 bits vs. 64 bits. Je ne suis pas sûr si c'est mon problème, mais il semble que ce code devrait fonctionner, donc je suis un peu confus. Je cours VB6 en mode de compatibilité (XP SP2) dans Windows 7 64-bit.GetCursorPos ne renvoie que la valeur x

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 

En Timer1_Timer() ...

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

Cette boîte de message indique la valeur correcte pour la coordonnée x de la souris, mais il montre "0" pour y, peu importe où la souris est sur l'écran . En outre, GetCursorPos() renvoie 1.

Répondre

7

Dans VB6, le type de données Entier est un nombre de 16 bits. Vous devez utiliser Long car c'est un nombre de 32 bits.

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 

ou de l'utilisation:

Declare Function GetCursorPos Lib "user32.dll" (lpPoint As POINT_TYPE) As Long 
+0

de Whoops. Je pensais que l'entier aurait été 32 bits et long 64 bits. Intéressant. Merci! – TimFoolery

+0

@Michael report de l'ère de la programmation 16 bits –

4

Si vous êtes en cours d'exécution dans VB6 votre déclaration de POINTAPI a besoin d'utiliser un long pour votre déclaration de points:

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

En ce qui concerne le retour 1, cela signifie que vous avez réussi:

Valeur de retour Long - NonZero en cas de succès, zéro en cas d'échec. Ensembles getLastError

"à partir de Visual Basic Guide du programmeur à l'API Win32"

+1

+ 1 pour la consultation [Guide de Visual Basic programmeur livre de Daniel Appleman à l'API Win32] (http://www.amazon.co.uk/Appleman-Visual-Basic-Programmers-CD -Rom/dp/0672315904) – MarkJ

Questions connexes