我使用User32.dll,運行應用程序,按下按鈕獲取信息。如何避免鼠標移動10秒
我的問題是當我拉動一些數據,但是當我將鼠標移動到特定元素上時,它可以阻止這個過程,播種時我需要將鼠標移動到安全的地方並使其停留在那裏2秒。
我發現將它移動到安全的地方,途中
Cursor.Position = new System.Drawing.Point(3000, 0);
但我怎麼讓它留在那裏/停止移動2秒..
我使用User32.dll,運行應用程序,按下按鈕獲取信息。如何避免鼠標移動10秒
我的問題是當我拉動一些數據,但是當我將鼠標移動到特定元素上時,它可以阻止這個過程,播種時我需要將鼠標移動到安全的地方並使其停留在那裏2秒。
我發現將它移動到安全的地方,途中
Cursor.Position = new System.Drawing.Point(3000, 0);
但我怎麼讓它留在那裏/停止移動2秒..
那麼你能有這樣的循環,這個代碼的計時器: Cursor.Position = new System.Drawing.Point(3000, 0);
但這樣做效率不高。 所以我建議讓你的表單實現IMessageFilter。
然後將下面的代碼添加到窗體:
Rectangle BoundRect;
Rectangle OldRect = Rectangle.Empty;
private void EnableMouse()
{
Cursor.Clip = OldRect;
Cursor.Show();
Application.RemoveMessageFilter(this);
}
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == 0x201 || m.Msg == 0x202 || m.Msg == 0x203) return true;
if (m.Msg == 0x204 || m.Msg == 0x205 || m.Msg == 0x206) return true;
return false;
}
private void DisableMouse()
{
OldRect = Cursor.Clip;
// Arbitrary location.
BoundRect = new Rectangle(50, 50, 1, 1);
Cursor.Clip = BoundRect;
Cursor.Hide();
Application.AddMessageFilter(this);
}
這將隱藏光標使其不能移動它,並禁用左右mousebuttons。
當然,這隻適用於你的應用程序在前臺並因此接收消息。所以很難想象這是什麼意思...... –
如果用戶將鼠標移動到某個元素上導致數據拉動停止,則可能需要考慮更改設計。例如,在數據拉動發生時自動設置變量,以便在發生時忽略鼠標懸停事件。 – merlin2011
鼠標不是*你的*,它是*用戶*。您不應該試圖將全局資源視爲屬於您的程序的內容。 –
儘管當然可以強制鼠標在特定位置停留2秒(最糟糕的情況是,您可以每5毫秒持續使用一條線,持續2秒),這可能會讓用戶惱火。 – merlin2011