对Windows中的软件执行时间设置每日限制

时间:2014-10-20 11:17:09

标签: windows winapi architecture

动机:我沉迷于特定的在线游戏。

目标:编写一个程序,对每个特定游戏的播放时间设置每日限制。

背景:我从未编写过Windows代码。

我的想法:Windows当然有一些用于管理软件权限的API。我需要编写一个在后台运行的程序,并定期检查游戏是否已播放。如果是 - 将每日总时间相加并使用Windows API在超出限制时阻止游戏。也许甚至可以注册一个在游戏启动时会收到通知的监听器,这样就不需要定期轮询游戏状态。

问题

  1. 请帮我定义此类程序的全局范围,并指出可能感兴趣的Windows API部分。

  2. 我是否有任何潜在的陷阱需要注意?

  3. 我应该使用哪种编程语言(我可以使用它们中的任何一种,或者Windows API仅限于某些语言)?

  4. 我知道有很多程序可以满足我的需求,但我真的想自己写这个程序。

    感谢。

1 个答案:

答案 0 :(得分:1)

听起来像PowerShell的工作。因为它是Microsoft的任务自动化和配置管理框架,包括命令行shell和构建在.NET Framework上的相关脚本语言。此外,管理用户权限也很容易。

通过Task Scheduler你可以创建这样的守护进程

  

在后台运行并定期检查游戏是否已播放

简单的工作流程可以像这样实现:

  • 使用PowerShell ISE创建并保存my_script.ps1
  • 将此my_script.ps1添加为计划任务
  • 超过时间时会发出警告弹出窗口(这样可以保存游戏)
  • 继续作为守护进程运行检查并杀死与游戏相关的PID

对于脚本设计:

#Parameter Set: Name
Get-Process [[-Name] <String[]> ] [-ComputerName <String[]> ] [-FileVersionInfo] [-Module] [ <CommonParameters>]
你可以see how here。然后

$file = Get-Content my_time_file.utf8

将保留每日时间限制的历史记录。如何readwrite个文件。 Aplly一些解析和条件逻辑。 当时间结束时 - 给warning pop-up并终止PID(让我们说5分钟):

[System.Windows.Forms.MessageBox]::Show("You are about the exceed the daily time limit. Please save your game. Game process will be terminated in 5 minutes!") 

但毕竟它取决于你。

的人经常是
  

沉迷于特定的在线游戏

非常足智多谋。