注册 登录
编程论坛 VFP论坛

vfp怎么获取当前鼠标的坐标

风向2021 发布于 2021-10-25 18:45, 2292 次点击
想请问一下:鼠标 坐标系统中,不管什么分辨率屏幕在水平和垂直方向上均分割成65535×65535个单元。想问一下vfp怎么获取当前鼠标的坐标呢?
12 回复
#2
风向20212021-10-25 18:51
我的目的就是程序完成模拟任务后,恢复鼠标的原始位置
#3
吹水佬2021-10-25 19:42
以前试过VFP的鼠标坐标会受“缩放”的影响而不准确
GetCursorPos
SetCursorPos


[此贴子已经被作者于2021-10-25 19:44编辑过]

#4
nbwww2021-10-25 19:54
函数原型:GetMessagePos(VOID)

    参数:无。

    返回值:返回值给出光标位置的X,y坐标。X坐标在低位整数,y坐标在高位整数。

这个函数可以用吗?
#5
风向20212021-10-26 10:56
回复 4楼 nbwww
在vfp中,怎样写调试代码?
#6
风向20212021-10-26 10:56
回复 3楼 吹水佬
请问在vfp中,怎样写调试代码?
#7
吹水佬2021-10-26 11:20
回复 6楼 风向2021
不是要获取光标坐标吗
Windows API GetCursorPos()
#8
foxfans2021-10-26 14:54
做模拟挂的吧~! 
#9
gs25367856782021-10-26 15:02
朋友你可以试以下的函数
mrow()
mcol()
第一个是行高度,第二个是列宽度

实例:
thisform.text1.Value=MROW('form1',3)
thisform.text2.Value=MCOL('form1',3)

[此贴子已经被作者于2021-10-26 15:14编辑过]

#10
foxfans2021-10-26 15:28
*!* 将代码放在Timer控件,inteval...100看效果.
DECLARE LONG GetCursorPos IN WIN32API STRING @
LOCAL structPos, posX, posY
structPos = REPLICATE(CHR(0), 8)
IF GetCursorPos(@structPos)=1
    posX = CTOBIN(LEFT(structPos,4),"4RS")
    posY = CTOBIN(RIGHT(structPos,4),"4RS")
    ?posX,PosY,posX+PosY*65536 &&这里就是相对于屏幕的当前坐标内部转换值,lParam
ENDIF

[此贴子已经被作者于2021-10-26 15:37编辑过]

#11
fown2021-10-26 16:58
貌似我做过这种外挂的东西
表单一个,TIMER控件一个,LABEL两个
在LOAD中写代码
PUBLIC GetCursorPos
Declare integer GetCursorPos IN win32api string
TIMER的interval 为500
在timer的TIMER事件中写代码

p1=repl(chr(0),8)
GetCursorPos(@p1)
dime num[8]
for i=1 to 8
trans(asc(substr(p1,i,1)),"@0")
num[i]=right(trans(asc(substr(p1,i,1)),"@0"),2)
endfor
x=val("0x"+num[4]+num[3]+num[2]+num[1])
y=val("0x"+num[8]+num[7]+num[6]+num[5])
thisform.label1.Caption=ALLTRIM(STR(X))
thisform.label2.Caption=allt(STR(y))
运行,移动鼠标,就明白了
#12
fown2021-10-26 17:00
只有本站会员才能查看附件,请 登录
#13
风向20212021-10-27 11:05
回复 10楼 foxfans
DECLARE LONG GetCursorPos IN WIN32API STRING @
LOCAL structPos, posX, posY
structPos = REPLICATE(CHR(0), 8)
IF GetCursorPos(@structPos)=1
    posX = CTOBIN(LEFT(structPos,4),"4RS")
    posY = CTOBIN(RIGHT(structPos,4),"4RS")
    ?posX,PosY
    ?INT((posX/1440)*65536),INT((PosY/900)*65536) &&这里就是相对于屏幕的当前坐标内部转换值,lParam
   
ENDIF
 稍改了一下,测试接近需要,感谢!
1