スケジューラーである最初のC#アプリケーションを作成するだけです。1時間に一度、ダイアログをポップアップして、休憩するために2分間画面をロックしたいと思います。
今のところ、私のアプリケーションは、休憩時間になると「TopMost」にフォームを表示し、2分後に非表示にします。
画面をロックするにはどうすればよいですか?VistaのUACスタイルに似たもの。
ええ、あなたの質問を読み間違えました。VistaのUACダイアログは、新しいデスクトップを作成し、その上に表示されます。デスクトップを作成するには、CreateDesktop関数を使用できます。その後、 SwitchDesktopを使用してそれに切り替えることができます。
安全なデスクトップの外観を本当に再現したい場合は、最初にスクリーンショットを撮り、それをフォームに少し暗くして表示する必要があります。
以下の元の回答。これも興味深いかもしれません。
LockWorkStation関数を見てください。
ただし、プログラムでワークステーションのロックを解除することはできません。それはユーザーが自分でしなければならないことです。したがって、2分がまだ終わっていない限り、トップレベルのウィンドウ手法を使用してユーザーのワークスペースを拒否しない限り、少なくとも2分の休憩を簡単に確保することはできません。
スクリーン グラブ (過去に少し異なる状況でアプローチとして使用したこともあります) の代わりに、全画面表示で他のすべてのウィンドウの上に新しいウィンドウ (WinForm) を作成することでこれを行うこともできます。 .
ウィンドウの背景色を黒一色に設定し、不透明度を 70 ~ 80% に設定すると、UAC プロンプトのようなものが表示されます。
例えば
formName.WindowState = FormWindowState.Maximized;
formName.FormBorderStyle = FormBorderStyle.None;
formName.Opacity = 0.70;
formName.TopMost = true;
もちろん、これの上にウィンドウを描画して、カウンターを使用して、画面が暗くなった理由をユーザーに通知することは賢明です。
ユースケースによっては、UACプロンプト(人々が見慣れているもの)のように見えるものを使用して、人々に二度も考えさせないだけで十分かもしれません.
Altスクリーン グラブ アプローチと同様に、これだけでは、ユーザーが Windows キーを使用してそれをバイパスしたり、[スタート] メニューを表示したり、他のタスクに切り替えたりするのをTab防ぐCtrlことはできません。Esc
組み込みのキー コマンドを無効にするには、Windows ホットキーに関連するレジストリ キーを設定する必要があり、もう少し注意が必要です (再起動が必要で、その場で切り替えることはできないと思います)。