Отключение движения мыши и кликов в целом в С#
На работе я тренер. Я собираю уроки, чтобы научить людей "делать вещи" без мыши... Когда-либо видели, как люди нажимают "login" текстовое поле, набирают, берут мышь, нажимают "пароль", набирают свой пароль, затем снова набирают мышь щелкнуть кнопку "подключиться" под?
Итак, я научу их, как делать все это без мыши (среди многих других вещей, конечно)
В конце курса я сделаю им сдачу своего рода экзамена.
Итак, я создаю небольшое приложение на основе мастера, в котором я представляю примеры для форм, похожих на simili-real-life, для заполнения, но я хочу программно отключить их мышь, пока они делают этот тест.
Однако, еще в мастере, я должен позволить им снова использовать свою мышь.
Есть ли, возможно, простой способ просто отключить мышь некоторое время и снова включить ее позже?
Я на С# 2.0, программируя под VС# 2k5, если это важно
Ответы
Ответ 1
Сделайте свою реализацию формы 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);
}
Это скроет курсор, сделайте так, чтобы они не могли его переместить и отключить правую и левую кнопки мыши.
Ответ 2
Вы ищете метод Cursor.Hide()
.
Обратите внимание, что курсор все равно будет перемещаться, он просто не будет виден.
Если вы работаете с включенными визуальными стилями, все равно можно будет использовать мышь, отслеживая эффекты зависания.
Однако любой, кто может это сделать, вероятно, не нуждается в вашем курсе.
Более "забавным" способом сделать это было бы hanle событие MouseMove
и установить Cursor.Position
, чтобы предотвратить перемещение мыши в вашу панель.
Ответ 3
Как насчет другого подхода (мышление из "нужно запрограммировать решение для всего" ): прежде чем начинать занятия, отключите всех мышей... пересоедините их, когда мышь понадобится снова.
Ответ 4
Лучше всего использовать PInvoke функцию ShowCursor(FALSE)
(см. http://msdn.microsoft.com/en-us/library/ms648396.aspx)
[DllImport("user32.dll")]
static extern int ShowCursor(bool bShow);
Изменить: это эквивалентно вызову Cursor.Hide() (http://msdn.microsoft.com/en-us/library/system.windows.forms.cursor.hide(v=VS.100).aspx), если вы используете Windows Forms.