c# 怎么控制鼠标根据不同分辨率的电脑,找到同一位置

Gavin_W 发布于 2017/01/11 09:46
阅读 648
收藏 0
是这样的,我想用模拟鼠标的方法点击某一位置,但是如果换了电脑屏幕,位置就改变了,所以我想做成相对位置的,先去的分辨率,再根据分辨率决定位置,有没有大神做过这方面的,求解0.0
加载中
0
天体图
天体图
你是指,等比缩放?假如在1024宽度下点击X坐标为100,在1366下不就是100*1366/1024么,高度也是同样的道理,不过可能会有些误差。但是如果点击区域不是特别小,这个误差应该可以忽略,总之要多测试。
0
Ghostab
Ghostab

总感觉楼主是不是把简单需求弄复杂了.. 

屏幕分辨率可以用 Screen.PrimaryScreen.Bounds获得,计算方式楼上已经给了

0
陈阳阳阳
陈阳阳阳

百分比不就得了...

Gavin_W
Gavin_W
我用的是mouse_event来模拟的鼠标,如果用百分比就有小数了,函数就报错了
0
Gavin_W
Gavin_W

引用来自“天体图”的评论

你是指,等比缩放?假如在1024宽度下点击X坐标为100,在1366下不就是100*1366/1024么,高度也是同样的道理,不过可能会有些误差。但是如果点击区域不是特别小,这个误差应该可以忽略,总之要多测试。
System.Drawing.Rectangle rect =System.Windows.Forms.Screen.PrimaryScreen.Bounds;
            //屏幕分辨率
            int w = rect.Width; //宽(像素)
            int h = rect.Height; //高(像素)
            MessageBox.Show(w+"*"+h);            
            int x = 1192;
            int y = 345;
            mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x * 65535 / w, y * 65535 / h, 0, 0);//移动到需要点击的位置
            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_ABSOLUTE, x * 65535 / w, y * 65535 / h, 0, 0);//点击
            mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_ABSOLUTE, x * 65535 / w, y * 65535 / h, 0, 0);//抬起



我是这么写的,为什么一转换分辨率,就点不到了呢



0
天体图
天体图
65535是什么鬼。。。。你这把x * 65535 / w打印出来,看看是什么值,你就会知道你错没错了;然后你再看看我之前说的那句话,你的算法明显和我说的不一样好么。我说个简单点例子,比如你按钮本来在10*10分辨率下坐标是(1,1),那么在100*100坐标下就是1*100/10=10,坐标就是(10,10)。算法是(原始坐标*目标分辨率/原始分辨率),你的是(原始坐标*65535/目标分辨率)
Gavin_W
Gavin_W
您说的那个方法是对的,但是只是对于整个屏幕来说,无论更换什么分辨率,他点的始终是屏幕的那一点,但是我是想点击浏览器上的那个按钮,分辨率一变,浏览器上的按钮也跟着变(比如百度上的那个百度按钮,按照您的方法,无论改变什么分辨率,他点的依旧是上一个分辨率所点的那一个点,而百度那个按钮早已不在那个位置了)
0
Gavin_W
Gavin_W

引用来自“天体图”的评论

65535是什么鬼。。。。你这把x * 65535 / w打印出来,看看是什么值,你就会知道你错没错了;然后你再看看我之前说的那句话,你的算法明显和我说的不一样好么。我说个简单点例子,比如你按钮本来在10*10分辨率下坐标是(1,1),那么在100*100坐标下就是1*100/10=10,坐标就是(10,10)。算法是(原始坐标*目标分辨率/原始分辨率),你的是(原始坐标*65535/目标分辨率)
System.Drawing.Rectangle rect = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
            //屏幕分辨率
            int w = rect.Width; //宽(像素)
            int h = rect.Height; //高(像素) 
            int x = 1145;
            int y = 340;
            int q = (x * w) /1920;
            int b = (y * h) /1080; 
            SetCursorPos(q, b);

这个是根据您说的改的



0
八风不动
八风不动
这种问题搞什么算法,PC的屏幕分辨率能有几种?30种?50种?搞个列表查表就得了。
返回顶部
顶部