进程,进程,还是进程问题!
如何获得一个程序中启动的另外的进程句柄(即除主进程之外的进程)?请各位大侠帮忙。 问题点数:50、回复次数:9Top
1 楼summernightrain(夏夜雨)回复于 2001-08-31 19:20:35 得分 20
下面是我的一个例子函数。
function TerminateExe(ExePath:String):Boolean; 一个结束例子进程的例子
var
ProListHandle,ProHandle:HWND;
ProStruct:PROCESSENTRY32; //目的就是要得到这结构,关于这结构可以查API帮助。
Found:Boolean;
begin
Result:=False;
ProListHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
ProStruct.dwSize:=Sizeof(ProStruct);
Found:=Process32First(ProListHandle,ProStruct);开始枚举所有进程
While Found do
begin
{ ProStruct 结构中就包含了进程的详细信息,其中的进程ID就是ProStruct.th32ProcessID
这个成员。}
if ProStruct.szExeFile=UpperCase(ExePath) then
begin
ProHandle:=OpenProcess(PROCESS_ALL_ACCESS,True,ProStruct.th32ProcessID);
If TerminateProcess(ProHandle,0) then
Result:=True
else
Result:=False;
end;
Found:=Process32Next(ProListHandle,ProStruct);
end;
end;Top
2 楼hnxrm(浪子)回复于 2001-08-31 20:00:03 得分 0
我的意思不是要枚举系统中所有的进程再进行判断,是要一个程序中启动的其他进程的HNADLE。假设我已经知道这个程序的HANDLE。不过先谢了summernightrain(夏夜雨) :)Top
3 楼summernightrain(夏夜雨)回复于 2001-09-01 00:53:26 得分 20
var
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
procedure Run(App:String);
var
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb:=Sizeof(StartupInfo);
StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
if FileExists(GetPath(2)+'\'+App) then
CreateProcess(nil,pchar(GetPath(2)+'\'+App),nil,nil,false,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,nil,StartupInfo,ProcessInfo);
end;
看上面的例子啦!!如果你是用的这种方法启动其它的进程,那么ProcessInfo中就包含了你要的东西(ProcessID)了,编个程序试试??有什么问题再讨论!!Top
4 楼hnxrm(浪子)回复于 2001-09-01 19:35:08 得分 0
to summernightrain(夏夜雨)
这个程序不是我编的,我要的是别人程序中启动其他进程的HANDLE.Top
5 楼summernightrain(夏夜雨)回复于 2001-09-01 22:48:04 得分 5
那就比较难了,从理论上讲你要看别的进程调用那了那些其它的进程,我想可以用Hook Api来做,具体就是拦截创建进程的那几个函数比如上面的CreateProcess。Top
6 楼qiandeng(千灯)回复于 2001-09-02 16:57:43 得分 5
建议还是去看看msdn,应该有这样的函数Top
7 楼hnxrm(浪子)回复于 2001-09-03 14:50:02 得分 0
to qiandeng
有么?我好象没找到。
TO summernightrain(夏夜雨) 谢谢哦,过几天给你分。
UP
Top
8 楼Tense(何必)回复于 2001-09-03 17:42:55 得分 0
upTop
9 楼hnxrm(浪子)回复于 2001-09-06 13:43:27 得分 0
看来是没人回答了,给分吧。Top




