shell(nil,pchar(shellstr),false,DEBUG_PROCESS or DEBUG_ONLY_THIS_PROCESS ,pPROCESSret(@myprocess))
//------------------------------
function shell(path:pansichar;cmd:pansichar;bInheritHandles:bool;dwCreationFlags:DWORD;process:Pprocessret):bool;
var
suInfo:STARTUPINFO;
lpProcessInformation:PROCESS_INFORMATION;
begin
result:=false;
GetStartupInfo(suInfo);
if CreateProcess(path,cmd,nil,nil,fasle,dwCreationFlags,nil,nil,suInfo,lpProcessInformation) then
......这里使用 CreateProcess 创建进程,进程能成功创建~但是如果dwCreationFlags=(DEBUG_PROCESS or DEBUG_ONLY_THIS_PROCESS )参数创建进程后,进程窗口不显示,只在任务管理器里出现该进程~~~CPU占用为0,内存占用为 50~60K~~~如果dwCreationFlags=0则可以正常启动...忘大侠赐教!!
//------------------------------
function shell(path:pansichar;cmd:pansichar;bInheritHandles:bool;dwCreationFlags:DWORD;process:Pprocessret):bool;
var
suInfo:STARTUPINFO;
lpProcessInformation:PROCESS_INFORMATION;
begin
result:=false;
GetStartupInfo(suInfo);
if CreateProcess(path,cmd,nil,nil,fasle,dwCreationFlags,nil,nil,suInfo,lpProcessInformation) then
......这里使用 CreateProcess 创建进程,进程能成功创建~但是如果dwCreationFlags=(DEBUG_PROCESS or DEBUG_ONLY_THIS_PROCESS )参数创建进程后,进程窗口不显示,只在任务管理器里出现该进程~~~CPU占用为0,内存占用为 50~60K~~~如果dwCreationFlags=0则可以正常启动...忘大侠赐教!!
声明
BOOL CreateProcess(
LPCTSTR lpApplicationName, // 要执行的应用程序的名字。
LPTSTR lpCommandLine, // 要执行的命令行
LPSECURITY_ATTRIBUTES lpProcessAttributes, // pointer to process security attributes
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes
BOOL bInheritHandles, // handle inheritance flag
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // pointer to new environment block
LPCTSTR lpCurrentDirectory, // pointer to current directory name
LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO
LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION
);
说明
创建一个新进程
返回值
Long,非零表示成功,零表示失败。
会设置GetLastError
参数表
参数 类型及说明
lpApplicationName String,要执行的应用程序的名字。可设为vbNullString;
在这种情况下,应用程序的名字应在lpCommandLine参数的起始处出现
lpCommandLine String,要执行的命令行。可用GetCommandLine函数取得一个进程使用的命令行。
windows会尽可能地根据下述搜索顺序来查找执行文件:
(1)包含了父进程执行文件的目录
(2)父进程当前的目录
(3)由GetSystemDirectory返回的系统目录
(4)仅适于windows NT:16位系统目录
(5)由GetSystemDirectory返回的windows目录
(6)由PATH环境变量指定的目录
lpProcessAttributes SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,
或传递零值表示采用不允许继承的默认描述符。该参数定义进程的安全特性
lpThreadAttributes SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,
或传递零值表示采用不允许继承的默认描述符。该参数定义进程之主进程的安全特性
bInheritHandles Long,TRUE表示允许当前进程中的所有句柄都由新建的子进程继承
dwCreationFlags Long,来自API32.TXT文件的一个或多个下述常数之一,
它们都带有前缀CREATE_。下面这些用于VB程序员:
CREATE_SEPARATE_WOW_VDM(仅适用于NT):启动一个16位的windows应用程序时,
强迫它在自己的内存空间运行
CREATE_SHARED_WOW_VDM(仅适用于NT):启动一个16位的windows应用程序时,
强迫它在共享的16位虚拟机内运行
CREATE_SUSPENDED:立即挂起新进程。除非调用ResumeThread函数。
IDLE_PRIORITY_CLASS:新进程应该有非常低的优先级,
只有在系统空闲的时候才能运行。基本值是4
HIGH_PRIORITY_CLASS:新进程应该有非常高的优先级,基本值是13
NORMAL_PRIORITY_CLASS:标准优先级。如进程位于前台,则基本值是9;
如在后台。则优先值是7
lpEnvironment 任何类型,指向一个环境块的指针
lpCurrentDriectory String,新进程的当前目录路径
lpStartupInfo STARTUPINFO,指定一个STARTUPINFO结构,
其中包含了创建进程时使用的附加信息
lpProcessInformation PROCESS_INFORMATION,该结构用于容纳新进程的进程和线程标识。
大多数情况下,一旦这个函数返回,父应用程序都会关闭两个句柄。
ExitProcess
说明
ExitProcess 函数 结束一个进程和所有进程打开的线程
声明
VOID ExitProcess(
UINT uExitCode // exit code for all threads
);
说明
中止一个进程
在Delphi中使用 ,应尽量避免用该函数来关闭进程。
不要在自己的程序中使用它。此时,
应试着向要关闭的那个程序的主窗口投递一条WM_CLOSE消息
参数表
参数 类型及说明
uExitCode Long,指定想中断的那个程序的一个退出代码
CloseHandle(lpProcessInformation.hProcess);楼上的写的很清楚了哦。。