質問

ユーザーの PC 上のアプリケーションを更新する夜間プロセスがあり、アプリケーションを停止して再度バックアップする必要があります (そのプロセスを変更するつもりはありません)。

問題は、起動時に有効な画面を必要とする Windows AppBar を構築しているのですが、システムがロックされている場合、Screen クラスに画面が存在しないことです。したがって、視覚効果はどれも有効になっておらず、本当に醜く表示されます。

現在これを回避する唯一の方法は、ロックされた画面を検出し、スピンしてユーザーがデスクトップのロックを解除するまで待機し、その後起動を続けることです。これはユーザーのワークフローの重要な部分であり、前の晩にそのままにしておけば稼働しているはずだとユーザーは期待しているため、このままにしておくという選択肢はありません。

何か案は??表示情報がどこにも見つからないようですが、ユーザーはまだログインしているため、どこかに保存する必要があります。

Screen.AllScreens 配列の内容:

** ロック時:

Device Name    : DISPLAY
Primary        : True
Bits Per Pixel : 0
Bounds         : {X=-1280,Y=0,Width=2560,Height=1024}
Working Area   : {X=0,Y=0,Width=1280,Height=1024}

** ロック解除時:

Device Name    : \\.\DISPLAY1
Primary        : True
Bits Per Pixel : 32
Bounds         : {X=0,Y=0,Width=1280,Height=1024}
Working Area   : {X=0,Y=0,Width=1280,Height=994}

Device Name    : \\.\DISPLAY2
Primary        : False
Bits Per Pixel : 32
Bounds         : {X=-1280,Y=0,Width=1280,Height=1024}
Working Area   : {X=-1280,Y=0,Width=1280,Height=964}
役に立ちましたか?

他のヒント

この画面ロックの問題は、使用しているバージョン (画面をロックする GINA を使用する XP と ContentProvider を使用する Vista のいずれか) によって異なります。最終的には、これら両方のメカニズムがこの問題の原因となります。

画面がロックされているかどうかを確認する唯一の方法は、スクリーンセーバーを起動することです (これは、pinvoke を実行してクエリを実行することで簡単にクエリできます) システムパラメータ情報, 、スクリーンセーバーがアクティブかどうかを確認するには - SPI_GETSCREENSAVER実行中 そして SPI_GETSCREENSAVESECURE WinKey + L を押してスクリーン セーバーを開始するときに、GINA またはコンテンツ プロバイダーをトリガーするかどうかを判断します。指定された時間が経過した後、アクティビティがなければ、GINA または ContentProvider が開始され、スクリーン セーバーがロック画面に置き換えられます。 ..Windows での安全なログ情報に関してここに投稿された 2 つの関連リンクを含めました。

これは、しかし、あなたはすべてのUSER32からEnumDisplayDevices、EnumDisplaySettingsEx、MonitorFromPoint、GetMonitorInfoを利用することができる、少し作業を必要とし、デバイスのスクリーンショットをつかむでしょう。

PCがロックされ、またはアクティブなスクリーンセーバーがある場合は、画面キャプチャは常にベージュ色でされている場合。あなたはロックされているシステムを知るために、その状態をチェックすることができます。これはまたにRDPedされているシステム上で動作します(例えばXP VDIにシンクライアント。)

少なくとも、その私の環境で動作します。コードサンプルは、グーグルで見つけることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top