【发布时间】:2014-02-23 07:18:20
【问题描述】:
我有下面的代码,知道它是用来将鼠标光标移动到屏幕上的特定点的。
我不明白的是为什么 X 和 Y 坐标必须乘以 65535 再除以屏幕大小。
和float到integer类型的转换有关系吗?
public void MoveMouse(PointF p)
{
if (IntPtr.Size == 8)
{
var move = new INPUT64[1];
move[0] = new INPUT64();
move[0].mi.dx = (int)(p.X * 65535 / ScreenSize.Width);
move[0].mi.dy = (int)(p.Y * 65535 / ScreenSize.Height);
move[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
SendInput(1, move, Marshal.SizeOf(move[0]));
}
else
{
var move = new INPUT32[1];
move[0] = new INPUT32();
move[0].mi.dx = (int)(p.X * 65535 / ScreenSize.Width);
move[0].mi.dy = (int)(p.Y * 65535 / ScreenSize.Height);
move[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
SendInput(1, move, Marshal.SizeOf(move[0]));
}
}
【问题讨论】:
-
不,这是关于幻数,而不是代码审查。