C#监听外部程序启动
我是一个C#小白,最近想做一个小工具,有一个功能是这样的:工具后台运行,监听外部应用程序启用情况(基本就固定那几个),当监听到目标应用程序启动时,执行相关业务逻辑。主要是不知道该怎么监听外部应用程序的启动,网上找过相关资料,基本上都是同样的做法,那就是死循环获取Process数组,然后遍历Process挨个对比ProcessName。我尝试过这种操作,发现资源消耗太高,我想让这个工具尽可能的没有存在感。这个方案还有一个问题,那就是目标程序启动之后直到程序关闭都一直在触发判断下面这段代码:
if ("notepad" == process.ProcessName.ToLower()) {
Console.WriteLine("notepad启动了");
}
所有想到了用hook的方式来监听,但自己对hook一无所知,想听听各位前辈的思路,感谢! 用hook感觉也不太好实现 钩子的消息类型里有双击,然后监听下双击时的消息类型,看看有没有打开可执行文件的类型,如有你找到了应该就没问题,不然就只有动态的监听 要么继续你这种方法,循环后面加上sleep可以大幅度降低资源消耗 就是这个方法 但是你不能不加延时啊。最起码sleep(100).要不你机器再牛也不行 定时轮询会有这个问题,间隔太短,资源占用就太多,间隔太长就会不及时,可以使用
WINAPI RegisterShellHookWindow 来监视窗口创建,或者用WMI WbemScripting.SWbemSink 注册相应事件
页:
[1]