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

时间:2008-10-09 05:28:33

标签: c++ windows events listen

具体来说,我想听一下程序运行的时间并记录下列信息:时间戳,可执行文件,Windows名称和用户。

5 个答案:

答案 0 :(得分:1)

或者,使用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

答案 1 :(得分:1)

最糟糕的做法是Google桌面方式 即将您的DLL加载到每个已启动的进程中并记录信息 如果您对此感兴趣,请安装Google桌面并观看其dll加载到您的流程中。然后查看注册表以查看它是否成功 请注意,这正在进入类似行为的病毒领域。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

查看使用Perfmon API(查看MSDN以获取参考信息)。