我正在开发一个测试框架,需要能够记录用户的活动,然后重播它们。我很好地使用围绕P / Invoke(在C#中工作)的ManagedWinAPI包装器来记录鼠标和键盘活动,这有效但我认为为了使记录更有用,我需要更多地了解用户启动时会发生什么申请。
我不知道的是如何找到应用程序刚刚启动以及它是什么应用程序。所以假设用户启动我的录制应用程序然后转到开始菜单并单击“画图”我希望能够记录“Paint.exe”作为事件启动(或者如果他们点击了传递一些参数的快捷方式它将是包含参数的快捷方式的值)因为如果我想在不同的机器上播放录音,则菜单项可能位于不同的位置,因此鼠标活动可能具有欺骗性。
获取此数据需要遵循哪条路线?我无法找到术语,所以我甚至没有把正确的东西放到搜索引擎中......
答案 0 :(得分:2)
执行此操作的正确方法是编写驱动程序并使用进程管理器回调来在每次创建进程时获取通知。如果您不想这样做,可以使用像EasyHook这样的托管挂钩库并挂钩NtCreateThread / NtCreateThreadEx。如果您不想那,那么您只需要轮询新流程。
编辑:确定用户是否启动了特定进程还需要您遍历堆栈。在内核模式下,您可以使用RtlWalkFrameChain,而在用户模式下,您可以使用CaptureStackBackTrace。
编辑2:查看PsSetCreateProcessNotifyRoutine和PsSetCreateProcessNotifyRoutineEx。
答案 1 :(得分:1)
Tool Help Library可以拍摄当前进程的快照。稍后可以将其与另一个快照进行比较。但是,正如No Refunds No Returns被评论一样,此方法无法确定它是否是启动该过程的用户操作。