如何在使用C ++的Windows中运行程序时监听/识别?

具体来说,我想听程序运行时,并logging信息,如:时间戳,可执行文件,窗口名称和用户。

或者,使用WMI界面找出正在运行的内容并采取适当的措施。 在下面的VBScript代码中,正在用Select * from Win32_Process查询WMI子系统,以改变进程的优先级。 找出Win32_Process还有哪些其他的属性,你应该找到你想要的方向。

 Const NORMAL_PRIORITY = 32 Const LOW_PRIORITY = 64 Const REALTIME_PRIORITY = 128 Const HIGH_PRIORITY = 256 Const BELOWNORMAL_PRIORITY = 16384 Const ABOVENORMAL_PRIORITY = 32768 Function SetPriority( sProcess, nPriority ) Dim sComputer Dim oWMIService Dim cProcesses Dim oProcess Dim bDone bDone = False sComputer = "." Set oWMIService = GetObject("winmgmts:\\" & sComputer & "\root\cimv2") Set cProcesses = oWMIService.ExecQuery ("Select * from Win32_Process Where Name = '" & sProcess & "'") For Each oProcess in cProcesses oProcess.SetPriority( nPriority ) bDone = True Next SetPriority = bDone End Function 

Google桌面的方式是这样做的最淫秽的方式
即将您的DLL加载到每个启动的进程并记录信息。
如果你更感兴趣,安装谷歌桌面,并观察它的DLL加载到你的进程。 然后在注册表中看看它是否。
要注意,这是进入病毒行为的领域。

我将使用PSAPI函数EnumProcesses ()来定期获取正在运行的进程的列表。

您可以设置WMI永久事件订阅来监视进程创建并记录详细信息。 我在这里有一些示例 – 其中一个示例监视notepad.exe创建并将事件记录在txt文件中。 永久事件订阅会始终监视事件,但是如果要在应用程序的持续时间内监视事件,则可以使用WMI COM API和C ++ – 在这两种情况下,WQL事件查询都是相同的。 文档在这里 。

研究使用Perfmon API(请参阅MSDN的参考资料)。