0

次のコードを使用してFormスクリーンショットをキャプチャしています。

            this.TopMost = true;
            this.FormBorderStyle = FormBorderStyle.None;
            this.WindowState = FormWindowState.Maximized;
            this.Activate();
            Application.DoEvents();



            Bitmap screenShotBMP = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
            Graphics screenShotGraphics = Graphics.FromImage(screenShotBMP);
            screenShotGraphics.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
            screenShotBMP.Save(imagePath, ImageFormat.Gif);
            screenShotGraphics.Dispose();
            screenShotBMP.Dispose();


            this.TopMost = false;
            this.FormBorderStyle = FormBorderStyle.Sizable;
            this.WindowState = FormWindowState.Minimized;

サーバーにログインすると、正常に動作します (生成されたスクリーンショットを確認できます)。ただし、ロックすると、次の行になります。

        screenShotGraphics.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);

「ハンドルが無効です」というエラーが表示されます。

誰もログインしていないときにデスクトップがないためだと知りました。

私が持っているのは、5分ごとに実行するようにスケジュールされたWinFormsアプリケーションで、実行時に..のスクリーンショットを撮る必要がありFormます.

解決策を教えてください。

4

2 に答える 2

0

これは不可能です。ワークステーションがロックされると、Winlogon はセキュリティで保護されたデスクトップに切り替わります。この場合、あなたが言ったように、写真を撮るデスクトップはありません。

管理者でさえセキュア デスクトップへのアクセス権を持っていないため、写真を撮りたくても写真を撮ることができませんでし。ここで実行しているセキュリティ制限を回避する唯一の可能な方法は、アプリケーションをサービスとして書き直して、安全なデスクトップへのアクセス権を取得することですが、別のセキュリティ制限のセットに遭遇することになります。 、そのサービスはユーザーとのやり取りが許可されていないため、「デスクトップ」がありません。

このシナリオで何が起こると予想されるかさえ不明です。写真を撮るデスクトップがない場合、何を写真に撮りたいですか?

要するに、Windows はマルチユーザー オペレーティング システムであり、何十年も前から存在しているということです。「デスクトップ」が 1 つしかなく、全員がすべてに対して完全なアクセス権を持つ、この 16 ビットの概念モデルをあきらめる必要があります。

定期的にスクリーンショットを撮るよりも、ワークステーションで何が起こっているかを監視するためのより良い方法が他にもあります...実際に機能する方法です. 何を監視しようとしているのかによって異なるため、一般的な提案はできません。

于 2013-03-12T13:10:21.133 に答える
0

PrintWindow API をテストしたところ、デスクトップがロックされた状態で動作しました: C# PrintWindow は黒い画像を返します。

于 2013-03-12T14:58:35.083 に答える