VC获得显示器状态(捕获息屏/亮屏事件)
来源:互联网 发布:mac自动关机 时间设置 编辑:程序博客网 时间:2024/04/29 10:06
在vista版本之后, 应该注册GUID_CONSOLE_DISPLAY_STATE事件了, 上代码:
#include "stdafx.h"#include <windows.h>#include <iostream>using namespace std;LRESULT CALLBACK WindowProc(_In_ HWND hwnd,_In_ UINT uMsg,_In_ WPARAM wParam,_In_ LPARAM lParam);HWND createMsgWin() {HINSTANCE lvhInstance;lvhInstance = GetModuleHandle(NULL); //获取一个应用程序或动态链接库的模块句柄 WNDCLASS lvwcCls;lvwcCls.cbClsExtra = 0;lvwcCls.cbWndExtra = 0;lvwcCls.hCursor = LoadCursor(lvhInstance, IDC_ARROW); //鼠标风格 lvwcCls.hIcon = LoadIcon(lvhInstance, IDI_APPLICATION); //图标风格 lvwcCls.lpszMenuName = NULL; //菜单名 lvwcCls.style = CS_HREDRAW | CS_VREDRAW; //窗口的风格 lvwcCls.hbrBackground = (HBRUSH)COLOR_WINDOW; //背景色 lvwcCls.lpfnWndProc = WindowProc; //【关键】采用自定义消息处理函数,也可以用默认的DefWindowProc lvwcCls.lpszClassName = _T("RenderWindow"); //【关键】该窗口类的名称 lvwcCls.hInstance = lvhInstance; //【关键】表示创建该窗口的程序的运行实体代号 RegisterClass(&lvwcCls);HWND lvhwndWin = CreateWindow(_T("RenderWindow"), //【关键】上面注册的类名lpszClassName,要完全一致 L"Zombie", //窗口标题文字 WS_OVERLAPPEDWINDOW, //窗口外观样式 0, //窗口相对于父级的X坐标 0, //窗口相对于父级的Y坐标 30, //窗口的宽度 20, //窗口的高度 NULL, //没有父窗口,为NULL NULL, //没有菜单,为NULL lvhInstance, //当前应用程序的实例句柄 NULL); //没有附加数据,为NULL //去标题栏 return lvhwndWin;}LRESULT CALLBACK WindowProc(_In_ HWND hwnd,_In_ UINT uMsg,_In_ WPARAM wParam,_In_ LPARAM lParam){//cout << "MSG:" << uMsg << ",wParam:" << wParam << ",lParam:" << lParam << endl;switch (uMsg){case WM_POWERBROADCAST:{if (wParam == PBT_POWERSETTINGCHANGE) {POWERBROADCAST_SETTING* lvpsSetting = (POWERBROADCAST_SETTING*)lParam;byte lvStatus = *(lvpsSetting->Data);if (lvStatus != 0) {cout << "Monitor is turn on" << endl;}else {cout << "Monitor is turn off" << endl;}//cout << (int)lvStatus << endl;}break;}}return DefWindowProc(hwnd, uMsg, wParam, lParam);}HWND mhMsgRec;BOOL WINAPI ConsoleHandler(DWORD pvdwMsgType){if (pvdwMsgType == CTRL_C_EVENT){PostMessage(mhMsgRec, WM_DESTROY, 0, 0);return TRUE;}else if (pvdwMsgType == CTRL_CLOSE_EVENT){PostMessage(mhMsgRec, WM_DESTROY, 0, 0);return TRUE;}return FALSE;}int main(){mhMsgRec = createMsgWin();//这个函数也是dll里的,得到控制台的句柄HPOWERNOTIFY lvhpNotify = RegisterPowerSettingNotification(mhMsgRec, &GUID_CONSOLE_DISPLAY_STATE, DEVICE_NOTIFY_WINDOW_HANDLE);SetConsoleCtrlHandler(ConsoleHandler, TRUE);bool lvbRet;MSG lvMSG;while ((lvbRet = GetMessage(&lvMSG, NULL, 0, 0)) != 0){TranslateMessage(&lvMSG);DispatchMessage(&lvMSG);if (lvMSG.message == WM_DESTROY) {break;}}UnregisterPowerSettingNotification(lvhpNotify);CloseWindow(mhMsgRec);return 0;}
阅读全文
0 0
- VC获得显示器状态(捕获息屏/亮屏事件)
- Java捕获窗口状态事件
- VC 捕获Windows关机事件
- VC获得目前网络状态
- 如何在VC程序中获得当前显示器的分辨率
- VC获得显示器的分辨率、刷新频率等
- VC++实现Windows中双显示器(主屏、扩展屏)
- VC获得本机网络连接状态
- VC获得本机网络连接状态
- VC获得本机网络连接状态
- VC获得本机网络连接状态
- VC获得本机网络连接状态
- VC获得本机网络连接状态
- 事件捕获/事件捕获
- VC下捕获并显示异常(调试状态下)
- 显示器花屏
- 显示器闪屏
- VC++实现Windows中双显示器(主屏、扩展屏)各种操作的源码工程
- 重新预览图片内容
- JPA基本用法
- leetcode 3
- 用不到50行的Python代码构建最小的区块链
- kafka+sparkstreaming wordcount
- VC获得显示器状态(捕获息屏/亮屏事件)
- java response 文件下载 文件名 乱码
- mediawiki初探
- Linux开机启动程序详解
- 【swift】圆形数据表示百分比
- Majority Element
- 前端中.alert&&.confirm的区别
- 【caffe源代码的梳理之三】Net
- 八皇后问题