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