typedef STARTUPINFO
begin
LONG cb;
LONG lpReserved;
LONG lpDesktop;
LONG lpTitle;
LONG dwX;
LONG dwY;
LONG dwXSize;
LONG dwYSize;
LONG dwXCountChars;
LONG dwYCountChars;
LONG dwFillAttribute;
LONG dwFlags;
INT wShowWindow;
INT cbReserved2;
LONG lpReserved2;
LONG hStdInput;
LONG hStdOutput;
LONG hStdError;
end;
typedef PROCESS_INFORMATION
begin
LONG hProcess;
LONG hThread;
LONG dwProcessId;
LONG dwThreadId;
end;
prototype LONG KERNEL.CreateProcessA(LONG, BYVAL STRING, LONG, LONG, LONG, LONG, LONG, LONG, POINTER, POINTER);
prototype LONG KERNEL.GetExitCodeProcess(LONG, LONG);
prototype LONG KERNEL.CloseHandle(LONG);
prototype LONG KERNEL.WaitForSingleObject(LONG, LONG);
prototype LONG KERNEL.TerminateProcess(LONG, LONG);
function Execute(cmd)
STARTUPINFO start;
PROCESS_INFORMATION proc;
NUMBER ret, i;
begin
start.cb = 68;
start.wShowWindow =0;
start.dwFlags = STARTF_USESHOWWINDOW;
//return CreateProcessA("", cmd, 0, 0, 0, 0, 0, 0, &si, &pi);
if CreateProcessA(0, cmd, 0, 0, 1, NORMAL_PRIORITY_CLASS, 0, 0, &start, &proc) != 0 then
//等待应用程序执行完成
ret = WaitForSingleObject(proc.hProcess, 0xFFFF);
if ret = WAIT_TIMEOUT then
TerminateProcess(proc.hProcess, ret);
endif;
i = proc.hProcess;
//获取应用程序执行结果。
GetExitCodeProcess(proc.hProcess, ret);
//关闭
CloseHandle(proc.hProcess);
return ret;
endif;
end;
本文介绍了一个使用C语言实现的进程管理示例,包括创建进程、等待进程结束、终止进程等关键操作。通过定义STARTUPINFO和PROCESS_INFORMATION结构体,并利用KERNEL API如CreateProcessA、WaitForSingleObject等来演示如何执行外部命令并获取其执行结果。
4085

被折叠的 条评论
为什么被折叠?



