⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 terminatorhelpers.cpp

📁 操作系统进程管理算法
💻 CPP
字号:
/////////////////////////////////////////////////////////////////////////////
//
// File        : TerminatorHelpers.cpp
// Project     : TERMINATOR
// Component   : Terminator
//---------------------------------------------------------------------------
// Description : 
//
/////////////////////////////////////////////////////////////////////////////
//
// SourceSafe Strings. Do not change.
//---------------------------------------------------------------------------
// $Author: Jeskes $
// $Date: 20.04.98 10:01 $
// $Revision: 1 $
//
/////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "psapi.h"
#pragma comment( lib, "psapi" )

#include "Terminator.h"
#include "TerminatorHelpers.h"

/////////////////////////////////////////////////////////////////////////////

DWORD GetProcessID( LPCSTR lpszNameToSearch, BOOL bUsePath, DWORD idStart )
{
    // Get the list of process IDs

	DWORD idx = 0; 
    DWORD aProcesses[ 1024 ];
    DWORD cProcesses = GetProcessIDs( aProcesses, sizeof( aProcesses ) );

	// position to start off

	if( 0 != idStart )
	{
		while( ( idx < cProcesses ) && ( idStart != aProcesses[ idx ] ) )
		{
			idx++;
		}

		if( idx == cProcesses )
		{
			idx = 0;
		}
		else
		{
			idx++;
		}
	}

	// search for process

    while( idx < cProcesses )
	{
		CString sName = bUsePath ? GetProcessPath( aProcesses[ idx ] ) :
								   GetProcessBaseModuleName( aProcesses[ idx ] );

		if( 0 == sName.CompareNoCase( lpszNameToSearch ) )
		{
			return( aProcesses[ idx ] );
		}

		idx++;
	}

	return( 0 );
}

/////////////////////////////////////////////////////////////////////////////

DWORD GetProcessIDs( DWORD* pdwBuffer, DWORD dwSizeBuffer )
{
    // Get the list of process IDs

	DWORD cbNeeded = 0;

    if( !EnumProcesses( pdwBuffer, dwSizeBuffer, &cbNeeded ) )
	{
		ASSERT( FALSE );
		return( 0 );
	}
    
	return( cbNeeded / sizeof( DWORD ) );
}

/////////////////////////////////////////////////////////////////////////////

CString GetProcessPath( DWORD idProcess )
{
    CString sPath;
    
    HANDLE hProcess = OpenProcess(  PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
                                    FALSE, 
									idProcess );
    if( NULL != hProcess )
    {
        HMODULE hMod;
        DWORD cbNeeded;
        
        if( EnumProcessModules( hProcess, &hMod, sizeof( hMod ), &cbNeeded ) )
        {
			DWORD dw = GetModuleFileNameEx( hProcess, hMod, sPath.GetBuffer( MAX_PATH ), MAX_PATH );
			sPath.ReleaseBuffer();
        }
	
	    CloseHandle( hProcess );
    }

	return( sPath );
}

/////////////////////////////////////////////////////////////////////////////

CString GetProcessBaseModuleName( DWORD idProcess )
{
    CString sName;
    
    HANDLE hProcess = OpenProcess(  PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
                                    FALSE, 
									idProcess );
    if( NULL != hProcess )
    {
        HMODULE hMod;
        DWORD cbNeeded;
        
        if( EnumProcessModules( hProcess, &hMod, sizeof( hMod ), &cbNeeded ) )
        {
			DWORD dw = GetModuleBaseName( hProcess, hMod, sName.GetBuffer( MAX_PATH ), MAX_PATH );
			sName.ReleaseBuffer();
        }
	
	    CloseHandle( hProcess );
    }

	return( sName );
}

/////////////////////////////////////////////////////////////////////////////

void TerminateProcessID( DWORD id )
{
    HANDLE hProcess = OpenProcess(  PROCESS_TERMINATE, FALSE, id );

    if( NULL != hProcess )
    {
		TerminateProcess( hProcess, 0 );
		CloseHandle( hProcess );
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -