c#拦截程序的运行

来源:百度知道 编辑:UC知道 时间:2024/07/02 16:38:17
在c#的winform合作windows服务编程中。。如何拦截一个程序的运行状态,,比如当IE或者某一个程序刚刚启动时,立即通知我的程序。。什么技术可以实现。。大家有经验的麻烦介绍一下哈
打错鸟。。合作=或者 回二楼的哈,我想用钩子来做应该是很好的 你能不能介绍一下它是属于哪种消息,我要安装什么钩子才能截获到呢。

有几种方法:

一.Ring3Hook: 可以写个驱动程序, 只需要在初始化代码中用PsSetCreateProcessNotifyRoutine注册一个回调函数就可以在接下去任何process创建时获得通知。 然后只要想办法通知ring3的前端程序就可以了。
如果想在ring3通过api hook实现, 那么需要至少hook所有已存在process的创建进程的api, 据我所知, 至少需要hook各进程内kernel32.dll中的CreateProcessInternalW和advapi32.dll中的CreateProcessWithLogonW,CreateProcessWithTokenW (也许还有漏掉的, 不过hook这几个api后普通程序的创建都能抓住了)

二.使用普通的HOOK,HOOK WH_SHELL消息.但是有遗漏的.只能HOOK到通过ShellExecute启动的程序.象QQ就HOOK不到.

三.做一个dll,在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows键下修改键值AppInit_DLLs,把你的dll及路径加上。每个程序启动后都会Load你的dll

用多线程,在程序中开个多线程,一直循环检测某些程序是否运行,
也可以用timer控件做,看自己的选择了。

用系统勾子来做。

这是一种消息机制,详细技术属于windows系统编程,
请自己在网上搜索一下 勾子、系统勾子、hook 等

在C#中可能需要导入windows api去做,研究的人不少,我就不啰嗦了,你自己先找找