我正在尝试编写一个小程序来跟踪用户的不活动状态,并在大约 30 分钟后杀死 Windows 7 计算机上所有正在运行的 adobe 阅读器应用程序。我们使用的 paychex 软件不允许同时打开一个以上的工资单,因此如果他们没有关闭并且下一位员工来使用计算机,他们就无法查看他们的工资单。
也许使用批处理文件或脚本更容易,但我对 C++ 相当了解,所以这就是我开始的。
我正在尝试编写一个小程序来跟踪用户的不活动状态,并在大约 30 分钟后杀死 Windows 7 计算机上所有正在运行的 adobe 阅读器应用程序。我们使用的 paychex 软件不允许同时打开一个以上的工资单,因此如果他们没有关闭并且下一位员工来使用计算机,他们就无法查看他们的工资单。
也许使用批处理文件或脚本更容易,但我对 C++ 相当了解,所以这就是我开始的。
检测 Windows 空闲是最困难的部分,但幸运的是您拥有 Windows 7 并且可以使用IIdleTrigger
.
之后,只需向 Adobe Reader 发送关闭窗口消息即可。查找包含工资单名称的标题,以便关闭正确的实例。
检测 Windows 空闲是最难的部分
实际上这很容易。您可以使用GetLastInputInfo 函数。这是我创建的一个程序的片段,它正是这样做的:
unsigned idle_time;
// get idle time
LASTINPUTINFO last_input_info;
DWORD this_time;
last_input_info.cbSize = sizeof(LASTINPUTINFO);
GetLastInputInfo(&last_input_info);
#pragma warning(suppress: 28159) // Consider using GetTickCount64() instead
this_time = GetTickCount();
idle_time = this_time - last_input_info.dwTime;
请注意,这不是基于事件的。你应该把它放在一个循环中,并根据你需要的频率不时使用睡眠来检查空闲时间。根据您的描述,每隔几秒钟应该没问题。