.net 分配给游标位置是否会引发异常?
大概是.NET的代码.net 分配给游标位置是否会引发异常?,.net,winapi,.net,Winapi,大概是.NET的代码 Cursor.Position = new Point(x, y); 内部使用SetCursorPos()WINAPI函数,该函数(根据)在某些情况下可能返回false 那么,当Cursor.Position未成功更改时,我将如何处理这种情况?NET是否为始终将光标移动到指定位置提供了一些保证 uPD>强>:我已经有了一个微小的C++程序,它使用 SETCURSORPOS将光标移到左下角。问题是它不会每次都移动光标。我在C++调试中不够熟练,所以我决定在.NET中重写
Cursor.Position = new Point(x, y);
内部使用SetCursorPos()
WINAPI函数,该函数(根据)在某些情况下可能返回false
那么,当Cursor.Position
未成功更改时,我将如何处理这种情况?NET是否为始终将光标移动到指定位置提供了一些保证
<强> uPD>强>:我已经有了一个微小的C++程序,它使用<代码> SETCURSORPOS将光标移到左下角。问题是它不会每次都移动光标。我在C++调试中不够熟练,所以我决定在.NET中重写它,看看有什么不同。
我需要它的目的:为了运行一些测试(selenium webdriver),我需要一个鼠标光标不在浏览器窗口上,因为我正在手动发送测试用例中的鼠标事件,而实际的光标会干扰它们。我已经试过了,如果您尝试将位置设置为不在屏幕上的位置(即
新点(-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.
}
尽管我怀疑这是必要的。根据与相同的MSDN文档,不会引发任何异常 框架包装WinApi调用并捕获异常,而无需重试 那么,当光标位置未成功更改时,我将如何处理这种情况 唯一的方法,甚至测试这是试图得到的立场后,立即设置它 NET是否为始终将光标移动到指定位置提供了一些保证 每当光标的位置可以移动时,
Cursor.Position
setter应该会成功。无法保证这一点,因为Windows API可能会失败(尽管可能性很小)。任何故障都可能是由于非标准环境造成的(有时VM会导致此问题,全屏Direct3D应用程序处于活动状态,或者屏幕保护程序正在运行)
当然,另一种选择是自己使用PInvoke
SetCursorPos
,如果方法返回false
,“尽管可能性很小”,则调用GetLastError
”——我将添加一些我应该添加的解释initially@zerkms我列出了发生这种情况的主要原因-你为什么需要它,失败的原因是什么?添加了一个更新。我不能说是什么原因,失败是零星的:-(@ ZekMMS,我建议使用pJoCKE(或您的原始C++项目)和检查GETLASTOrror——它应该告诉您为什么它失败,这可能有助于诊断和确定解决问题的最佳方法(即:再次调用)等。是的,这实际上是个好主意。如果.net实现继续失败,我会试试这个