没事做,写个详细代码给你吧
#include<windowsh>
#include<tlhelp32h>//声明快照函数的头文件
int main(int argc,char argv[])
{
PROCESSENTRY32 pe32;
//在使用这个结构之前,先设置它的大小
pe32dwSize=sizeof(pe32);
//给系统内的所有进程拍一个快照
HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
//遍历进程快照,轮流显示每个进程的信息
BOOL bMore=::Process32First(hProcessSnap,&pe32);
while(bMore)
{
if(strcmp("abcexe",pe32szExeFile)==0)//如果找到进程名为abcexe
{
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32th32ProcessID);//获取句柄
/这里已经打开那个进程的句柄了/ }
bMore=::Process32Next(hProcessSnap,&pe32);//寻找下一个
}
return 0;
}
有的,获得指定进程句柄的方法很多
首先用 CreateToolhelp32Snapshot 获得系统快照然后用 Process32First 获得第一个进程然后用 Process32Next 获得下一个进程依次类推,然后判断如果是想呀的进程用 OpenProcess就可以打开这个进程,获得进程的句柄,然后你可以比如用 TerminateProcess 之类的结束进程
另外你说的那个API不知道有没有,我懒得去查,不过估计有有的话意思是
Get + Current + Process 翻译过来就是得到当前进程,返回值应该是个句柄算了帮你查下
HANDLE GetCurrentProcess(VOID)
解释是:The GetCurrentProcess function returns a pseudohandle for the current process
意思大致是这个API函数返回当前进程的句柄(pseudohandle 不知道什么意思应该是,没见过这个单词呵呵!)
1 *** 作进程快照
1)Process32First函数
[cpp] view plaincopy
BOOL WINAPI Process32First(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe );
功能:获取进程快照列表的第一个进程状态信息。
参数:hSnapshot为快照句柄;lppe参数为指向PROCESSENTRY32结构体的指针,该结构体的形式如下:
[cpp] view plaincopy
typedef struct tagPROCESSENTRY32 {
DWORD dwSize;//该结构体的大小
DWORD cntUsage;//进程的引用计数
DWORD th32ProcessID; //进程的ID
DWORD th32DefaultHeapID; //进程的默认堆ID
DWORD th32ModuleID; //进程模块ID
DWORD cntThreads; //次进程开启的线程计数
DWORD th32ParentProcessID; //此进程的父进程ID
LONG pcPriClassBase; //线程的相对优先级
DWORD dwFlags; //保留字段
TCHAR szExeFile[MAX_PATH];//进程的全名
} PROCESSENTRY32;
typedef PROCESSENTRY32 PPROCESSENTRY32;
注意:调用该函数必须制定dwSize的大小。
2)Process32Next函数
[cpp] view plaincopy
BOOL WINAPI Process32Next(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe );
功能:该函数获取进程快照列表中的下一个进程状态信息,该函数返回TRUE,表示成功获取;返回FLASE,表示失败。
2 *** 作线程快照
1)Thread3First含糊
[cpp] view plaincopy
BOOL WINAPI Thread32First(
HANDLE hSnapshot,
LPTHREADENTRY32 lpte );
功能:获取快照列表中的第一个线程的状态信息。
参数:hSnapshot为系统快照句柄;lpte为一个指向THREADENTRY32结构体的指针,该结构的形式如下:
[cpp] view plaincopy
typedef struct tagTHREADENTRY32{
DWORD dwSize; //结构体的大小
DWORD cntUsage; //线程引用计数
DWORD th32ThreadID; //线程的ID
DWORD th32OwnerProcessID; //拥有该线程的进程ID
LONG tpBasePri; //线程的相对优先级,共7个值
LONG tpDeltaPri; //这个成员已经不再被使用,总是设置为零。
DWORD dwFlags;//保留字段,没使用,为0
} THREADENTRY32;
typedef THREADENTRY32 PTHREADENTRY32;
2)Thread32Next函数
[cpp] view plaincopy
BOOL WINAPI Thread32Next(
HANDLE hSnapshot,
LPTHREADENTRY32 lpte );
功能:获取快照列表中的下一个线程快照状态信息。
3 *** 作堆快照
1)Heap32First函数
[cpp] view plaincopy
BOOL WINAPI Heap32First(
HANDLE hSnapshot,
LPHEAPENTRY32 lphe,
DWORD th32ProcessID,
DWORD th32HeapID );
该函数:获取快照中响应的堆。
参数:
[cpp] view plaincopy
typedef struct tagHEAPENTRY32
{
DWORD dwSize;//结构体大小
HANDLE hHandle; //指向一个堆块
DWORD dwAddress; //堆的拾起地址
DWORD dwBlockSize; //堆的大小
DWORD dwFlags; //保留
DWORD dwLockCount; //没使用
DWORD dwResvd; //不再使用
DWORD th32ProcessID; //拥有该对的进程ID
DWORD th32HeapID; //该堆的标识符
} HEAPENTRY32;
typedef HEAPENTRY32 PHEAPENTRY32;
typedef HEAPENTRY32 LPHEAPENTRY32;
2)Heap32Next函数
[cpp] view plaincopy
BOOL WINAPI Heap32Next(
HANDLE hSnapshot,
LPHEAPENTRY32 lphe );
3)Heap32LitFirst函数
[cpp] view plaincopy
BOOL WINAPI Heap32ListFirst(
HANDLE hSnapshot,
LPHEAPLIST32 lphl );
参数:
[cpp] view plaincopy
typedef struct tagHEAPLIST32 {
DWORD dwSize;//结构体大小
DWORD th32ProcessID; //进程ID
DWORD th32HeapID; //堆栈标识符
DWORD dwFlags; //保留,为0
} HEAPLIST32;
typedef HEAPLIST32 PHEAPLIST32;
typedef HEAPLIST32 LPHEAPLIST32;
4)Heap32ListNext函数
[cpp] view plaincopy
BOOL WINAPI Heap32ListNext(
HANDLE hSnapshot,
LPHEAPLIST32 lphl );
4 *** 作模块快照
1)Module32First函数
[cpp] view plaincopy
BOOL WINAPI Module32First(
HANDLE hSnapshot,
LPMODULEENTRY32 lpme );
功能:从系统快照中获取第一个模块信息。
参数:lpme为指向MODULEENTRY32结构体的指针,其形式如下:
[cpp] view plaincopy
typedef struct tagMODULEENTRY32 {
DWORD dwSize; //该结构体的大小
DWORD th32ModuleID; //进程上下文模块标识符
DWORD th32ProcessID; //进程标识符
DWORD GlblcntUsage; //全局模块引用计数
DWORD ProccntUsage; //所属进程的模块引用计数
BYTE modBaseAddr; //所属进程的基地址
DWORD modBaseSize; //
HMODULE hModule;//模块的句柄
TCHAR szModule[MAX_MODULE_NAME32 + 1]; //模块名
TCHAR szExePath[MAX_PATH]; //路径
} MODULEENTRY32;
typedef MODULEENTRY32 PMODULEENTRY32;
2)Module32Next函数
[cpp] view plaincopy
BOOL WINAPI Module32Next(
HANDLE hSnapshot,
LPMODULEENTRY32 lpme );
5Toolhelp32ReadProcessMemory 函数获得指定进程中指定内存区域的数据。
版本 2
子程序 取程序路径, 文本型, 公开, 取指定进程名的程序启动路径(成功返回路径,失败或进程不存在返回空)
参数 进程名, 文本型, , 程序进程名
参数 区分大小写, 逻辑型, 可空, 默认不区分进程名大小写
局部变量 进程列表, 进程信息_
局部变量 进程数, 整数型
局部变量 进程快照, 整数型
局部变量 临时, 整数型
局部变量 临时路径, 文本型
局部变量 临时进程名, 文本型
局部变量 snap, 整数型
局部变量 mod, 模块信息型
进程快照 = _创建快照 (15, 0)
如果真 (进程快照 = 0)
信息框 (“创建进程快照失败”, 0, )
返回 (“”)
如果真结束
进程数 = 0
进程列表dwSize = 296
临时 = _第一个 (进程快照, 进程列表)
判断循环首 (临时 ≠ 0)
进程数 = 进程数 + 1
snap = _创建快照 (8, 进程列表进程ID)
modsize = 1024
_第一个模块 (snap, mod)
临时路径 = 取字节集数据 (到字节集 (mod模块完整路径), 10, )
_关闭对象 (snap)
如果真 (进程列表进程ID ≠ 0)
临时进程名 = 到文本 (进程列表进程名称)
如果 (区分大小写)
如果真 (临时进程名 = 进程名)
_关闭对象 (进程快照)
如果真 (寻找文本 (临时路径, “”, , 假) > 0)
返回 (“”)
如果真结束
返回 (临时路径)
如果真结束
否则
如果真 (到小写 (临时进程名) = 到小写 (进程名))
_关闭对象 (进程快照)
如果真 (寻找文本 (临时路径, “”, , 假) > 0)
返回 (“”)
如果真结束
返回 (临时路径)
如果真结束
如果结束
如果真结束
临时 = _下一个 (进程快照, 进程列表)
判断循环尾 ()
_关闭对象 (进程快照)
返回 (“”)
'--------------------------------------DLL有什么不对说声,内容比较多好像少发了几个(下面是DLL或者自定义数据)--------------楼主可以下载个超级模块试试,里面有取进程目录的子程序
版本 2
数据类型 进程信息_, , 进程信息
成员 dwSize, 整数型
成员 cntUsage, 整数型
成员 进程ID, 整数型
成员 th32DefaultHeapID, 整数型
成员 th32ModuleID, 整数型
成员 cntThreads, 整数型
成员 th32ParentProcessID, 整数型
成员 pcPriClassBase, 整数型
成员 dwFlags, 整数型
成员 进程名称, 字节型, , "256"
版本 2
数据类型 模块信息型, 公开, 进程模块信息
成员 size, 整数型
成员 mid, 整数型
成员 pid, 整数型
成员 gusage, 整数型
成员 pusage, 整数型
成员 base, 整数型
成员 大小, 整数型
成员 模块句柄, 整数型
成员 模块文件名, 字节型, , "256"
成员 模块完整路径, 字节型, , "256"
版本 2
DLL命令 _创建快照, 整数型, , "CreateToolhelp32Snapshot"
参数 falg, 整数型
参数 id, 整数型
以上就是关于C++ 如何获取指定 进程名 的 进程ID 如:获取进程列表中 360tray.exe 的进程ID···全部的内容,包括:C++ 如何获取指定 进程名 的 进程ID 如:获取进程列表中 360tray.exe 的进程ID···、如何取得某进程的句柄 = =谢谢了、createtoolhelp32snapshot是否能获取64位进程快照等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)