于是我改用SetCursorPos(x,y)来模拟鼠标移动,但其实际效果是x值有效,Y值始终为0,也就是鼠标只能在屏幕顶作水平移动,这太奇怪了,我搜索了许多关于两函数的使用的贴子,均未发现有类似问题。请高手指点,到底是什么原因,谢谢!
11 个解决方案
#1
帮顶~
#2
没遇上过,按楼主的说法试验,一切正常
Public Class Form1
Private Declare Function SetCursorPos Lib "User32" (ByVal x As Integer, ByVal y As Integer) As Boolean
Private intX As Integer = 0
Private intY As Integer = 0
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SetCursorPos(100, 100)
Timer1.Start()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
intY += 10
intX += 10
SetCursorPos(intX, intY)
End Sub
End Class
#3
我将你的程序粘贴后运行,同样存在上面的问题,真搞不懂!我用的是VB2008,你用的什么?难道是VB2008的Bug吗?
#4
真库恼!我现在正在编利用蓝牙PPC手机作蓝牙鼠标的应用程序,万事具备,只欠东风!就是这个问题困扰着我,真希望哪位DX指点一下.
#5
果然与VB版本有关,VB2005,VB2008均存在上述问题,可VB6就没问题,我只好用VB6生成一个DLL文件,在VB2008中进行引用,问题才得以解决,不过在没装VB6软件的电脑上,需要将DLL文件打包安装后,才能使用.请问你们用什么版本,有问题吗?
#6
我也是这样,我用的是vb2005。
Declare Function SetCursorPos Lib "user32" Alias "SetCursorPos" (ByVal x As Long, ByVal y As Long) As Long
SetCursorPos(500, 111)
生成时也不会报错,x轴可以移动到500,但是y轴始终就是0。(用GetCursorPos测试过)
至于楼主说的mouse_event(MOUSEEVENTF_MOVE, 100, 200, 0, 0),这个我试过,x轴动不了,y轴可动,不过我用GetCursorPos测试时,y轴才到5,我的分辨率1024*768,个人感觉mouse_event的移动因该不是按分辨率来的。
Declare Function SetCursorPos Lib "user32" Alias "SetCursorPos" (ByVal x As Long, ByVal y As Long) As Long
SetCursorPos(500, 111)
生成时也不会报错,x轴可以移动到500,但是y轴始终就是0。(用GetCursorPos测试过)
至于楼主说的mouse_event(MOUSEEVENTF_MOVE, 100, 200, 0, 0),这个我试过,x轴动不了,y轴可动,不过我用GetCursorPos测试时,y轴才到5,我的分辨率1024*768,个人感觉mouse_event的移动因该不是按分辨率来的。
#7
楼主,我用的就是vb2005,可是的确没有这个问题。。怀疑是其他原因造成的。
#8
请问下,还有其他的解决方案吗?
#9
vb2005解决了,原来问题出现在这边。
Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Declare Function SetCursorPos Lib "user32" (ByVal x As Integer, ByVal y As Integer) As Boolean
看来vb爱好者乐园里面的api手册有点问题。多谢cauhorse的指点。
Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Declare Function SetCursorPos Lib "user32" (ByVal x As Integer, ByVal y As Integer) As Boolean
看来vb爱好者乐园里面的api手册有点问题。多谢cauhorse的指点。
#10
其实实现Mouse move可不用API,.net里有现成的函数:Cursor.Position=P 和p=Cursor.Position分别表示设置mouse位置和获取mouse位置,p as point (p.x,p.y)
#11
真是Long 和 integer的差别引起的,将Long 全部换成integer,问题得以解决,同样适用mouse_event函数,可能是32位和64位的原因吧,以后在引用API函数时可能均存在此问题,估计将Long 全部换成integer就成。Public Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
也存在类似问题。
也存在类似问题。
#1
帮顶~
#2
没遇上过,按楼主的说法试验,一切正常
Public Class Form1
Private Declare Function SetCursorPos Lib "User32" (ByVal x As Integer, ByVal y As Integer) As Boolean
Private intX As Integer = 0
Private intY As Integer = 0
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SetCursorPos(100, 100)
Timer1.Start()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
intY += 10
intX += 10
SetCursorPos(intX, intY)
End Sub
End Class
#3
我将你的程序粘贴后运行,同样存在上面的问题,真搞不懂!我用的是VB2008,你用的什么?难道是VB2008的Bug吗?
#4
真库恼!我现在正在编利用蓝牙PPC手机作蓝牙鼠标的应用程序,万事具备,只欠东风!就是这个问题困扰着我,真希望哪位DX指点一下.
#5
果然与VB版本有关,VB2005,VB2008均存在上述问题,可VB6就没问题,我只好用VB6生成一个DLL文件,在VB2008中进行引用,问题才得以解决,不过在没装VB6软件的电脑上,需要将DLL文件打包安装后,才能使用.请问你们用什么版本,有问题吗?
#6
我也是这样,我用的是vb2005。
Declare Function SetCursorPos Lib "user32" Alias "SetCursorPos" (ByVal x As Long, ByVal y As Long) As Long
SetCursorPos(500, 111)
生成时也不会报错,x轴可以移动到500,但是y轴始终就是0。(用GetCursorPos测试过)
至于楼主说的mouse_event(MOUSEEVENTF_MOVE, 100, 200, 0, 0),这个我试过,x轴动不了,y轴可动,不过我用GetCursorPos测试时,y轴才到5,我的分辨率1024*768,个人感觉mouse_event的移动因该不是按分辨率来的。
Declare Function SetCursorPos Lib "user32" Alias "SetCursorPos" (ByVal x As Long, ByVal y As Long) As Long
SetCursorPos(500, 111)
生成时也不会报错,x轴可以移动到500,但是y轴始终就是0。(用GetCursorPos测试过)
至于楼主说的mouse_event(MOUSEEVENTF_MOVE, 100, 200, 0, 0),这个我试过,x轴动不了,y轴可动,不过我用GetCursorPos测试时,y轴才到5,我的分辨率1024*768,个人感觉mouse_event的移动因该不是按分辨率来的。
#7
楼主,我用的就是vb2005,可是的确没有这个问题。。怀疑是其他原因造成的。
#8
请问下,还有其他的解决方案吗?
#9
vb2005解决了,原来问题出现在这边。
Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Declare Function SetCursorPos Lib "user32" (ByVal x As Integer, ByVal y As Integer) As Boolean
看来vb爱好者乐园里面的api手册有点问题。多谢cauhorse的指点。
Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Declare Function SetCursorPos Lib "user32" (ByVal x As Integer, ByVal y As Integer) As Boolean
看来vb爱好者乐园里面的api手册有点问题。多谢cauhorse的指点。
#10
其实实现Mouse move可不用API,.net里有现成的函数:Cursor.Position=P 和p=Cursor.Position分别表示设置mouse位置和获取mouse位置,p as point (p.x,p.y)
#11
真是Long 和 integer的差别引起的,将Long 全部换成integer,问题得以解决,同样适用mouse_event函数,可能是32位和64位的原因吧,以后在引用API函数时可能均存在此问题,估计将Long 全部换成integer就成。Public Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
也存在类似问题。
也存在类似问题。