如何获取系统当前进程( NT4.0+)
在VC++6.0环境下,如何获取系统当前进程,
请给出包括的头文件和相关的操作步骤.
[解决办法]
网上代码到处都是:
http://summerstation.spaces.live.com/blog/cns!E39C001CB6E4B188!1356.entry
http://hi.baidu.com/lbird/blog/item/ab0c55168d257c4b21a4e964.html
http://www.ttadd.com/diannao/HTML/6664.html
[解决办法]
DWORD Processesid[1024];
DWORD cbNeeded, size;
unsigned int i;
unsigned int j = 0;
if (!EnumProcesses(Processesid, sizeof(Processesid), &cbNeeded))
{
return 0;
}
size = cbNeeded / sizeof(DWORD);
for ( i = 1; i < size; i++ )
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Processesid[i]);
if (!hProcess)
{
return 0;
}
else
{
HMODULE hMod[1024];
DWORD cbNeeded1,size1;
if (EnumProcessModules(hProcess,hMod,sizeof(hMod),&cbNeeded1))
{
size1 = cbNeeded1 / sizeof(HMODULE);
char fn[260];
GetModuleFileNameEx(hProcess,hMod[0],fn,sizeof(fn));
}
}
[解决办法]
#include <windows.h>
#include <stdio.h>
#include <psapi.h>
#pragma comment(lib, "psapi.lib ")
void PrintProcessNameAndID( DWORD processID )
{
char szProcessName[MAX_PATH] = "unknown ";
//取得进程的句柄
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );
//取得进程名称
if ( hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) )
GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) );
}
//回显进程名称和ID
printf( "%-20s%-20d\n ", szProcessName, processID );
CloseHandle( hProcess );
}
void main( )
{
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
//枚举系统进程ID列表
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
return;
// Calculate how many process identifiers were returned.
//计算进程数量
cProcesses = cbNeeded / sizeof(DWORD);
// 输出每个进程的名称和ID
for ( i = 0; i < cProcesses; i++ )
PrintProcessNameAndID( aProcesses[i] );
return;
}
网上很多
[解决办法]
入口函数不同,win32 application 入口函数可以是WinMain(),wWinMain,_tWinMain(),win32 console application入口函数可以是main(),wmain(),_tmain(),所以会出现上面的错误,其它建错了也不要仅的。这你教你一种简单的方法。
progect==> > settings==> > link,把最下面progect option中的/subsystem:windows改为/subsystem:console,或者直接删了就行了!~~删了后编译器会自动选择WinMain()还是main()
好像就不分win32 console application和win32 application 了,智能了点!~~