我想要监控系统中某个进程的启动情况,请问如何做,大概给一个思路~~~比如说我打开了一个记事本,我的程序可以立即反应并且提示有一个记事本打开了~~~用钩子吗?高人指点~
解决方案 »
- CHtmlView OnNewWindow3 乱码问题
- 有了位图句柄,如何在位图上写字?
- 请教关于避免程序多个实例同时运行的方法
- 向recordset添加记录时,如何让记录ID自增
- 有无方法可行?天寒地冻,小弟跪求了,在线等待!!!!
- 双目实现视频捕获的问题
- 有谁知道怎么在windowsXP下安装studio.net呢????????????
- 关于Outlook Automation的CreateDispatch的问题,焦急求教!
- setbitmap内存泄漏问题
- 怎么做提示?
- 如何获取一个正在写入的文件的大小?vc中能像vb里一样使用FileSystemObject吗?
- 问一个关于toolbar的问题
在调用这个 DllMain 函数过程 中你可以向你的 应用程序 发信息这比 守侯进程 的优点是 实时,不需要论询 而且不会 遗漏进程 (有的进程 启动了不久 就退出)
要想系统通知你新的线程运行了,你可以使用APC方法,写一个驱动,主要的两个函数是:
KeInitializeApc KeInsertQueueApc,在CODEPROJECT.COM中几篇文章你可以看看。
参考例子:
Option Explicit
Dim Locator As SWbemLocator
Dim Services As SWbemServices
Dim WithEvents StatusSink As SWbemSinkPrivate Sub KillEvents()
StatusSink.Cancel
Set StatusSink = Nothing
End SubPrivate Sub Form_Load()
Dim Query As String Set StatusSink = New SWbemSink
Set Locator = CreateObject("WbemScripting.SWbemLocator")
Set Services = Locator.ConnectServer() Query = "SELECT * FROM __InstanceCreationEvent "
Query = Query + "WITHIN 1 "
Query = Query + "WHERE TargetInstance ISA 'Win32_Process'" Services.ExecNotificationQueryAsync StatusSink, Query
End Sub
Private Sub StatusSink_OnObjectReady(ByVal StatusEvent As SWbemObject, _
ByVal EventContext As SWbemNamedValueSet) Dim arr
Dim strQue As String
Dim i As Integer List1.Clear
arr = Split(StatusEvent.GetObjectText_, Chr(10))
For i = LBound(arr) To UBound(arr)
List1.AddItem arr(i)
Next i
End Sub
Private Sub StatusSink_OnCompleted(ByVal HResult As WbemErrorEnum, _
ByVal ErrorObject As SWbemObject, _
ByVal EventContext As SWbemNamedValueSet) If HResult <> wbemErrCallCancelled Then
'错误处理
End If
End Sub