C# X分钟后的空白屏幕

C# X分钟后的空白屏幕,c#,.net,C#,.net,我认为我没有得到足够的休息,我的眼睛因为在电脑上而有点紧张。我尽可能多地做20分钟规则,但一旦进入区域,我往往会忘记做 我想快速制作一个应用程序如果有,请告诉我20分钟后,可能是倒计时前10秒,它会关闭屏幕或使其空白,或者迫使我休息一下 不确定C是否有权访问类似的API,也不确定它应该是控制台应用程序还是wpf应用程序或其他什么。它需要在启动时启动,并且可能位于任务栏中 有什么建议吗 编辑 如果它太宽,这就是我想要的 C能在X分钟后清空屏幕吗?然后在X秒后恢复正常。 要完成像这样的定时任务,最好

我认为我没有得到足够的休息,我的眼睛因为在电脑上而有点紧张。我尽可能多地做20分钟规则,但一旦进入区域,我往往会忘记做

我想快速制作一个应用程序如果有,请告诉我20分钟后,可能是倒计时前10秒,它会关闭屏幕或使其空白,或者迫使我休息一下

不确定C是否有权访问类似的API,也不确定它应该是控制台应用程序还是wpf应用程序或其他什么。它需要在启动时启动,并且可能位于任务栏中

有什么建议吗

编辑

如果它太宽,这就是我想要的

C能在X分钟后清空屏幕吗?然后在X秒后恢复正常。 要完成像这样的定时任务,最好使用带有 gui,或者我可以通过控制台应用程序将其设置为 尽快
要打开/关闭,可以使用以下类:

  public static class MonitorHelper
    {
        [DllImport("user32.dll")]
        public static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam);

        public static void TurnOn()
        {
            SendMessage(-1, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_ON);
        }

        public static void TurnOff()
        {
            SendMessage(-1, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
        }

        const int SC_MONITORPOWER = 0xF170;
        const int WM_SYSCOMMAND = 0x0112;
        const int MONITOR_ON = -1;
        const int MONITOR_OFF = 2;     
    }
MonitorHelper类的用法:

如果您想使用打开/关闭监视器来安排任务,您可以使用

Quartz.NET的示例:

工作类别:

class MonitorJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        MonitorHelper.TurnOff();
        Thread.Sleep(TimeSpan.FromSeconds(2));
        MonitorHelper.TurnOn();
    }
}
class ShowJob: IJob
{
    public void Execute(IJobExecutionContext context)
    {
        Window win = context.JobDetail.JobDataMap.Get("window") as Window;
        if (win != null)
        {
            Application.Current.Dispatcher.Invoke((Action)(() =>
            {
                win.Width = System.Windows.SystemParameters.FullPrimaryScreenWidth;
                win.Height = System.Windows.SystemParameters.FullPrimaryScreenHeight;
                win.WindowStartupLocation = WindowStartupLocation.CenterScreen;
                win.WindowStyle = WindowStyle.None;
                win.Topmost = true;
                win.WindowState = WindowState.Maximized;
                win.Show();
            }));

            IDictionary<string, object> map = new Dictionary<string, object>();
            map.Add("window", win);

            IJobDetail job = JobBuilder.Create<HideJob>()
             .WithIdentity("hideJob", "group")
             .UsingJobData(new JobDataMap(map))
             .Build();

            ITrigger trigger = TriggerBuilder.Create()
              .WithIdentity("hideTrigger", "group")
              .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Second))
              .Build();

            context.Scheduler.ScheduleJob(job, trigger);
        }
    }
}
class HideJob: IJob
{
    public void Execute(IJobExecutionContext context)
    {
        Window win = context.JobDetail.JobDataMap.Get("window") as Window;          
        if (win != null && Application.Current != null)
        {               
            Application.Current.Dispatcher.Invoke((Action)(() =>
            {
                win.Hide();
            }));
        }            
    }
}
配置代码:

ISchedulerFactory schedFact = new StdSchedulerFactory();
IScheduler sched = schedFact.GetScheduler();

IJobDetail job = JobBuilder.Create<MonitorJob>()
 .WithIdentity("monitorJob", "group")
 .Build();

ITrigger trigger = TriggerBuilder.Create()
  .WithIdentity("monitorTrigger", "group")            
  .StartNow()
  .WithSimpleSchedule(x => x.WithIntervalInMinutes(1).RepeatForever())
  .Build();

