Visual c++ 如何计算进程在windows中启动所需的时间?

Visual c++ 如何计算进程在windows中启动所需的时间?,visual-c++,process,window,etw,Visual C++,Process,Window,Etw,我想要计算任何进程在启动时加载所花费的时间?想要计算从双击应用程序图标到应用程序完全加载所有依赖项并等待空闲的时间。我只希望这些应用程序有一个窗口,而不是基于控制台的应用程序或服务 对于初始方法,我使用windows ETW跟踪来跟踪事件\跟踪\标志\进程类型事件。因此,与进程创建、终止或正在运行的进程相关的事件将由我的使用者接收。现在我进一步筛选,只获取与事件\跟踪\类型\开始相关的事件 现在,当一个事件出现在我的回调中时,我可以得到正在启动的进程的pid。例如,假设我启动了OUTLOOK.e

我想要计算任何进程在启动时加载所花费的时间?想要计算从双击应用程序图标到应用程序完全加载所有依赖项并等待空闲的时间。我只希望这些应用程序有一个窗口,而不是基于控制台的应用程序或服务

对于初始方法,我使用windows ETW跟踪来跟踪事件\跟踪\标志\进程类型事件。因此,与进程创建、终止或正在运行的进程相关的事件将由我的使用者接收。现在我进一步筛选,只获取与事件\跟踪\类型\开始相关的事件


现在,当一个事件出现在我的回调中时,我可以得到正在启动的进程的pid。例如,假设我启动了OUTLOOK.exe pid:3946,我将在回调中得到一个pid=3946的事件。有人能告诉我OUTLOOK.exe或任何其他应用程序完全加载其窗口并准备好用户输入所需的时间吗。

您可能正在寻找WaitForInput是的,我确实这样做了……事实上。类似这样的代码:long-long-start=nanoseconds\u now;如果0==WaitForInputDeleHProcess,无限延时=纳秒\u now-Data->first;疑问:我使用ETW跟踪事件跟踪标记进程类型,只考虑正在启动的进程,使用宏事件跟踪类型启动,并使用WaitForInputle计算进程的启动时间。但对于像Outlook这样的应用程序,Microsoft Word在单击时会发出启动屏幕,然后加载初始屏幕WaitForInput,它给出的是启动屏幕加载所需的时间,而不是应用程序的启动时间。因此,我怀疑是否有一种方法可以检测应用程序在启动时是否弹出启动屏幕?我不相信有一种可靠的、通用的方法可以区分启动屏幕和真正的主窗口。就操作系统而言,应用程序刚刚建立了一个窗口,准备接受用户输入——它不知道该窗口是否会忽略所有输入。您可以尝试一些启发式方法,例如,此窗口是否有任何子控件?如果不是,它可能是一个启动屏幕。谢谢Igor,我只是这样做了…我做了一个窗口,以区分启动屏幕和预期的主窗口。工作得很好。