Windows计划任务的一个问题

我的办公桌朝东,早上太阳刺眼,需要适当提高屏幕亮度才能看清楚屏幕,过了一会儿太阳不直射了,又要降低屏幕亮度以保护视力。老是手工操作嫌烦,就写了个小程序,放进Windows计划任务(Task Scheduler)。小程序调试的时候一切正常,但从计划任务启动时却不工作。

开始怀疑是权限的问题。设置任务以管理员账号运行,还是不行。

干脆用启动命令行的方式:

ProcessStartInfo pinfo = new ProcessStartInfo(
    FileName = "cmd.exe",
    Arguments = "/c foo.exe");
Process.Start(pinfo);

却发现根本启动不了。

又查了不少资料,最后才偶然发现,原来问题出在一个小小的设置。计划任务缺省设置是Run whether the user is logged on or not,即不管用户是否登录都运行,改成只有登录了才运行,就一切正常了。查了下,如果程序需要用户交互,比如需要打开命令行窗口,或者打开一个图形程序等,就必须设置成只有用户登录了才运行。

但是我的程序并没有界面,只是通过pinvoke调用了user32.dll和dxva2.dll里的几个api,如EnumDisplayMonitors,GetNumberOfPhysicalMonitorsFromHMONITOR,GetPhysicalMonitorsFromHMONITOR,SetMonitorBrightness等。看来,这几个api被认为是需要用户交互。

另外调用的PowrProf.dll里的几个api如PowerWriteACValueIndex,PowerSetActiveScheme等,不需要设置成只有用户登录才运行。看来,这些api被认为是不需要用户交互。

posted @   平静寄居者  阅读(147)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示