rt

解决方案 »

  1.   

    用Process32First/Process32Next列举进程,发现新进程后根据进程句柄调用GetProcessId
      

  2.   


    #include <windows.h>
    #include <stdio.h>
    #include <tchar.h>
    #include <psapi.h>void PrintProcessNameAndID( DWORD processID )
    {
        TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");    // Get a handle to the process.    HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                                       PROCESS_VM_READ,
                                       FALSE, processID );    // Get the process name.    if (NULL != hProcess )
        {
            HMODULE hMod;
            DWORD cbNeeded;        if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), 
                 &cbNeeded) )
            {
                GetModuleBaseName( hProcess, hMod, szProcessName, 
                                   sizeof(szProcessName)/sizeof(TCHAR) );
            }
        }    // Print the process name and identifier.    _tprintf( TEXT("%s  (PID: %u)\n"), szProcessName, processID );    CloseHandle( hProcess );
    }void main( )
    {
        // Get the list of process identifiers.    DWORD aProcesses[1024], cbNeeded, cProcesses;
        unsigned int i;    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
            return;    // Calculate how many process identifiers were returned.    cProcesses = cbNeeded / sizeof(DWORD);    // Print the name and process identifier for each process.    for ( i = 0; i < cProcesses; i++ )
            if( aProcesses[i] != 0 )
                PrintProcessNameAndID( aProcesses[i] );
    }
      

  3.   

    参考:
    使用windows钩子捕获进程的启动和关闭消息
    其实也没什么特别好的方法。
      

  4.   

    在内核态可以用PsSetCreateProcessNotifyRoutine参考看雪的文章:
    http://bbs.pediy.com/showthread.php?t=51157
    注意下面讲到的动态监视进程创建、销毁的实现方法