我正在尝试为我的小弟弟写一个简单的程序。他是他的电脑背后有很多次,但他应该是学习学校简单的算术:dc#在启动时锁定windows电脑
我想提出以下方案:
- 他开始了他的电脑
- 他需要做一些简单的练习 并完成
- 如果他做了一个x数量正确的,他可以继续使用他的电脑。
是否有一个简单的(它不需要很干净的xD)锁定他的电脑的方式,直到我的程序说,它可以这样做。
P.S. (我不是说像windows中的标准机制那样锁定)
P.P.S.它不需要是超高科技,只是一般的计算机用户无法通过关闭软件来绕过它:P
我正在尝试为我的小弟弟写一个简单的程序。他是他的电脑背后有很多次,但他应该是学习学校简单的算术:dc#在启动时锁定windows电脑
我想提出以下方案:
是否有一个简单的(它不需要很干净的xD)锁定他的电脑的方式,直到我的程序说,它可以这样做。
P.S. (我不是说像windows中的标准机制那样锁定)
P.P.S.它不需要是超高科技,只是一般的计算机用户无法通过关闭软件来绕过它:P
您需要某种类型的系统模式对话框(自win 4以来没有正式支持(对于一些很好的理由)。然而,有this blog,显示你怎么还完成同样的事情。
+1这是一个非常巧妙的技巧。 –
真棒,它看起来很酷。我将使用这个解决方案:D –
My soluti为我的儿子是创建一个巨大的全屏wpf应用程序与所有的工具栏删除等,并在启动时加载它。由于没有明显的方法来关闭它,他不知道如何关闭它,所以才会回到床上。他最终学会了如何解决这个问题,但在一段时间内他为他工作。
这不是很难拼凑在一起,我可以实现一些更多的手段来抓住他的屏幕输入,并停止它,如果他试图关闭它,但这是不需要的时候,他想出了如何绕过它。
使用全屏wpf应用程序,您应该可以根据需要以有趣的格式输出数学问题。
如果你想要快速的东西(尽管我认为Eddy和jeroenh有很好的答案),你可以在没有WinAPI/interop的情况下使用它 - 只需使用窗口技巧即可。
首先您Form
创建一个属性,将其设置为true时,他做了他的测验:
public bool HasCompletedTasks { get; set; }
public void CompleteAndClose()
{
//if (File.Exists(_fileName))
// File.Delete(_fileName);
HasCompletedTasks = true;
Close();
}
现在阻止窗口关闭:
protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
e.Cancel = !HasCompletedTasks;
}
接下来,在窗体设计器将FormBorderStyle
设置为None
,WindowState
至Maximized
和TopMost
至True
,或者只需将该代码粘贴到InitializeComponent();
:
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
this.TopMost = true;
// const string MonitorFolder = "C:\\TasksNotDone";
// Directory.CreateDirectory(MonitorFolder);
// _fileName = Path.Combine(MonitorFolder, DateTime.Now.ToFileTimeUtc().ToString() + ".txt");
// File.WriteAllText(_fileName, DateTime.Now.ToString());
如果你想提醒他计算出如何将其关闭(CTRL + ALT + DEL),你可以在系统,你可以看看上留下的文件(并相应地骂他)。取消注释样本中的行以启用此操作。
如果这是STIL相关的,然后锁定下来良好的计算机,而无需使用任何挂钩的一个简单的方法是做如下:
首先,创建Form_LostFocus事件处理程序。这是不是在属性 - >事件窗口,所以你必须以编程方式添加:
this.LostFocus += new ...
这被称为当从失去焦点,所以在这里我们需要让焦点回到形式:
this.Focus();
this.Activate();
这种方法效果最好,如果焦点然后给予窗体上的一个控制:
textBox1.Focus();
接下来,添加一个计时器,以100毫秒的间隔,并且启用它。该定时器将检查形式具有焦点,如果没有,将给予重点:
// in the Tick Eventhandler
if (!this.Focused)
this.Focus();
这将有效地确保无论用户attemps做什么,程序会抢光焦点 - 即使他打开任务管理器。
然后只是让程序全屏: 设置'TopMost'属性为true。 将'WindowState'设置为'最大化'。 将'FormBorderStyle'设置为'None'。
最后,处理Form_Closing事件句柄。
// Global boolean value - set this to true when
// the user has completed the set tasks
boolean complete = false;
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (!complete)
e.cancel = true;
}
请注意:一般来说,偷窃的重点是非常糟糕的做法。
您可以替换默认的外壳......但是,如何做到这一点的问题更适合于SU。 – Bobby
我为我的儿子实施了类似的东西,虽然它只是一个巨大的时钟和一条消息,告诉他回去睡觉,以至于他不能说他早上5点没有。他多大年纪,并且对电脑有多好? – kmcc049
他只有9人,不太擅长电脑,所以是xD它可以是非常基本的:D你是如何做到这一点kmcc049,我很感兴趣 –