前几天,按照学院要求,学校几个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

显示器定时开启和关闭小工具相关推荐

  1. Windows定时开启或关闭声音音量

    场景 电脑通常不关机,连接了音箱,部分软件会可能有声音,所以睡觉前需关闭系统声音,有时候忘记关声音就比较烦.于是找到了定时开启或关闭Windows音量的解决方法 方法 使用nircmd命令行工具,创建 ...

  2. C# winForm 定时访问PHP页面小工具

    IDE:vs2019 项目文件: 链接: https://pan.baidu.com/s/1H-Q3nc6sKQbD32pp0vuQIg 提取码: ncce 使用场景:定时访问本机(服务器)的某个页面 ...

  3. 使用Python实现量化交易机器人定时启动或停止小工具

    个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 作为全网功能强大.灵活易用的量化交易平台,发明者量化交易平台虽然使用门槛非常低,机器人程序占用资源很少.但是我们依然希望,让机器人需 ...

  4. C# winForm 定时拷贝覆盖文件小工具

    代码大多来源于网络 IDE:vs2017 项目文件: 链接:https://pan.baidu.com/s/1DBUwVw3Blv2vsIBhEmTq6Q 提取码:qmok 界面: 代码: using ...

  5. python 禁用网卡_C#语言实现定时开启或禁用网卡小程序

    C#语言实现定时开启/禁用网卡 程序运行效果图 程序实现主要代码 源代码工程文件(VS2013工程文件编译通过) 查看网卡名称附图 1.win7旗舰版运行效果图: 2.程序实现主要代码: /// 网卡 ...

  6. C#语言实现定时开启或禁用网卡小程序

    C#语言实现定时开启/禁用网卡 程序运行效果图 程序实现主要代码 源代码工程文件(VS2013工程文件编译通过) 查看网卡名称附图 1.win7旗舰版运行效果图: 2.程序实现主要代码: /// 网卡 ...

  7. 华为p20pro关闭HTML查看,华为p20如何调出息屏时钟 每天定时开启灭屏显示功能

    谈论到华为,大家应该都不陌生,有朋友问我的华为p20怎么没有屏幕录制,另外,还有朋友想问华为p20怎么更改默认闹钟铃声,这到底是咋回事?实际上华为p20怎样设置锁屏时间呢,接下来小编为大家分享华为p2 ...

  8. win10系统更新在哪_一键关闭win10系统更新,一款不错的小工具

    首先得划重点了,最近推文的打开量越来越低了,这是因为新版微信公众号的推文展示不再按照时间显示了,而是按照在看,星标等阅读数据打开的. 所以不想错过阿俊的每日资源分享记得把公众号加星标哦,推文点个在看, ...

  9. delphi 企业微信消息机器人_GitHub - guoxianlong/insight: Insight是一个可以管理企业微信群机器人的小工具,可以非常方便的往群里发布即时消息和定时消息。...

    最科幻的企业微信群机器人管理工具 非常方便的发布群即时消息和定时消息,解放双手,提升沟通效率 部署教程 更新日志(2020.05.31) 修复设置为智能跳过工作日时,周日依然提醒问题. 前端修复定时成 ...

最新文章

  1. 单手也能创奇迹!独臂博士单手敲代码获奖 30 余项:感恩所有的善意
  2. 斯坦佛编程教程-Unix编程工具(二)
  3. [转载]无需软件合并多个TS流文件
  4. javaweb 要学习的东西
  5. Windows Sockets错误标识及对应解释
  6. 38行代码AC——L1-025 正整数A+B (15分)(~解题报告~)
  7. PHP数组——自定义排序
  8. CH9102 USB转串口应用体验
  9. LeetCode: Maximum Subarray 解题报告
  10. 15.3D效果,盒阴影和滤镜
  11. python识别银行卡数字_Python银行卡数字识别项目 (Opencv)
  12. windows10 查看端口占用
  13. java程序员集合框架面试题_常见的Java集合框架面试题目及回答
  14. python写入xml文件的方法_python写入xml文件的方法
  15. 微信小程序 公证号 根据code获取openid
  16. 重装Office教程
  17. 趣图:Python 程序员转 Java
  18. Linux -- snmp v3开通、认证、加密及其他
  19. 计算机软件系统举例,什么是系统软件应用软件举例说明
  20. 手机屏幕测试html5,一加手机5屏幕测试:色彩素质优秀,唯独分辨率是美中不足...

热门文章

  1. Java第十六天~第十七天/11.18~11.19
  2. # CF765F Souvenirs
  3. express路由子路由器_使用Express在Node中构建您的第一个路由器
  4. 关于“智能出价“的一些探索和实践
  5. 物联网考计算机是跨专业,大学生,物联网专业学什么,考研能跨什么专业考研?...
  6. 计算机系硕士在新西兰好找工作吗,在新西兰做程序员是一种什么体验?解析新西兰计算机专业...
  7. IE8:像用Windows一样用浏览器
  8. 从程序员辞职到知乎上市,你还以为周源的成功是偶然吗?
  9. 动漫《那年那兔那些事儿》弹幕爬虫采集数据分析
  10. 金融业移动管理驾驶舱产品功能介绍