如何挂起/唤醒其它程序?
如何挂起/唤醒其它程序? 问题点数:20、回复次数:9Top
1 楼jinjazz(近身剪)回复于 2004-08-04 17:51:34 得分 0
直接执行??
ShellExecute
Top
2 楼sdgxboy(而立浪子)回复于 2004-08-04 23:52:59 得分 0
好象利用winexe这个函数就可以了吧Top
3 楼WorldCreater(造化天尊)回复于 2004-08-05 08:27:29 得分 0
不是的。
比如一个程序正在运行中,我想用自已的程序挂起/唤醒它,就象挂起/唤醒自已创建的线程一样。Top
4 楼tabris17(四不象)回复于 2004-08-06 12:25:42 得分 5
用toolhelp32函数枚举该进程的所有线程,用SuspendThread挂起所有线程,ResumeThread唤醒所有线程Top
5 楼WorldCreater(造化天尊)回复于 2004-08-06 15:06:39 得分 0
//我是在nt/2003平台下,这样写有什么不妥吗?为什么并没将进程暂停?
procedure TMainFrm.SuspendThreadBtnClick(Sender: TObject);
var
PID: DWORD;
hProcess: THandle;
i: DWORD;
aModuleHandles: array[0..$3FFF-1] of DWORD;
ModuleName: array[0..MAX_PATH] of char;
cModules: DWORD;
begin
if ProcLV.Selected=nil then
begin
ShowMessage('你没有选定一个项目,请在项目上双击');
end;
PID := StrToInt(ProcLV.Selected.SubItems.Strings[0]);
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, PID);
try
if hProcess > 0 then
begin
if EnumProcessModules(hProcess, @aModuleHandles, SizeOf(aModuleHandles), cModules) then
begin
for i:=0 to cModules-1 do
begin
if SuspendThread(aModuleHandles[i])=-1 then //并没有显示失败
begin
ShowMessage('挂起失败'); //不会跳出这个信息
end;
end;
ShowMessage(inttostr(i));
end;
end;
finally
CloseHandle(hProcess);
end;
end;Top
6 楼tabris17(四不象)回复于 2004-08-06 15:29:21 得分 5
EnumProcessModules用来枚举进程模块的,不是线程
要用toolhelp32的Thread32First和Thread32Next来枚举线程Top
7 楼WorldCreater(造化天尊)回复于 2004-08-09 10:37:03 得分 0
依照开发指南的说法,nt下是不支持toolhelp32的,不是吗?Top
8 楼tabris17(四不象)回复于 2004-08-09 11:58:26 得分 5
nt 4.0版本下没有,2000/xp下都有
nt 4.0可以用native api实现Top
9 楼linzhengqun(风。我回来了)回复于 2004-08-09 12:48:38 得分 5
可以的,你试过之后才知道Top




