怎么获得进程的句柄
比如进程里有flashget.exe进程,怎么获得他的句柄,
可不可以详细点回答,我很菜的。谢谢
问题点数:20、回复次数:18Top
1 楼danyueer(淡月儿:从此以后,各人得各人的眼泪罢了)回复于 2004-12-03 17:52:36 得分 5
OpenProcessTop
2 楼danyueer(淡月儿:从此以后,各人得各人的眼泪罢了)回复于 2004-12-03 17:55:39 得分 0
调用序列:
1 CreateToolhelp32Snapshot创建快照
2 Process32First和Process32Next,轮询找到你的目标进程,获取其ID
3 用OpenProcess打开,获得进程句柄
具体函数用法可以参考MSDN,此处从略。Top
3 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2004-12-03 18:41:21 得分 0
月儿mm都讲了
OpenProcessTop
4 楼muziling(木子岭)回复于 2004-12-03 18:50:30 得分 0
OpenProcess里有个PID参数,但是这个参数在每次重启的时候有可能会不同啊Top
5 楼songtitan(雨霖)回复于 2004-12-03 18:58:32 得分 15
DWORD GetFlashget()
{
HANDLE m_handle=::CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
PROCESSENTRY32* Info = new PROCESSENTRY32;
Info->dwSize = sizeof(PROCESSENTRY32);
if(::Process32First(m_handle,Info))
{
while(::Process32Next(m_handle,Info)!=FALSE)
{
CString ss;
ss=Info->szExeFile;
ss.MakeLower();
if(ss.Find("flashget") != -1)
{
return Info->th32ProcessID;
}
}
::CloseHandle(m_handle);
if(Info)
{
delete Info;
}
}
return -1;
}Top
6 楼koko1998(高价购买火车票)回复于 2004-12-03 19:34:11 得分 0
gzTop
7 楼muziling(木子岭)回复于 2004-12-03 19:43:15 得分 0
D:\Utilities\UtilitiesDlg.cpp(178) : error C2039: 'CreateToolhelp32Snapshot' : is not a member of '`global namespace''
D:\Utilities\UtilitiesDlg.cpp(178) : error C2065: 'CreateToolhelp32Snapshot' : undeclared identifier
晕,编译的时候出这样的问题Top
8 楼songtitan(雨霖)回复于 2004-12-03 20:14:37 得分 0
你#include "stdafx.h"了吗?Top
9 楼muziling(木子岭)回复于 2004-12-03 20:29:19 得分 0
我建的是MFC EXE工程,默认已经包含了Top
10 楼songtitan(雨霖)回复于 2004-12-03 20:35:09 得分 0
哦,是MFC咯,那再加上这个就可以了:(经过测试,绝对可以:))
#include "tlhelp32.h"Top
11 楼muziling(木子岭)回复于 2004-12-03 20:45:03 得分 0
真的,可以了,谢谢了
HANDLE和HWND怎么转,现在要对flashget操作,比如最大化。
提示“cannot convert parameter 1 from 'void *' to 'struct HWND__ *'”
是不是(HWND)m_handle就可以了?Top
12 楼songtitan(雨霖)回复于 2004-12-03 20:48:03 得分 0
哦,对了,你是获得句柄,那还要这样获得:
HANDLE hFlashget=HANDLE OpenProcess(PROCESS_ALL_ACCESS,FALSE,Info->th32ProcessID);
//Info->th32ProcessID就是上面代码获得的进程ID
:)Top
13 楼songtitan(雨霖)回复于 2004-12-03 20:56:12 得分 0
你要获得窗口句柄的话,用这个啊
HWND hWnd= FindWindow(NULL,"flashget");
至于通过进程句柄怎么来拿窗口句柄,我还没想到有什么方法可以.....Top
14 楼muziling(木子岭)回复于 2004-12-03 21:13:04 得分 0
FindWindow(NULL,"flashget");这里的FLASHGET就是指我们在进程里看到的进程名吗,不过好像不是
吧。Top
15 楼songtitan(雨霖)回复于 2004-12-03 21:17:52 得分 0
不是进程名,是窗口名!
详细的参考MSDNTop
16 楼muziling(木子岭)回复于 2004-12-03 21:20:31 得分 0
HWND hWnd= FindWindow(NULL,"flashget")
好像要HWND hWnd= ::FindWindow(NULL,"flashget")编译才通得过。
我通过::SendMessage(hWnd, SC_MAXIMIZE, 0, 0);没办法让他最大化??
Top
17 楼muziling(木子岭)回复于 2004-12-03 21:23:40 得分 0
有些比如游戏,一运行就最大化,看不到他的窗口名,这时候怎么办Top
18 楼songtitan(雨霖)回复于 2004-12-03 21:29:26 得分 0
用SPY++看他Top




