在NT下可以用PSAPI来方便的查看系统内的进线程,9X下不知道.
解决方案 »
- 如何让CTreeCtrl响应CheckBox的状态改变
- extern使用错误提示说缺少“;”
- 为什么我的两个COledatetime 变量之差总是得到天数之差?
- 为何我写的CWinThread类的子类只能执行构造函数?
- 请问MVP们都在哪些公司上班?
- 5在做安装程序时(installshield)如何把我的一个dll自动加入到系统目录下
- 是否能从兼容位图创建画刷?
- 组织成都csdn上的朋友聚会!3月15或者16号请参加者报名了!~~~~~~
- 不好描述的问题,没搞清楚问题的所在,希望大家帮忙看看
- 如何实现象winme和2000的资源管理器工具栏上的搜索、文件夹、历史三个按钮的功能?希望各位高手关注
- 在成都的程序员请进!!!!!!
- 当鼠标点下去以后……
HANDLE hSnap;
PROCESSENTRY32 PEntry;hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hSnap == 0)
return; // Pech gehabtPEntry.dwSize = sizeof(PEntry);BOOL ProcID = Process32First(hSnap, &PEntry);CString strProcId;
while(ProcID != 0) {
CString strExe = PEntry.szExeFile;
strProcId.Format ("%u",PEntry.th32ProcessID );
ProcID = Process32Next(hSnap, &PEntry);
}
CloseHandle (hSnap);NT下稍稍麻烦一点,须用到:PSAPI.DLL,VDMDBG.DLL
HINSTANCE hInstLib ;
HINSTANCE hInstLib2 ;
LPDWORD lpdwPIDs ;
DWORD dwSize, dwSize2, dwIndex ;
HMODULE hMod ;
HANDLE hProcess ;
char szFileName[ MAX_PATH ] ;// PSAPI Function Pointers.
BOOL (WINAPI *lpfEnumProcesses)( DWORD *, DWORD cb, DWORD * );
BOOL (WINAPI *lpfEnumProcessModules)( HANDLE, HMODULE *,DWORD, LPDWORD );
DWORD (WINAPI *lpfGetModuleFileNameEx)( HANDLE, HMODULE,LPTSTR, DWORD );// VDMDBG Function Pointers.
INT (WINAPI *lpfVDMEnumTaskWOWEx)( DWORD,TASKENUMPROCEX fp, LPARAM );// Load library and get the procedures explicitly. We do
// this so that we don't have to worry about modules using
// this code failing to load under Windows 98, because
// it can't resolve references to the PSAPI.DLL.
hInstLib = LoadLibraryA( "PSAPI.DLL" ) ;
if( hInstLib == NULL )
return;hInstLib2 = LoadLibraryA( "VDMDBG.DLL" ) ;
if( hInstLib2 == NULL )
return;// Get procedure addresses.
lpfEnumProcesses = (BOOL(WINAPI *)(DWORD *,DWORD,DWORD*))GetProcAddress(
hInstLib, "EnumProcesses" ) ;
lpfEnumProcessModules = (BOOL(WINAPI *)(HANDLE, HMODULE *,DWORD,
LPDWORD)) GetProcAddress( hInstLib,"EnumProcessModules" ) ;
lpfGetModuleFileNameEx =(DWORD (WINAPI *)(HANDLE, HMODULE,LPTSTR, DWORD
)) GetProcAddress( hInstLib,"GetModuleFileNameExA" ) ;
lpfVDMEnumTaskWOWEx =(INT(WINAPI *)( DWORD,
TASKENUMPROCEX,LPARAM))GetProcAddress( hInstLib2, "VDMEnumTaskWOWEx" );if(lpfEnumProcesses == NULL ||
lpfEnumProcessModules == NULL ||
lpfGetModuleFileNameEx == NULL ||
lpfVDMEnumTaskWOWEx == NULL) {
FreeLibrary( hInstLib ) ;
FreeLibrary( hInstLib2 ) ;
return;
}
dwSize2 = 256 * sizeof( DWORD ) ;
lpdwPIDs = NULL ;
do {
if( lpdwPIDs ) {
HeapFree( GetProcessHeap(), 0, lpdwPIDs ) ;
dwSize2 *= 2 ;
}
lpdwPIDs = (unsigned long *)HeapAlloc( GetProcessHeap(), 0, dwSize2
);
if( lpdwPIDs == NULL ) {
FreeLibrary( hInstLib ) ;
FreeLibrary( hInstLib2 ) ;
return;
}
if(!lpfEnumProcesses(lpdwPIDs, dwSize2, &dwSize)) {
HeapFree( GetProcessHeap(), 0, lpdwPIDs ) ;
FreeLibrary( hInstLib ) ;
FreeLibrary( hInstLib2 ) ;
return;
}
} while( dwSize == dwSize2 ) ;// How many ProcID's did we get?
dwSize /= sizeof( DWORD ) ;// Loop through each ProcID.
for( dwIndex = 2 ; dwIndex < dwSize ; dwIndex++ ) {
szFileName[0] = 0 ;
// Open the process (if we can... security does not
// permit every process in the system).
hProcess = OpenProcess(
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE, lpdwPIDs[ dwIndex ] ) ;
if( hProcess != NULL ) {
if( lpfEnumProcessModules( hProcess, &hMod,
sizeof( hMod ), &dwSize2 ) ) {
// Get Full pathname:
if( lpfGetModuleFileNameEx( hProcess, hMod,
szFileName, sizeof( szFileName ) ) ) {
CString strFileName = szFileName;
strFileName.MakeUpper ();
CString strProcId;
DWORD pid = (DWORD)lpdwPIDs[dwIndex];
pid.Format ("%u",a);
}
}
CloseHandle( hProcess ) ;
}