2011-09-05 47 views
3

我正在尝试为我的小弟弟写一个简单的程序。他是他的电脑背后有很多次,但他应该是学习学校简单的算术:dc#在启动时锁定windows电脑

我想提出以下方案:

  • 他开始了他的电脑
  • 他需要做一些简单的练习 并完成
  • 如果他做了一个x数量正确的,他可以继续使用他的电脑。

是否有一个简单的(它不需要很干净的xD)锁定他的电脑的方式,直到我的程序说,它可以这样做。

P.S. (我不是说像windows中的标准机制那样锁定)

P.P.S.它不需要是超高科技,只是一般的计算机用户无法通过关闭软件来绕过它:P

+1

您可以替换默认的外壳......但是,如何做到这一点的问题更适合于SU。 – Bobby

+0

我为我的儿子实施了类似的东西,虽然它只是一个巨大的时钟和一条消息,告诉他回去睡觉,以至于他不能说他早上5点没有。他多大年纪,并且对电脑有多好? – kmcc049

+0

他只有9人,不太擅长电脑,所以是xD它可以是非常基本的:D你是如何做到这一点kmcc049,我很感兴趣 –

回答

2

您需要某种类型的系统模式对话框(自win 4以来没有正式支持(对于一些很好的理由)。然而,有this blog,显示你怎么还完成同样的事情。

+0

+1这是一个非常巧妙的技巧。 –

+0

真棒,它看起来很酷。我将使用这个解决方案:D –

1

寻找灵感,在为babysmash代码,具体herehere。它是由Scott写的婴儿/幼儿的应用Hanselman很好地锁定了桌面,你可以重复使用其中的一些想法。

0

My soluti为我的儿子是创建一个巨大的全屏wpf应用程序与所有的工具栏删除等,并在启动时加载它。由于没有明显的方法来关闭它,他不知道如何关闭它,所以才会回到床上。他最终学会了如何解决这个问题,但在一段时间内他为他工作。

这不是很难拼凑在一起,我可以实现一些更多的手段来抓住他的屏幕输入,并停止它,如果他试图关闭它,但这是不需要的时候,他想出了如何绕过它。

使用全屏wpf应用程序,您应该可以根据需要以有趣的格式输出数学问题。

0

如果你想要快速的东西(尽管我认为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设置为NoneWindowStateMaximizedTopMostTrue,或者只需将该代码粘贴到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),你可以在系统,你可以看看上留下的文件(并相应地骂他)。取消注释样本中的行以启用此操作。

2

如果这是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; 
} 

请注意:一般来说,偷窃的重点是非常糟糕的做法。