请指点在系统打创建进程之前和之前如何马上得到通知?
谢谢!

解决方案 »

  1.   

    试试Hook API,CreateProcess,
    另一种不是很实时的方法,是PSAPI.
      

  2.   

    网上这个例子可以ps_manager.zip,除了运行内存偏大外,没什么其他毛病。
    它是通过这2个函数来实现的:
    void CPsManagerDlg::CProcessesList::DeleteZoobieItem(unsigned long aProcesses[],DWORD cProcess)
    {
    for(int i=0;i<GetItemCount();i++){
    for(unsigned long idx=0;idx<cProcess;idx++){
    CString sPID;
    sPID.Format( "%d", aProcesses[ idx ] );
    if(sPID.CompareNoCase(GetItemText(i,1)) == 0) break;
    }
    if(idx >= cProcess) DeleteItem(i);
    }
    }//实现了查找不再运行的程序就从LIST中删除
    int CPsManagerDlg::CProcessesList::FindPIDIndex( DWORD pid)
    {

    CString sPID;
    sPID.Format( "%d", pid); for(int i=0;i<GetItemCount();i++){
    if(sPID.CompareNoCase(GetItemText(i,1)) == 0) return i;
    }
    return -1;
    }//实现了查找已经存在的就不刷新LIST 
    void CPsManagerDlg::RefreshList() 
    {
    // m_ctlProcesses.DeleteAllItems();
    DWORD aProcesses[ 1024 ];
        DWORD cProcesses = GetProcessIDs( aProcesses, sizeof( aProcesses ) ); DWORD idxList = 0;
    m_ctlProcesses.DeleteZoobieItem(aProcesses,cProcesses);
    for( DWORD idx = 0; idx < cProcesses; idx++ )
    {
    CString sName = GetProcessBaseModuleName( aProcesses[ idx ] ); if( sName.IsEmpty() )
    {
    continue;
    }
    CString sPID;
    sPID.Format( "%d", aProcesses[ idx ] );
    if(m_ctlProcesses.FindPIDIndex(aProcesses[ idx ]) >= 0) continue;

    m_ctlProcesses.InsertItem( idxList, sName );
    m_ctlProcesses.SetItemText( idxList, 1, sPID );
    m_ctlProcesses.SetItemText( idxList, 2, GetProcessPath( aProcesses[ idx ] ) );
    m_ctlProcesses.SetItemData( idxList, aProcesses[ idx ] ); idxList++;
    }}//刷新函数
      怎么实时得到系统有新的进程打开?  很简单就是用一下FindPIDIndex( DWORD pid)
    就可以了:),假如还要动态刷新那些不再运行的程序就需要用DeleteZoobieItem(unsigned long aProcesses[],DWORD cProcess)。
      

  3.   

    是的,用api钩子,把系统创建进程的api给钩住。
      

  4.   

    thanx!
    在系统中,负责调用CreateProcess创建新进程是个什么进程?
      

  5.   

    to:pepsi1980(这只老鼠不会游泳)
    网上这个例子ps_manager.zip在哪?codeguru或是codeproject
      

  6.   

    挂接该API函数,这样在函数调用之前,你可以先处理你的代码。
      

  7.   

    至于API HOOK的代码,网上有很多。
    www.xfocus.net有一篇挂接windows api函数,比较不错。