使用RegisterDeviceNotification打开/关闭显示器时收到通知?

时间:2016-03-11 15:18:43

标签: c++ windows winapi hardware

我目前正试图找到一种可靠的方法,以便在我的服务中打开/关闭显示器时(或者,如果没有其他机会,在其中' s& #34;帮助应用程序"在用户上下文中运行)。大多数建议我找到了" WM_SYSCOMMAND"似乎不符合我要求的方式(例如,此消息不会在后台发送到Windows)。

毕竟,似乎使用 RegisterPowerSettingsNotification()是一个很好的解决方案(也可以在服务中运行),但它需要Windows Vista或更高版本。

我尝试与 RegisterDeviceNotification()类似,每次显示器开启或关闭时我都会看到 SERVICE_CONTROL_DEVICEEVENT 出现:

...

DEV_BROADCAST_DEVICEINTERFACE filter;
ZeroMemory(&filter, sizeof(DEV_BROADCAST_DEVICEINTERFACE));

filter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
filter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
filter.dbcc_classguid = GUID_DEVINTERFACE_DISPLAY_ADAPTER;    // ???

// m_hStatus is defined somewhere other and is of type SERVICE_STATUS_HANDLE
HDEVNOTIFY hDevEvents = RegisterDeviceNotification(m_hSvcStatus, &filter, 
                        DEVICE_NOTIFY_SERVICE_HANDLE | DEVICE_NOTIFY_ALL_INTERFACE_CLASSES);

...

到目前为止工作不幸的是,如果连接了USB设备,我也会收到此通知。如果我删除 DEVICE_NOTIFY_ALL_INTERFACE_CLASSES ,我什么都没有了。任何人都可以告诉我如何修改上面的代码,这样我才会在显示器打开或关闭时收到通知吗?

0 个答案:

没有答案