sched.ScheduleJob(job, trigger);

sched.Start();

要打开/关闭,可以使用以下类:

  public static class MonitorHelper
    {
        [DllImport("user32.dll")]
        public static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam);

        public static void TurnOn()
        {
            SendMessage(-1, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_ON);
        }

        public static void TurnOff()
        {
            SendMessage(-1, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
        }

        const int SC_MONITORPOWER = 0xF170;
        const int WM_SYSCOMMAND = 0x0112;
        const int MONITOR_ON = -1;
        const int MONITOR_OFF = 2;     
    }
MonitorHelper类的用法:

如果您想使用打开/关闭监视器来安排任务,您可以使用

Quartz.NET的示例:

工作类别:

class MonitorJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        MonitorHelper.TurnOff();
        Thread.Sleep(TimeSpan.FromSeconds(2));
        MonitorHelper.TurnOn();
    }
}
class ShowJob: IJob
{
    public void Execute(IJobExecutionContext context)
    {
        Window win = context.JobDetail.JobDataMap.Get("window") as Window;
        if (win != null)
        {
            Application.Current.Dispatcher.Invoke((Action)(() =>
            {
                win.Width = System.Windows.SystemParameters.FullPrimaryScreenWidth;
                win.Height = System.Windows.SystemParameters.FullPrimaryScreenHeight;
                win.WindowStartupLocation = WindowStartupLocation.CenterScreen;
                win.WindowStyle = WindowStyle.None;
                win.Topmost = true;
                win.WindowState = WindowState.Maximized;
                win.Show();
            }));

            IDictionary<string, object> map = new Dictionary<string, object>();
            map.Add("window", win);

            IJobDetail job = JobBuilder.Create<HideJob>()
             .WithIdentity("hideJob", "group")
             .UsingJobData(new JobDataMap(map))
             .Build();

            ITrigger trigger = TriggerBuilder.Create()
              .WithIdentity("hideTrigger", "group")
              .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Second))
              .Build();

            context.Scheduler.ScheduleJob(job, trigger);
        }
    }
}
class HideJob: IJob
{
    public void Execute(IJobExecutionContext context)
    {
        Window win = context.JobDetail.JobDataMap.Get("window") as Window;          
        if (win != null && Application.Current != null)
        {               
            Application.Current.Dispatcher.Invoke((Action)(() =>
            {
                win.Hide();
            }));
        }            
    }
}
配置代码:

ISchedulerFactory schedFact = new StdSchedulerFactory();
IScheduler sched = schedFact.GetScheduler();

IJobDetail job = JobBuilder.Create<MonitorJob>()
 .WithIdentity("monitorJob", "group")
 .Build();

ITrigger trigger = TriggerBuilder.Create()
  .WithIdentity("monitorTrigger", "group")            
  .StartNow()
  .WithSimpleSchedule(x => x.WithIntervalInMinutes(1).RepeatForever())
  .Build();

sched.ScheduleJob(job, trigger);

sched.Start();

您可以使用WPF应用程序和Quartz.NET

在这种情况下,您将能够向窗口添加自定义内容,例如时钟,当屏幕被阻止时,它将显示出来

MainWindow.xaml:

<Window x:Class="WPFBlankScreen.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"   
        WindowState="Minimized"
        Background="Orange" 
        KeyDown="Window_KeyDown"
        >
    <Grid>        
    </Grid>
</Window>

您可以使用WPF应用程序和Quartz.NET

在这种情况下,您将能够向窗口添加自定义内容,例如时钟,当屏幕被阻止时,它将显示出来

MainWindow.xaml:

<Window x:Class="WPFBlankScreen.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"   
        WindowState="Minimized"
        Background="Orange" 
        KeyDown="Window_KeyDown"
        >
    <Grid>        
    </Grid>
</Window>

这就是关闭屏幕的方式

using System.Runtime.InteropServices; //to DllImport

 public int WM_SYSCOMMAND = 0x0112;
 public int SC_MONITORPOWER = 0xF170; //Using the system pre-defined MSDN constants    
 that    can be used by the SendMessage() function .
 [DllImport("user32.dll")]
 private static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);
