2014-05-19 168 views
-1

我使用User32.dll,運行應用程序,按下按鈕獲取信息。如何避免鼠標移動10秒

我的問題是當我拉動一些數據,但是當我將鼠標移動到特定元素上時,它可以阻止這個過程,播種時我需要將鼠標移動到安全的地方並使其停留在那裏2秒。

我發現將它移動到安全的地方,途中

Cursor.Position = new System.Drawing.Point(3000, 0); 

但我怎麼讓它留在那裏/停止移動2秒..

+4

如果用戶將鼠標移動到某個元素上導致數據拉動停止,則可能需要考慮更改設計。例如,在數據拉動發生時自動設置變量,以便在發生時忽略鼠標懸停事件。 – merlin2011

+9

鼠標不是*你的*,它是*用戶*。您不應該試圖將全局資源視爲屬於您的程序的內容。 –

+0

儘管當然可以強制鼠標在特定位置停留2秒(最糟糕的情況是,您可以每5毫秒持續使用一條線,持續2秒),這可能會讓用戶惱火。 – merlin2011

回答

1

那麼你能有這樣的循環,這個代碼的計時器: 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。

+0

當然,這隻適用於你的應用程序在前臺並因此接收消息。所以很難想象這是什麼意思...... –