显示器定时开启和关闭小工具
前几天,按照学院要求,学校几个LED屏幕要连续几天播放指定内容PPT,当时没有用LED自带的管理软件(因为那个软件操作起来太麻烦了),没有设置定时开启关闭显示器按钮。半夜屏幕还是开启的,结果晚上1点多领导直接拍照发信息过来,表示要加强管理。
后面想处理这个事情的第一想法就是网上找相关的程序工具,可以设置时间段,定时开启和关闭。安排部门维护的同事找了一下,竟然没有合适的工具,于是自己动手,丰衣足食。下面贴出核心代码,上传直接可以运行使用的exe程序。如果也有相同需求的也可以直接下载使用。
一、显示器的开启和关闭代码:
::PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM)-1);//开启显示器
::PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM)2);//关闭显示器
二、模拟鼠标移动操作
测试发现关闭显示器再开启后,如果没有操作鼠标,虽然显示器开启了,但是显示无信号输入又关闭了,后面加入了模拟鼠标移动的操作(原位移动),才能解决问题:
POINT lpPoint;
GetCursorPos(&lpPoint);
int mx = lpPoint.x * 65535 / GetSystemMetrics(SM_CXSCREEN);
int my = lpPoint.y * 65535 / GetSystemMetrics(SM_CYSCREEN);
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, mx, my, 0, 0); //其实鼠标还是在原来的位置,只是这个操作模拟了鼠标移动操作,告诉系统给信号到显示,从而达到点亮目的。
三、ini文件的读写
ini文件用来保存用户设定的时间,主要涉及的两个函数:
::WritePrivateProfileStringW(_T("Setttings"), _T("TimeFrom"), strTimeFrom, iniPathFIle);//写配置文件
::GetPrivateProfileStringW(_T("Setttings"), _T("TimeFrom"), _T("1971-1-1 22:00:00"), strTime.GetBuffer(MAX_PATH), MAX_PATH, iniPathFIle);//读配置文件
四、托盘实现
对话框头文件加入:
NOTIFYICONDATA m_nid;
对话框初始化函数加入:
//---------------------------托盘显示---------------------------------//
m_nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
m_nid.hWnd = this->m_hWnd;
m_nid.uID = IDR_MAINFRAME;
m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
m_nid.uCallbackMessage = WM_SHOWTASK; // 自定义的消息名称
m_nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
wcscpy_s(m_nid.szTip, _T("显示器定时开关程序")); // 信息提示条为"服务器程序"
Shell_NotifyIcon(NIM_ADD, &m_nid); // 在托盘区添加图标
对话框cpp加入函数(头文件声明):
LRESULT CMonitorSetDlg::OnShowTask(WPARAM wParam, LPARAM lParam)
{
if (wParam != IDR_MAINFRAME)
return 1;
switch (lParam)
{
case WM_RBUTTONUP: // 右键起来时弹出菜单
{
LPPOINT lpoint = new tagPOINT;
::GetCursorPos(lpoint); // 得到鼠标位置
CMenu menu;
menu.CreatePopupMenu(); // 声明一个弹出式菜单
menu.AppendMenu(MF_STRING, ID_APP_EXIT, _T("退出"));
menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x, lpoint->y, this);
HMENU hmenu = menu.Detach();
menu.DestroyMenu();
delete lpoint;
}
break;
case WM_LBUTTONDBLCLK: // 双击左键的处理
{
this->ShowWindow(SW_SHOWNORMAL); // 显示主窗口
}
break;
}
return 0;
}
对话框消息处理加入:
ON_MESSAGE(WM_SHOWTASK, OnShowTask)
OnDestroy函数中加入:
Shell_NotifyIcon(NIM_DELETE, &m_nid);
五、程序只允许单实例
App头文件加入变量:
HANDLE m_hMutex;
App的构造函数初始化变量:
m_hMutex = NULL;
App的cpp文件的InitInstance函数加入:
m_hMutex = CreateMutex(NULL, FALSE, _T("显示器定时开关程序"));
// 检查错误代码
// 如果程序已经存在并且正在运行
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
// 如果已有互斥量存在则释放句柄并复位互斥量
CloseHandle(m_hMutex);
m_hMutex = NULL;
AfxMessageBox("程序已经运行了");
// 程序退出
return FALSE;
}
程序没有加入开机启动项,使用时将exe程序创建一个快捷方式,将它拷贝到启动项里面。运行程序,设置好时间,如:22:00-08:00。以后哪怕忘记关机屏幕也会晚上22点自动关闭,第二天早上8点自动开启。外界体验良好,也可以省电和人力。
附上代码:
https://download.csdn.net/download/abcpanpeng/11238637
显示器定时开启和关闭小工具相关推荐
- Windows定时开启或关闭声音音量
场景 电脑通常不关机,连接了音箱,部分软件会可能有声音,所以睡觉前需关闭系统声音,有时候忘记关声音就比较烦.于是找到了定时开启或关闭Windows音量的解决方法 方法 使用nircmd命令行工具,创建 ...
- C# winForm 定时访问PHP页面小工具
IDE:vs2019 项目文件: 链接: https://pan.baidu.com/s/1H-Q3nc6sKQbD32pp0vuQIg 提取码: ncce 使用场景:定时访问本机(服务器)的某个页面 ...
- 使用Python实现量化交易机器人定时启动或停止小工具
个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 作为全网功能强大.灵活易用的量化交易平台,发明者量化交易平台虽然使用门槛非常低,机器人程序占用资源很少.但是我们依然希望,让机器人需 ...
- C# winForm 定时拷贝覆盖文件小工具
代码大多来源于网络 IDE:vs2017 项目文件: 链接:https://pan.baidu.com/s/1DBUwVw3Blv2vsIBhEmTq6Q 提取码:qmok 界面: 代码: using ...
- python 禁用网卡_C#语言实现定时开启或禁用网卡小程序
C#语言实现定时开启/禁用网卡 程序运行效果图 程序实现主要代码 源代码工程文件(VS2013工程文件编译通过) 查看网卡名称附图 1.win7旗舰版运行效果图: 2.程序实现主要代码: /// 网卡 ...
- C#语言实现定时开启或禁用网卡小程序
C#语言实现定时开启/禁用网卡 程序运行效果图 程序实现主要代码 源代码工程文件(VS2013工程文件编译通过) 查看网卡名称附图 1.win7旗舰版运行效果图: 2.程序实现主要代码: /// 网卡 ...
- 华为p20pro关闭HTML查看,华为p20如何调出息屏时钟 每天定时开启灭屏显示功能
谈论到华为,大家应该都不陌生,有朋友问我的华为p20怎么没有屏幕录制,另外,还有朋友想问华为p20怎么更改默认闹钟铃声,这到底是咋回事?实际上华为p20怎样设置锁屏时间呢,接下来小编为大家分享华为p2 ...
- win10系统更新在哪_一键关闭win10系统更新,一款不错的小工具
首先得划重点了,最近推文的打开量越来越低了,这是因为新版微信公众号的推文展示不再按照时间显示了,而是按照在看,星标等阅读数据打开的. 所以不想错过阿俊的每日资源分享记得把公众号加星标哦,推文点个在看, ...
- delphi 企业微信消息机器人_GitHub - guoxianlong/insight: Insight是一个可以管理企业微信群机器人的小工具,可以非常方便的往群里发布即时消息和定时消息。...
最科幻的企业微信群机器人管理工具 非常方便的发布群即时消息和定时消息,解放双手,提升沟通效率 部署教程 更新日志(2020.05.31) 修复设置为智能跳过工作日时,周日依然提醒问题. 前端修复定时成 ...
最新文章
- 单手也能创奇迹!独臂博士单手敲代码获奖 30 余项:感恩所有的善意
- 斯坦佛编程教程-Unix编程工具(二)
- [转载]无需软件合并多个TS流文件
- javaweb 要学习的东西
- Windows Sockets错误标识及对应解释
- 38行代码AC——L1-025 正整数A+B (15分)(~解题报告~)
- PHP数组——自定义排序
- CH9102 USB转串口应用体验
- LeetCode: Maximum Subarray 解题报告
- 15.3D效果,盒阴影和滤镜
- python识别银行卡数字_Python银行卡数字识别项目 (Opencv)
- windows10 查看端口占用
- java程序员集合框架面试题_常见的Java集合框架面试题目及回答
- python写入xml文件的方法_python写入xml文件的方法
- 微信小程序 公证号 根据code获取openid
- 重装Office教程
- 趣图:Python 程序员转 Java
- Linux -- snmp v3开通、认证、加密及其他
- 计算机软件系统举例,什么是系统软件应用软件举例说明
- 手机屏幕测试html5,一加手机5屏幕测试:色彩素质优秀,唯独分辨率是美中不足...
热门文章
- Java第十六天~第十七天/11.18~11.19
- # CF765F Souvenirs
- express路由子路由器_使用Express在Node中构建您的第一个路由器
- 关于“智能出价“的一些探索和实践
- 物联网考计算机是跨专业,大学生,物联网专业学什么,考研能跨什么专业考研?...
- 计算机系硕士在新西兰好找工作吗,在新西兰做程序员是一种什么体验?解析新西兰计算机专业...
- IE8:像用Windows一样用浏览器
- 从程序员辞职到知乎上市,你还以为周源的成功是偶然吗?
- 动漫《那年那兔那些事儿》弹幕爬虫采集数据分析
- 金融业移动管理驾驶舱产品功能介绍