特定のユーザー (キオスク ユーザー) がログインしている場合にのみ、特定のユーザーのデスクトップに一種のスプラッシュ スクリーンを表示するサービスを作成しました。
そのスプラッシュ スクリーンは、有効なコードが入力されると、それをサービスに通知し、サービスは x 時間 (コードによって異なります) スリープ状態になります。
スプラッシュ スクリーンは単純に終了します。サービスが起動すると、スプラッシュがなくなっていることがわかり、起動します。
これはすべて機能しています。唯一の問題は、起動したアプリケーションにフォーカスがないことです。つまり、メモ帳で作業していて時間が経過すると、スプラッシュ画面がメモ帳の後ろに表示されます (全画面表示)。
Windows Vista についてのみ心配する必要があります。win32 拡張機能を使用して Python でコーディングしていますが、この問題は LocalSystem アカウントから呼び出されたときの CreateProcessAsUser にあると思います。
アップデート:
「問題」は、実際には、私のような「刺激的な」アプリケーションがフォーカスを盗むのを防ぐための意図的な制限です。
設定によって動作を変更できます: win32gui.SystemParametersInfo(win32con.SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0) これはレジストリ値を一時的に設定するのと同じです: HKEY_CURRENT_USER\Control Panel\Desktop\ForegroundLockTimeout起動するアプリでそれを作成するか、起動するアプリの起動ヘルパーを構築します。
ただし、アプリケーションは、私が今覚えていない API 呼び出しを使用して、フォーカスが盗まれるのを防ぎたい場合があります。
おそらく良い解決策は、現在そのユーザーからのすべてのウィンドウ ハンドルを見つけてから、これらの各ハンドルを使用して win32gui.ShowWindow(handle, command) を使用して最小化することです。
ただし、この特定の問題の設定では、locktimeout 設定で十分でした。
サービスからデスクトップにアプリケーションを起動する方法を知りたい人は、コードへのリンクを参照してください。