2011-09-05 8 views
3

J'essaie d'écrire un programme simple pour mon petit frère. Il se cache derrière son ordinateur beaucoup de temps, mais il devrait être simple apprentissage Arithmétique pour l'école: DC# Verrouiller l'ordinateur Windows au démarrage

Je veux faire le programme suivant:

  • Il démarre son ordinateur
  • Il a besoin de faire Quelques exercices simples et compléter
  • S'il a fait un x correct, il peut continuer à utiliser son ordinateur.

Existe-t-il un moyen simple (il n'a pas besoin d'être très propre xD) pour verrouiller son ordinateur jusqu'à ce que mon programme le dise?

P.S. (Je ne veux pas dire verrouillage comme dans le mécanisme standard des fenêtres)

P.P.S. Il n'a pas besoin d'être très high-tech, juste qu'un utilisateur moyen ne peut pas le contourner en fermant le logiciel: P

+1

Vous pourriez remplacer le shell par défaut ... cependant, la question sur la façon de faire cela serait mieux adaptée à SU. – Bobby

+0

J'ai mis en place quelque chose de similaire pour mon fils, même si c'était juste une horloge géante et un message pour lui dire de se rendormir afin qu'il ne puisse pas dire qu'il n'était pas 5 heures du matin. Quel âge a-t-il et à quel point est-il bon avec les ordinateurs? – kmcc049

+0

Il est seulement 9 et pas très bon avec les ordinateurs, alors oui xD Il peut être très basique: D Comment avez-vous fait que kmcc049, je suis très intéressé –

Répondre

2

Vous avez besoin d'une sorte de boîte de dialogue système modale (qui n'est pas formellement supportée depuis la version 4 (pour quelques bonnes raisons). Cependant, il y a this blog qui vous montre comment vous pouvez accomplir toujours la même chose.

+0

+1 c'est un truc vraiment sympa. –

+0

Génial, ça a l'air cool. Je vais utiliser cette solution: D –

1

chercher l'inspiration au code pour babysmash, en particulier here et here. Il est une application pour les bébés/tout-petits écrits par Scott Hanselman qui verrouille assez raisonnablement le bureau, vous pouvez probablement réutiliser certaines idées ici

0

Mes soluti pour mon fils était de créer une application wpf fullscreen géant avec toutes les barres d'outils supprimées etc et le charger au démarrage. Comme il n'y avait pas de moyen visible pour le fermer, il n'avait aucune idée de comment le fermer, alors il allait juste se recoucher. Il a finalement appris à contourner cela, mais cela a fonctionné pour lui pendant un moment. Il n'a pas été très difficile à assembler, et j'aurais pu mettre en place d'autres tactiques pour saisir son écran et l'arrêter s'il essayait de le fermer mais ce n'était pas nécessaire au moment où il a compris comment contourner. Avec une application wpf en plein écran, vous devriez être capable de sortir vos questions de mathématiques dans un format intéressant si vous le souhaitez.

0

Si vous voulez quelque chose de rapide (bien que je pense que Eddy et jeroenh ont des réponses de qualité) vous pouvez le faire sans WinAPI/interop - il suffit d'utiliser des astuces de fenêtre.

d'abord créer une propriété sur votre Form, réglez-le vrai quand il a fait ses quiz:

public bool HasCompletedTasks { get; set; } 
public void CompleteAndClose() 
{ 
    //if (File.Exists(_fileName)) 
    // File.Delete(_fileName); 
    HasCompletedTasks = true; 
    Close(); 
} 

empêchent maintenant la fenêtre de fermeture:

protected override void OnClosing(CancelEventArgs e) 
{ 
    base.OnClosing(e); 
    e.Cancel = !HasCompletedTasks; 
} 

suivant dans le concepteur de formulaire mettre le FormBorderStyle à None, le WindowState à Maximized et TopMost à True, ou simplement coller ce code juste sous 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()); 

Si vous voulez être alerté s'il figure comment le fermer (CTRL + ALT + DEL) vous pouvez laisser des fichiers sur le système que vous pouvez chercher (et le gronder en conséquence). Décommentez les lignes dans les exemples pour activer cela.

2

Si cela est Stil pertinent, un moyen simple de bloquer l'ordinateur pour le bien sans utiliser de crochets est de faire comme suit:

Tout d'abord, créez le Form_LostFocus eventHandler. Ce n'est pas dans la fenêtre Propriétés-> événements, de sorte que vous devrez ajouter programmation:

this.LostFocus += new ... 

Ceci est appelé lorsque la mise au point de perd, donc ici nous devons donner focus à la forme :

this.Focus(); 
this.Activate(); 

Cette méthode fonctionne mieux si le focus est ensuite donnée à un contrôle sur le formulaire:

textBox1.Focus(); 

ensuite, ajoutez une minuterie, avec un intervalle de 100ms, et l'activer. Cette minuterie vérifiera si la forme est mise au point, et sinon, donnera le focus:

// in the Tick Eventhandler 
if (!this.Focused) 
    this.Focus(); 

Cela aura pour effet de faire en sorte que, peu importe ce que votre utilisateur essaye de le faire, le programme sera toujours voler le focus - même s'il ouvre le gestionnaire de tâches.

Ensuite, faites simplement le programme en mode plein écran: Définissez la propriété 'TopMost' sur true. Définissez 'WindowState' sur 'maximized'. Définissez 'FormBorderStyle' sur 'Aucun'.

Enfin, gérer le gestionnaire d'événements 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; 
} 

Veuillez noter: En général, le vol de la mise au point est une très mauvaise pratique.

Questions connexes