我想鼠標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. C#凍結只有鼠標移動
- 2. 鼠標滾動凍結鉻標籤
- 3. 鼠標光標在Windows中凍結LabView
- 4. 凍結一個鼠標懸停褪色
- 5. Python Opengl凍結鼠標點擊
- 6. 低級別的鼠標鉤 - 斷點上的鼠標凍結
- 7. 鼠標鉤 - 冷凍程序
- 8. C#ProgressBar凍結
- 9. 如何凍結使用Javascript
- 10. 如何凍結頁面標題
- 11. 如何凍結Windows光標到位?
- 12. 使用凍結列和凍結標題創建表/網格
- 13. C#Winform凍結SerialPort.Close
- 14. C#:Thread.Join()凍結UI
- 15. 當鼠標事件被激活時,重載C#應用程序凍結
- 16. 如何在窗格內移動鼠標時修復actionPerformed方法凍結?
- 17. 如何模擬鼠標移動和鼠標單擊使用C或C++的Mac
- 18. WPF - 使用鼠標滾輪滾動使用自定義擴展器凍結DataGrid
- 19. Ubuntu的16.04屏幕完全凍結只有鼠標移動
- 20. NSWindow在模擬鼠標按下事件時被凍結
- 21. PyQt5 GUI凍結造成的Windows焦點 - 跟隨 - 鼠標
- 22. 如何添加鼠標懸停總結
- 23. c - GTK3.0使用「g_spawn_async_with_pipes()」時,GUI會凍結「
- 24. C#WPF UI凍結使用的MemoryStream
- 25. 如何凍結頭,並使用PHPExcel
- 26. 如何防止使用QThread凍結GUI?
- 27. Pthread凍結標準輸出?
- 28. GridView凍結標題行
- 29. 凍結標題,滾動GridView
- 30. 凍結標題中的GridView
爲什麼你想這樣做? – 2010-10-22 11:37:40
也許是爲了它的樂趣:) – balexandre 2010-10-22 11:39:55
所以切斷鼠標電纜:) – 2010-10-22 11:40:36