请问如何通过进程ID获得进程句柄?
我通过创建当前系统进程快照得到一个快照句柄,然后再用First和Next函数访问的!但是这些函数只能得到一个PROCESS32 进程结构信息,里面只有ID
请问如何通过这些ID得到这些进程的句柄?
但是我想实现一个像微软进程查看器的功能,比如关闭某个进程,请问用什么函数??
问题点数:20、回复次数:13Top
1 楼laiyiling(陌生人[MVP])回复于 2005-03-16 20:23:24 得分 10
用EnumWindows枚举所有的top窗口,然后在对应的回调函数用GetWindowThreadProcessId,比较这个得到的进程ID和你已经知道的ID
部分代码:
DWORD dwProcessID;//你的进程号
VOID GetWindowHandle()
{
EnumWindows( EnumWindowsProc, (LPARAM)NULL);
}
static BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
DWORD pid = 0;
// 取得窗口的进程号
if (!GetWindowThreadProcessId( hwnd, &pid ))
{
return TRUE; // 继续玫举
}
// 查找窗口在任务列表中的对应项
if(dwProcessID == pid)
return FALSE;
return TRUE; //继续玫举
}
Top
2 楼songsu(松鼠)回复于 2005-03-16 20:38:43 得分 0
这个有点麻烦吧!
因为有些在进程管理器显视出来的,他们都没有窗口呢!!!
我只能得到他们的进程和线程ID号
有没有哪个函数可以直接通过这个ID号找到他的进程句柄,
然后我就可以关闭这个进程了!Top
3 楼songsu(松鼠)回复于 2005-03-16 20:50:44 得分 0
顶起来!!!!Top
4 楼songsu(松鼠)回复于 2005-03-16 21:03:42 得分 0
查到一个函数,但是不知道具体的用法!
MSDN上面好像说有两个返回值啊!!!
第一个:This method returns an interface for a process specified by identifier.
IOsAxsGeneric::GetProcessByID
HRESULT GetProcessByID (
[in] DWORD dwID,
[out] IOsAxsProcess ** ppiOsAxsProcess
);
dwID Specified identifier. //ID标识符
ppiOsAxsProcess Pointer to the requested process. //好像说指向一个请求的进程吧
第二个
Return Values
The following table shows the return values for this method.
Value Description
S_OK Indicates the function was successful.
E_INVALIDARG Indicates one or more invalid arguments.
E_POINTER Indicates one or more invalid pointers.
E_OUTOFMEMORY Indicates an out of memory error.
E_ACCESSDENIED Indicates the specified object is no longer valid.
E_FAIL Indicates an unspecified failure.
Top
5 楼idAnts(此广告位招租)回复于 2005-03-17 08:01:19 得分 1
OpenProcess可以根据ID得到句柄Top
6 楼Fzergling(十二年的轮回)回复于 2005-03-17 13:51:27 得分 2
(CWnd*)::OpenProcess(PROCESS_ALL_ACCESS,FALSE,pi.dwProcessId)Top
7 楼songsu(松鼠)回复于 2005-03-18 16:02:55 得分 0
再试试!!
Top
8 楼ayanamiwww(咩~咩『抵制日货』)回复于 2005-03-18 17:43:13 得分 1
OpenProcess肯定可以Top
9 楼ayanamiwww(咩~咩『抵制日货』)回复于 2005-03-18 17:43:30 得分 1
但是系统进程好像就不行Top
10 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-03-18 18:35:25 得分 2
OpenProcess可以打开进程Top
11 楼weishenme1977(为什么)回复于 2005-03-20 16:12:52 得分 1
我也正想这个问题呢
帮你顶Top
12 楼junkuang(大头)回复于 2005-03-20 18:00:33 得分 2
OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessId)Top
13 楼0011411(爱也许是假的,可是当时的快乐是真的。)回复于 2005-03-20 18:20:01 得分 0
upTop




