在 Windows 上用 C++ 监视某个进程的有效方法

问题描述

我想在我正在编写的工具中监控给定的进程。 用户可以选择一个可执行文件,并且该工具应该能够判断该进程何时开始和结束。

我能够(在某种程度上)实现这一目标的唯一方法是使用 QProcess 偶尔使用过滤器运行任务列表,但这需要大量工作,而且实际上不是解决方案。

有没有什么好的方法可以实现这一点,尤其是不必经常检查正在运行的进程?

编辑: 尝试编译 Microsoft 文档中的示例时,我收到以下错误error: cast from pointer to smaller type 'DWORD' (aka 'unsigned long') loses information

error: cast from 'BYTE*' {aka 'unsigned char*'} to 'DWORD' {aka 'long unsigned int'} loses precision [-fpermissive]
     _tprintf( TEXT("\n     Base address   = 0x%08X"),(DWORD) me32.modBaseAddr );
                                                                    ^~~~~~~~~~~

当我删除两个打印件时,我收到以下输出(我只附加一个进程)

=====================================================
PROCESS NAME:  i
-------------------------------------------------------
  Process ID        = 0x00000BAC
  Thread count      = 4
  Parent process ID = 0x000047AC
  Priority base     = 8
  Priority class    = 32

     MODULE NAME:     i
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0xFFFF
     Ref count (p)  = 0xFFFF
     Base size      = 1048576

     MODULE NAME:     n
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0xFFFF
     Ref count (p)  = 0xFFFF
     Base size      = 2052096

     MODULE NAME:     K
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0xFFFF
     Ref count (p)  = 0xFFFF
     Base size      = 774144

     MODULE NAME:     K
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0xFFFF
     Ref count (p)  = 0xFFFF
     Base size      = 2916352

     MODULE NAME:     m
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x000F
     Ref count (p)  = 0x000F
     Base size      = 647168

     MODULE NAME:     Q
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0001
     Ref count (p)  = 0x0001
     Base size      = 5787648

     MODULE NAME:     Q
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0003
     Ref count (p)  = 0x0003
     Base size      = 6524928

     MODULE NAME:     l
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0005
     Ref count (p)  = 0x0005
     Base size      = 106496

     MODULE NAME:     A
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0001
     Ref count (p)  = 0x0001
     Base size      = 704512

     MODULE NAME:     G
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x000A
     Ref count (p)  = 0x000A
     Base size      = 172032

     MODULE NAME:     s
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0001
     Ref count (p)  = 0x0001
     Base size      = 634880

     MODULE NAME:     w
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0004
     Ref count (p)  = 0x0004
     Base size      = 139264

     MODULE NAME:     g
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x000A
     Ref count (p)  = 0x000A
     Base size      = 1093632

     MODULE NAME:     R
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0007
     Ref count (p)  = 0x0007
     Base size      = 1224704

     MODULE NAME:     d
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0001
     Ref count (p)  = 0x0001
     Base size      = 192512

     MODULE NAME:     m
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0002
     Ref count (p)  = 0x0002
     Base size      = 643072

     MODULE NAME:     l
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0004
     Ref count (p)  = 0x0004
     Base size      = 1454080

     MODULE NAME:     U
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x000A
     Ref count (p)  = 0x000A
     Base size      = 1703936

     MODULE NAME:     o
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0003
     Ref count (p)  = 0x0003
     Base size      = 1220608

     MODULE NAME:     u
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0008
     Ref count (p)  = 0x0008
     Base size      = 1048576

     MODULE NAME:     c
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0006
     Ref count (p)  = 0x0006
     Base size      = 3493888

     MODULE NAME:     S
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0002
     Ref count (p)  = 0x0002
     Base size      = 7610368

     MODULE NAME:     W
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0001
     Ref count (p)  = 0x0001
     Base size      = 438272

     MODULE NAME:     l
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0004
     Ref count (p)  = 0x0004
     Base size      = 86016

     MODULE NAME:     M
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0001
     Ref count (p)  = 0x0001
     Base size      = 118784

     MODULE NAME:     N
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0001
     Ref count (p)  = 0x0001
     Base size      = 98304

     MODULE NAME:     U
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0001
     Ref count (p)  = 0x0001
     Base size      = 188416

     MODULE NAME:     V
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0001
     Ref count (p)  = 0x0001
     Base size      = 40960

     MODULE NAME:     W
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0001
     Ref count (p)  = 0x0001
     Base size      = 159744

     MODULE NAME:     U
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0001
     Ref count (p)  = 0x0001
     Base size      = 647168

     MODULE NAME:     C
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0001
     Ref count (p)  = 0x0001
     Base size      = 49152

     MODULE NAME:     N
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0001
     Ref count (p)  = 0x0001
     Base size      = 49152

     MODULE NAME:     S
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0001
     Ref count (p)  = 0x0001
     Base size      = 163840

     MODULE NAME:     Q
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0002
     Ref count (p)  = 0x0002
     Base size      = 7151616

     MODULE NAME:     d
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0001
     Ref count (p)  = 0x0001
     Base size      = 2506752

     MODULE NAME:     d
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0002
     Ref count (p)  = 0x0002
     Base size      = 995328

     MODULE NAME:     I
     Executable     = C
     Process ID     = 0x00000BAC
     Ref count (g)  = 0x0001
     Ref count (p)  = 0x0001
     Base size      = 196608

     THREAD ID      = 0x00002F84
     Base priority  = 8
     Delta priority = 0


     THREAD ID      = 0x00003E18
     Base priority  = 8
     Delta priority = 0


     THREAD ID      = 0x00001908
     Base priority  = 8
     Delta priority = 0


     THREAD ID      = 0x00005524
     Base priority  = 8
     Delta priority = 0

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)