0

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

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

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

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

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}
4

3 に答える 3

1

これに対するクリーンな解決策はありません。Windowsは、ワークステーションがロックされていること、および「間違った」デスクトップがアクティブであることを検出する方法を提供していません。検出できるのはセッションスイッチのみです。サンプルコードはこちらです。これを機能させるには、このコードをアプリに含めて、バックアップの開始時に読み戻すことができるパンくずリストを残す必要があります。アプリが永続的にスタックしないように、一度使用した後は必ずリセットしてください。

于 2010-03-15T15:11:46.677 に答える
0

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

画面がロックされているかどうかを確認する唯一の方法は、スクリーンセーバーが起動することです(これは、ピンボークを実行してSystemsParameterInfoを照会し、スクリーンセーバーがアクティブかどうかを確認することで簡単に照会できます-SPI_GETSCREENSAVERRUNNINGおよびSPI_GETSCREENSAVESECUREは、それがアクティブかどうかを判断しますWinKey + Lを押してスクリーンセーバーを起動するときにGINAまたはコンテンツプロバイダーをトリガーします。指定された時間が経過した後、アクティビティがない場合は、GINAまたはContentProviderが起動し、スクリーンセーバーをロック画面に置き換えます... Windowsでの安全なログ情報についてここに投稿された2つの関連リンク...

于 2010-03-15T15:08:11.280 に答える
0

少し作業が必要ですが、すべてuser32からEnumDisplayDevices、EnumDisplaySettingsEx、MonitorFromPoint、GetMonitorInfoを利用して、デバイスのスクリーンショットを取得できます。

PCがロックされている場合、またはアクティブなスクリーンセーバーがある場合、画面キャプチャは常にベージュ色になります。その状態をチェックして、システムがロックされていることを確認できます。これは、RDPされているシステムでも機能します(たとえば、シンクライアントからXP VDIへ)。

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

于 2010-08-06T17:43:44.497 に答える