我想鼠標FREEZ(不能移動)時,按下鼠標 感謝如何使鼠標凍結C#
回答
你不能。
鼠標在操作系統層中運行,而不是您的應用程序......即使您凍結您的應用程序,鼠標也能運行。
您可以嘗試斷開鼠標驅動程序/端口,但您確實需要詢問用戶鼠標使用的端口,因爲它是輸入設備,就像設計板中的筆一樣,您不會知道要斷開的那個。
您可以假冒,對於您通過以下方式窗口行爲:
記住當前光標和它的位置。
集
this.Cursor = Cursors.None;
繪製記住的光標在指定位置,並介紹
canExecute
標誌所有鼠標處理程序「假鼠標凍結」期間禁用它們。
當隱藏的鼠標指針移動到其他控件上時,您仍然可以獲得其他效果。另一方面,這整個問題可能是一個壞主意。 – JasonFruit 2010-10-22 12:03:13
難道你不能移動鼠標指針嗎?移動時可能會重置其位置(這可能看起來很醜)。
我用一個TableLayoutPanel供大家參考(只記得執行代碼是在前面的控制):
OPTION1:重置鼠標位置:
定義兩個全局變量:
bool mousemove = true;
Point currentp = new Point(0, 0);
亨德爾MouseDown事件更新mousemove
:
private void tableLayoutPanel1_MouseDown(object sender, MouseEventArgs e)
{
int offsetX = (sender as Control).Location.X + this.Location.X;
int offsetY = (sender as Control).Location.Y + this.Location.Y;
mousemove = false;
currentp = new Point(e.X+offsetX, e.Y+offsetY); //or just use Cursor.Position
}
亨德爾MouseMove
禁用/啓用移動:
private void tableLayoutPanel1_MouseMove(object sender, MouseEventArgs e)
{
if (!mousemove)
{
this.Cursor = new Cursor(Cursor.Current.Handle);
Cursor.Position = currentp;
}
}
重置mousemove
而鼠標鬆開
private void tableLayoutPanel1_MouseUp(object sender, MouseEventArgs e)
{
mousemove = true;
}
OPTION2:限制鼠標剪裁矩形:
限制它,而的MouseDown:
private void tableLayoutPanel1_MouseDown(object sender, MouseEventArgs e)
{
this.Cursor = new Cursor(Cursor.Current.Handle);
Cursor.Position = Cursor.Position;
Cursor.Clip = new Rectangle(Cursor.Position, new Size(0, 0));
}
釋放它的MouseUp後:
private void tableLayoutPanel1_MouseUp(object sender, MouseEventArgs e)
{
this.Cursor = new Cursor(Cursor.Current.Handle);
Cursor.Position = Cursor.Position;
Cursor.Clip = Screen.PrimaryScreen.Bounds;
}
這是可能的,Windows有一個專用的API吧,了BlockInput()。當你嘗試使用它時,一定要保存所有的工作,這是非常有效的。您可能需要重新啓動計算機,這是用戶在程序中使用時所要執行的操作。下面是一個使用它的樣品Windows窗體形式,它需要一個按鈕和一個計時器:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
timer1.Interval = 3000;
timer1.Tick += new EventHandler(timer1_Tick);
button1.Click += new EventHandler(button1_Click);
}
private void button1_Click(object sender, EventArgs e) {
timer1.Enabled = true;
BlockInput(true);
}
private void timer1_Tick(object sender, EventArgs e) {
timer1.Enabled = false;
BlockInput(false);
}
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern bool BlockInput(bool block);
}
這會阻止輸入3秒,但直到釋放鼠標按鈕。根據定義,只要用戶輸入被阻止,就不會收到MouseButton的釋放。 – chiccodoro 2010-10-22 13:16:09
@chicco - 這是正常的按鈕行爲,ClickUp事件在MouseUp上引發。 – 2010-10-22 13:22:51
設置一個較低的水平鼠標鉤子與SetWindowsHookEx
,而忽略到指定(該HOOKPROC
代表所有的消息表示不叫CallNextHookEx
)。
- 1. 鼠標滾動凍結鉻標籤
- 2. 鼠標光標在Windows中凍結LabView
- 3. 凍結一個鼠標懸停褪色
- 4. 鼠標鉤 - 冷凍程序
- 5. 如何凍結Windows光標到位?
- 6. 如何凍結頁面標題
- 7. 使用凍結列和凍結標題創建表/網格
- 8. C#:Thread.Join()凍結UI
- 9. C#Winform凍結SerialPort.Close
- 10. 當鼠標事件被激活時,重載C#應用程序凍結
- 11. 如何在窗格內移動鼠標時修復actionPerformed方法凍結?
- 12. 如何模擬鼠標移動和鼠標單擊使用C或C++的Mac
- 13. NSWindow在模擬鼠標按下事件時被凍結
- 14. WPF - 使用鼠標滾輪滾動使用自定義擴展器凍結DataGrid
- 15. 凍結標題中的GridView
- 16. 凍結標題,滾動GridView
- 17. GridView凍結標題行
- 18. 如何防止使用QThread凍結GUI?
- 19. C#StreamReader的ReadToEnd的凍結
- 20. keydown凍結計時器c#
- 21. 用c#凍結excel列#
- 22. 如何凍結屏幕?
- 23. DataGridView - 如何凍結列?
- 24. 如何凍結參數
- 25. 如何凍結ComboBox Excel VBA
- 26. 如何凍結/阻塞列?
- 27. 如何凍結耙子?
- 28. 如何「凍結」git submodule
- 29. 如何不讓NSSearchField凍結?
- 30. 如何停止凍結listView
爲什麼你想這樣做? – 2010-10-22 11:37:40
也許是爲了它的樂趣:) – balexandre 2010-10-22 11:39:55
所以切斷鼠標電纜:) – 2010-10-22 11:40:36