关于在Win2000下遍历进程 上面代码是toolhelp api不是psapi 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不好意思,弄错了,不过Win2000支持 Toolhelp和PSAPI的,Win98只支持toolhelp,Winnt只支持PSAPI既然2000支持toolhelp,为什么结果不正确? 我做好了,下面为全部代码, Console Application。#include <windows.h>#include <stdio.h>//#include "psapi.h"HINSTANCE g_hPsapi;typedef BOOL (WINAPI *_EnumProcesses)( DWORD *lpidProcess, // array of process identifiers DWORD cb, // size of array DWORD *cbNeeded // number of bytes returned);typedef BOOL (WINAPI *_EnumProcessModules)( HANDLE hProcess, // handle to process HMODULE *lphModule, // array of module handles DWORD cb, // size of array LPDWORD lpcbNeeded // number of bytes required);typedef DWORD (WINAPI *_GetModuleBaseName)( HANDLE hProcess, // handle to process HMODULE hModule, // handle to module LPTSTR lpBaseName, // base name buffer DWORD nSize // maximum characters to retrieve);typedef DWORD (WINAPI *_GetModuleFileNameEx)( HANDLE hProcess, // handle to process HMODULE hModule, // handle to module LPTSTR lpFilename, // path buffer DWORD nSize // maximum characters to retrieve);_EnumProcesses pEnumProcesses;_EnumProcessModules pEnumProcessModules;_GetModuleBaseName pGetModuleBaseName;_GetModuleFileNameEx pGetModuleFileNameEx;BOOL init(){ g_hPsapi = LoadLibrary( "psapi.dll" ); if( g_hPsapi ) { pEnumProcesses = (_EnumProcesses)GetProcAddress( g_hPsapi, "EnumProcesses" ); pEnumProcessModules = (_EnumProcessModules)GetProcAddress( g_hPsapi, "EnumProcessModules" ); pGetModuleBaseName = (_GetModuleBaseName)GetProcAddress( g_hPsapi, "GetModuleBaseNameA" ); pGetModuleFileNameEx = (_GetModuleFileNameEx)GetProcAddress( g_hPsapi, "GetModuleFileNameExA" ); if( !pEnumProcesses || !pEnumProcessModules || !pGetModuleBaseName || !pGetModuleFileNameEx) return FALSE; return TRUE; } return FALSE;}void destory(){ if( g_hPsapi ) FreeLibrary( g_hPsapi );}void PrintProcessNameAndID( DWORD processID ){ char szProcessName[MAX_PATH] = "unknown"; // Get a handle to the process. HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID ); // Get the process name. if ( hProcess ) { HMODULE hMod; DWORD cbNeeded; if ( pEnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) ) { pGetModuleFileNameEx( hProcess, hMod, szProcessName, sizeof(szProcessName) ); } } // Print the process name and identifier. printf( "%s (Process ID: %u)\n", szProcessName, processID ); CloseHandle( hProcess );}void main( ){ // Get the list of process identifiers. DWORD aProcesses[1024], cbNeeded, cProcesses; unsigned int i; if( !init() ) { printf("Load Failed\r\n"); return; } if ( !pEnumProcesses( 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++ ) PrintProcessNameAndID( aProcesses[i] ); destory();} C/C++实现画图铅笔功能 怎么做? 最好考虑到画图效果清晰 请问VS2003有这种功能吗? 远程调用COM+的问题 ADO如何获取最后一条记录的信息? CRITICAL_SECTION的delete与enter问题? 如何自绘一棵树,为什么不能像listbox一样自绘啊 作答奖分,快来看看某设备公司软件工程师笔试题!! 有谁知道在FlexGrid如何添加鼠标双击响应? 如何在Oracle中存储二进制对象 VC6程序员的技术发展问题 如何截获对话框的右上角的关闭窗口按扭的消息呢? Mp3和mpeg源码
既然2000支持toolhelp,为什么结果不正确?
#include <stdio.h>
//#include "psapi.h"HINSTANCE g_hPsapi;typedef BOOL (WINAPI *_EnumProcesses)
(
DWORD *lpidProcess, // array of process identifiers
DWORD cb, // size of array
DWORD *cbNeeded // number of bytes returned
);typedef BOOL (WINAPI *_EnumProcessModules)
(
HANDLE hProcess, // handle to process
HMODULE *lphModule, // array of module handles
DWORD cb, // size of array
LPDWORD lpcbNeeded // number of bytes required
);typedef DWORD (WINAPI *_GetModuleBaseName)(
HANDLE hProcess, // handle to process
HMODULE hModule, // handle to module
LPTSTR lpBaseName, // base name buffer
DWORD nSize // maximum characters to retrieve
);typedef DWORD (WINAPI *_GetModuleFileNameEx)(
HANDLE hProcess, // handle to process
HMODULE hModule, // handle to module
LPTSTR lpFilename, // path buffer
DWORD nSize // maximum characters to retrieve
);_EnumProcesses pEnumProcesses;
_EnumProcessModules pEnumProcessModules;
_GetModuleBaseName pGetModuleBaseName;
_GetModuleFileNameEx pGetModuleFileNameEx;BOOL init()
{ g_hPsapi = LoadLibrary( "psapi.dll" );
if( g_hPsapi )
{
pEnumProcesses = (_EnumProcesses)GetProcAddress( g_hPsapi, "EnumProcesses" );
pEnumProcessModules = (_EnumProcessModules)GetProcAddress( g_hPsapi, "EnumProcessModules" );
pGetModuleBaseName = (_GetModuleBaseName)GetProcAddress( g_hPsapi, "GetModuleBaseNameA" );
pGetModuleFileNameEx = (_GetModuleFileNameEx)GetProcAddress( g_hPsapi, "GetModuleFileNameExA" );
if( !pEnumProcesses || !pEnumProcessModules || !pGetModuleBaseName || !pGetModuleFileNameEx)
return FALSE;
return TRUE;
} return FALSE;
}void destory()
{
if( g_hPsapi )
FreeLibrary( g_hPsapi );
}void PrintProcessNameAndID( DWORD processID )
{
char szProcessName[MAX_PATH] = "unknown"; // Get a handle to the process. HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID ); // Get the process name. if ( hProcess )
{
HMODULE hMod;
DWORD cbNeeded; if ( pEnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded) )
{
pGetModuleFileNameEx( hProcess, hMod, szProcessName,
sizeof(szProcessName) );
}
} // Print the process name and identifier. printf( "%s (Process ID: %u)\n", szProcessName, processID ); CloseHandle( hProcess );
}void main( )
{
// Get the list of process identifiers. DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i; if( !init() )
{
printf("Load Failed\r\n");
return;
}
if ( !pEnumProcesses( 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++ )
PrintProcessNameAndID( aProcesses[i] ); destory();
}