如何检查由CreateDesktop()函数创建的新桌面中是否存在其他进程(我以外的进程)?

时间:2018-10-12 19:27:17

标签: delphi

我有一个由CreateProcess()创建的新桌面(通过CreateDesktop()执行)的应用程序。然后,我想知道是否存在某些特定功能(或其他方式),有可能知道是否存在在此新桌面内运行的其他进程(我的除外),例如当我在此新桌面上执行任何其他软件时,是否有可能检测到您的在场吗?

如果有任何建议/解决方案,谢谢您。

1 个答案:

答案 0 :(得分:6)

进程未绑定到特定的桌面。各个线程都是。一个进程可以有多个线程同时在不同的桌面上运行。

对于UI应用程序,您可以使用EnumDesktopWindows()GetWindowThreadProcessId()来检查GetCurrentProcessId()来查找桌面中正在运行的所有窗口。

/ p>

但是,对于非UI应用程序,您必须枚举系统上所有正在运行的线程,例如使用CreateToolhelp32Snapshot(),使用GetThreadDesktop()来枚举哪些属于您的桌面以及哪些属于您的桌面。然后使用GetProcessIdOfThread()GetCurrentProcessId()检查它们是否属于您的进程。