3

私は弟のために簡単なプログラムを書こうとしています。彼は何度もコンピューターの後ろにいますが、学校で簡単な算数を学んでいるはずです:D

次のプログラムを作りたいです。

  • 彼は自分のコンピューターを起動します
  • 彼はいくつかの簡単な演習を行い、完了する必要があります
  • 彼がx量を正しければ、彼は自分のコンピューターを使い続けることができます。

私のプログラムがそうすることができると言うまで、彼のコンピュータをロックする簡単な(それは非常にきれいなxDである必要はありません)方法はありますか?

PS(Windowsの標準メカニズムのようにロックするという意味ではありません)

PPSそれは超ハイテクである必要はありません、ただ平均的なコンピュータユーザーがソフトウェアを閉じることによってそれを迂回することができないということです:P

4

5 に答える 5

2

ある種のシステムモーダルダイアログが必要です(これは、Windows NT 4以降(いくつかの正当な理由で)正式にはサポートされていません)。ただし、同じことを実行する方法を示すこのブログがあります。

于 2011-09-05T20:59:21.003 に答える
2

これが適切である場合、フックを使用せずにコンピュータを完全にロックダウンする簡単な方法は、次のようにすることです。

まず、Form_LostFocusイベントハンドラーを作成します。これは[プロパティ]->[イベント]ウィンドウにはないため、プログラムで追加する必要があります。

this.LostFocus += new ...

これは、fromがフォーカスを失ったときに呼び出されるため、ここではフォームにフォーカスを戻す必要があります。

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

この方法は、フォームのコントロールにフォーカスが与えられた場合に最適に機能します。

textBox1.Focus();

次に、100ms間隔でタイマーを追加し、有効にします。このタイマーは、フォームにフォーカスがあるかどうかをチェックし、ない場合はフォーカスを与えます。

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

これにより、ユーザーが何をしようとしても、タスクマネージャーを開いた場合でも、プログラムが常にフォーカスを奪うことが効果的に保証されます。

次に、プログラムをフルスクリーンにします。「TopMost」プロパティをtrueに設定します。「WindowState」を「maximized」に設定します。「FormBorderStyle」を「None」に設定します。

最後に、Form_ClosingEventhandlerを処理します。

// 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;
}

注意:一般的に、フォーカスを盗むことは非常に悪い習慣です。

于 2012-05-08T12:12:15.760 に答える
1

特にここここで、 babysmashのコードでインスピレーションを探してください。これは、Scott Hanselmanによって作成された赤ちゃん/幼児向けのアプリで、デスクトップを適切にロックダウンします。あなたはおそらくそこにあるアイデアのいくつかを再利用することができます。

于 2011-09-05T21:32:12.047 に答える
0

何か迅速なものが必要な場合(Eddyとjeroenhには質の高い答えがあると思いますが)、WinAPI/相互運用機能なしでそれを行うことができます。ウィンドウトリックを使用するだけです。

最初HasCompletedTasksにあなたにプロパティを作成し、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;
}

次に、フォームデザイナーで、to、to、toを設定するか、FormBorderStyleこのコードを次のコードのすぐ下に貼り付けます。NoneWindowStateMaximizedTopMostTrueInitializeComponent();

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)を理解した場合にアラートを受け取りたい場合は、探しているファイルをシステムに残すことができます(それに応じて彼を叱ります)。これを有効にするには、サンプルの行のコメントを解除します。

于 2011-09-05T22:24:37.040 に答える
0

息子のための私の解決策は、すべてのツールバーを削除した巨大なフルスクリーンwpfアプリを作成し、起動時にロードすることでした。それを閉じる目に見える方法がなかったので、彼はそれを閉じる方法がわからなかったので、ただベッドに戻るでしょう。彼は最終的にそれを回避する方法を学びましたが、それはしばらくの間彼のために働きました。

まとめるのはそれほど難しくありませんでした。彼が画面入力を閉じようとした場合、画面入力を取得して停止するためのいくつかの戦術を実装することもできましたが、それを回避する方法を理解するまでには必要ありませんでした。

フルスクリーンのwpfアプリを使用すると、必要に応じて、数学の質問を興味深い形式で出力できるはずです。

于 2011-09-05T21:40:40.510 に答える