我有一个MVVM自助服务终端应用程序,当它在一段时间内处于非活动状态时我需要重新启动.我正在使用Prism和Unity来促进MVVM模式.我重新启动了,我甚至知道如何处理计时器.我想知道的是如何知道什么时候发生了活动,即任何鼠标事件.我知道如何做到这一点的唯一方法是订阅主窗口的预览鼠标事件.这打破了MVVM的想法,不是吗?
我已经考虑将我的窗口暴露为将这些事件暴露给我的应用程序的接口,但这需要窗口实现该接口,这似乎也打破了MVVM.
这是这个问题的后续:Alt Tab Overlay Win32 identificator。
我尝试使用 Winuser API 中的 SetWinEventHook 函数捕捉 alt-tab 切换菜单打开(和退出)的时刻。但是,该钩子不会捕获任何事件(例如最小化窗口),因此不会调用 HandleWinEvent。
下面的代码很大程度上受到MSDN页面上提供的代码的启发
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
#endif
#ifndef WINVER
#define WINVER 0x0501
#endif
#include "conio.h"
#include <windows.h>
#include <iostream>
// Global variable.
HWINEVENTHOOK g_hook;
// Prototype
void HandleWinEvent(HWINEVENTHOOK , DWORD , HWND ,
LONG , LONG ,
DWORD , DWORD );
// Initializes COM and sets up the event hook.
//
void InitializeMSAA()
{
CoInitialize(NULL);
g_hook = SetWinEventHook(
EVENT_MIN ,EVENT_MAX, // …Run Code Online (Sandbox Code Playgroud)