大概是.NET的代码
Cursor.Position = new Point(x, y);
内部使用SetCursorPos()
WINAPI函数,在某些情况下(根据documentation)可能会返回false
。
那么当Cursor.Position
未成功更改时,我该如何处理? .NET是否始终保证将光标移动到指定位置?
UPD :问题是我已经有了一个小小的C ++程序,它使用SetCursorPos
将光标移动到左下角。事实是它每次都不会移动光标。我在C ++中不够精通调试案例所以我决定在.NET中重写它以查看差异。
我需要它:运行一些测试(selenium webdriver)我需要一个鼠标光标不在浏览器窗口上,因为我手动发送测试用例中的鼠标事件,真正的光标会干扰它们。
答案 0 :(得分:1)
我已经尝试过了,如果您尝试将位置设置为不在屏幕上的位置(即new Point(-1, -1)
),.NET似乎可以安全地处理问题。
如果您想检查位置是否确实发生了变化,您可以这样做:
Point oldPos = Cursor.Position;
Cursor.Position = new Point(x, y);
if (oldPos == Cursor.Position)
{
// cursor position not set
}
虽然在大多数情况下这可能不是错误。我不确定会发生什么其他问题,但如果您真的担心它,您可以随时使用try-catch
块:
try {
Cursor.Position = new Point(x, y);
}
catch (Exception ex)
{
// Unable to set cursor position.
}
虽然我怀疑这是必要的。
答案 1 :(得分:1)
根据与Cursor.Position相同的MSDN文档Cursor.MousePosition,不会抛出任何异常。
框架包装WinApi调用并捕获异常而无需重新抛出。
答案 2 :(得分:1)
那么当Cursor.Position未成功更改时,我将如何处理这种情况?
对此进行测试的唯一方法是在设置后立即尝试获取位置。
.NET是否始终保证将光标移动到指定位置?
只要移动光标的位置,Cursor.Position
setter就会成功。没有办法保证这一点,因为Windows API可能会失败(尽管不太可能)。任何失败都可能是由于非标准环境造成的(有时VM会导致此问题,全屏Direct3D应用程序处于活动状态,或者屏幕保护程序正在运行)。
另一种选择当然是PInvoke SetCursorPos
,如果方法返回GetLastError
则调用false
。