3

我正在尝试创建 Windows 服务应用程序来捕获屏幕。以前我有启动服务的问题。无论如何,我能够解决它,现在我遇到了另一个问题。现在图像正在保存,但它保存为黑屏。为此,SOF 中也有很多问题,但我无法解决我的问题。

这是我到目前为止所尝试的:

 public partial class ScreenCaptureService : ServiceBase
    {           
        private static Bitmap bmpScreenshot;
        //private static Graphics gfxScreenshot;
        System.Timers.Timer timer = new System.Timers.Timer();
        public ScreenCaptureService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {              
            TraceService();
            timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);

            timer.Interval = 60000;
            timer.Enabled = true;
        }

        protected override void OnStop()
        {
            timer.Enabled = false;
            TraceService();    
        }

        private void TraceService()
        {    
            Desktop userDesk = new Desktop();
            userDesk.BeginInteraction();
            string path = @"D:\Screen\";
            if (!Directory.Exists(path))
                Directory.CreateDirectory(path);

            string fileName = string.Format("SCR-{0:yyyy-MM-dd_hh-mm-ss-tt}.png", DateTime.Now);    
            string filePath = path + fileName;
            bmpScreenshot = CaptureScreen.GetDesktopImage();
            bmpScreenshot.Save(filePath, ImageFormat.Png);
            userDesk.EndInteraction();
        }

        private void OnElapsedTime(object source, ElapsedEventArgs e)
        {
            TraceService();
        }      
    }

在这里,我遵循了HereHere中提到的代码。但它对我不起作用。

我正在使用 Windows 7 电脑。我看到提到的几个答案,the session 0 isolation feature但我无法从他们那里得到正确的解决方案。

在这里编辑 此服务运行为session 0 任务管理器

4

1 回答 1

5

服务在会话 0 中运行,该会话具有不同的 Window Station 和 Desktop 分配给用户通过其可见桌面与系统交互的其他会话。

您可能希望让您的服务切换到活动用户的会话以建立指向其可见桌面的链接,以便创建它的快照 - 您的屏幕截图代码按原样工作,但正在为其自己的桌面拍摄快照(这没什么)。

可能有助于为您澄清事情。

于 2013-09-19T11:34:14.770 回答