//To call a DLL function from C#, you must provide this declaration .


  private void button1_Click(object sender, System.EventArgs e)
  {

   SendMessage( this.Handle.ToInt32() , WM_SYSCOMMAND , SC_MONITORPOWER ,2 );//DLL    
   function
   }

这就是关闭屏幕的方式

using System.Runtime.InteropServices; //to DllImport

 public int WM_SYSCOMMAND = 0x0112;
 public int SC_MONITORPOWER = 0xF170; //Using the system pre-defined MSDN constants    
 that    can be used by the SendMessage() function .
 [DllImport("user32.dll")]
 private static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);
//To call a DLL function from C#, you must provide this declaration .


  private void button1_Click(object sender, System.EventArgs e)
  {

   SendMessage( this.Handle.ToInt32() , WM_SYSCOMMAND , SC_MONITORPOWER ,2 );//DLL    
   function
   }

我的答案可能并不花哨,但很简单,而且很有效:

在新的Winforms项目中,执行以下操作: -设置FormBorderStyle=None -设置BackColor=红色或任何您想要的颜色 -设置为最顶层=真 -设置窗口状态=最大化 -在窗体上放置计时器 -将计时器间隔设置为2000 -设置定时器已启用=真 -双击定时器并写关闭;在eventhandler中

完了


编辑;这只会使一个屏幕亮红色持续两秒钟,但您应该能够注意到这一点。…

我的答案可能并不花哨,但它非常简单,而且有效:

在新的Winforms项目中,执行以下操作: -设置FormBorderStyle=None -设置BackColor=红色或任何您想要的颜色 -设置为最顶层=真 -设置窗口状态=最大化 -在窗体上放置计时器 -将计时器间隔设置为2000 -设置定时器已启用=真 -双击定时器并写关闭;在eventhandler中

完了



编辑;这只会使一个屏幕亮红色两秒钟,但你应该能够注意到这一点……

这个问题太宽泛了。此外,每隔20分钟就分散注意力是一个非常糟糕的主意。这会损害你的效率和工作乐趣。当然,打断你的注意力很糟糕,但更糟糕的是,如果你毁了你的眼睛和健康。如果它成为一个问题,我总是可以完善我的想法,并解决它。这比修复你的健康更容易。我同意。。。进入该区域需要20分钟。一旦你打破了这种专注,你就离最佳生产力只有20分钟了。这个数字可以调整,因此为什么标题是X分钟。。。。。。我使用的是健康专家建议的推荐号码。下面是在.NET中创建全屏窗口的说明。请注意Win32 API的用法。这个问题太宽泛了。此外,每隔20分钟就分散注意力是一个非常糟糕的主意。这会损害你的效率和工作乐趣。当然,打断你的注意力很糟糕,但更糟糕的是,如果你毁了你的眼睛和健康。如果它成为一个问题,我总是可以完善我的想法,并解决它。这比修复你的健康更容易。我同意。。。进入该区域需要20分钟。一旦你打破了这种专注,你就离最佳生产力只有20分钟了。这个数字可以调整,因此为什么标题是X分钟。。。。。。我使用的是健康专家建议的推荐号码。下面是在.NET中创建全屏窗口的说明。请注意Win32 API的用法。好主意,我甚至没有想到使用石英。@chobo2 Quartz.NET非常适合调度任务,请再次检查我的答案,我添加了示例code.Ya。我以前用过。太棒了。比我原来计划使用定时器要好。嗯,它似乎不想在蒙蒂奥关机后醒来。似乎永远不会过去line@chobo2您能下载并查看BlankScreen解决方案吗?好主意,我甚至没有想到使用石英。@chobo2 Quartz.NET对s非常好
调度任务,再次检查我的答案,我添加了示例code.Ya。我以前用过。太棒了。比我原来计划使用定时器要好。嗯,它似乎不想在蒙蒂奥关机后醒来。似乎永远不会过去line@chobo2你能下载并检查一下黑屏解决方案吗?好的。我会试试看是否效果更好。如果需要,它可以被强制解锁吗?@chobo2是的,你可以。我在回答中添加了一个代码,当您按F11键时,窗口将立即隐藏。确定。我会试试看是否效果更好。如果需要,它可以被强制解锁吗?@chobo2是的,你可以。我在回答中添加了一个代码,当你们按F11键时,窗口将立即隐藏。