如何找到指定应用程序的进程句柄 在windows nt系统上,如何才能找到某一指定程序的进程句柄。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 什么意思?通过什么来找?某一指定程序,怎么个指定法?EnumProcesses可以得到正在运行的所有进程。 DWORD aProcesses[1024], dwSize, dwSize2; char szProcessName[MAX_PATH] = "unknown"; char MyProcessName[MAX_PATH] = "Test.exe";//用实际文件名代替 unsigned int i; if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &dwSize ) ) return FALSE; dwSize2 = dwSize / sizeof(DWORD); for ( i = 0; i < dwSize2; i++ ) { //取得进程的句柄 具体参见msdn HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i] ); //取得进程名称 if ( hProcess ) { HMODULE hMod; DWORD dwSize; if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &dwSize) ) GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) ); if (strcmp(szProcessName,MyProcessName)) { CurProID = aProcesses[i]; break; } } CloseHandle( hProcess ); } HANDLE GetCurrentProcess(VOID) zhou80bin(彬彬)所说的是一种方法,不过它只能用于win2k!还有两种方法就是:Toolhelp(in win9x) and psapi(in win2k) //Toolhelp方法(9x/nt/2k)int GetProcessStatus(LPCTSTR lpProcessName, PROCESSINFO32 psInfo[]){ //use toolhelp32 int m_nCount = 0; HANDLE hSnapShot; PROCESSENTRY32 pEntry; pEntry.dwSize = sizeof(pEntry); BOOL hRes = FALSE; volatile BOOL Found = FALSE; hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL); Process32First(hSnapShot, &pEntry); while(1) { hRes = Process32Next(hSnapShot, &pEntry); if (hRes == FALSE){ Found = FALSE; break; } if (0 == strcmp(lpProcessName, pEntry.szExeFile)){ //Found = TRUE; //通过GetModuleBaseName得到进程的全路经,与配置信息比较 psInfo[m_nCount].m_dwProcessID = pEntry.th32ProcessID; psInfo[m_nCount].m_dwThreads = pEntry.cntThreads; strcpy(psInfo[m_nCount].m_szName, pEntry.szExeFile); m_nCount++; } } return m_nCount;} 用FindWindow查找那个窗口的名字,返回句柄 请教多线程中如何结束递归函数调用? VC中文件导入问题,大虾们帮忙解决下下^_^ 硬盘中安装MSDN2004,它提示要插入盘怎么办? 在vc中用dao连接数据库,如何用word格式打印报表 请推荐一款数据采集卡,谢谢! 请教一下 linux 串口调试问题 高手指点算法:如何绘制矩形重叠的效果 如何用IE查看一个exe的资源文件? res协议似乎不行啊 求教一个按钮的问题 100分求救,下午2:30交作业 vc中有把时间转换成世纪秒的函数吗?
某一指定程序,怎么个指定法?
EnumProcesses可以得到正在运行的所有进程。
char szProcessName[MAX_PATH] = "unknown";
char MyProcessName[MAX_PATH] = "Test.exe";//用实际文件名代替
unsigned int i;
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &dwSize ) )
return FALSE;
dwSize2 = dwSize / sizeof(DWORD);
for ( i = 0; i < dwSize2; i++ )
{
//取得进程的句柄 具体参见msdn
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ, FALSE, aProcesses[i] );
//取得进程名称
if ( hProcess )
{
HMODULE hMod;
DWORD dwSize;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&dwSize) )
GetModuleBaseName( hProcess, hMod, szProcessName,
sizeof(szProcessName) );
if (strcmp(szProcessName,MyProcessName))
{
CurProID = aProcesses[i];
break;
}
}
CloseHandle( hProcess );
}
还有两种方法就是:Toolhelp(in win9x) and psapi(in win2k)
{
//use toolhelp32
int m_nCount = 0;
HANDLE hSnapShot;
PROCESSENTRY32 pEntry;
pEntry.dwSize = sizeof(pEntry);
BOOL hRes = FALSE;
volatile BOOL Found = FALSE; hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
Process32First(hSnapShot, &pEntry); while(1)
{
hRes = Process32Next(hSnapShot, &pEntry);
if (hRes == FALSE){
Found = FALSE;
break;
} if (0 == strcmp(lpProcessName, pEntry.szExeFile)){
//Found = TRUE;
//通过GetModuleBaseName得到进程的全路经,与配置信息比较
psInfo[m_nCount].m_dwProcessID = pEntry.th32ProcessID;
psInfo[m_nCount].m_dwThreads = pEntry.cntThreads;
strcpy(psInfo[m_nCount].m_szName, pEntry.szExeFile);
m_nCount++;
}
}
return m_nCount;
}