请问在delphi中怎样可以打开另外的一个exe程序, 并可以检测到它关闭 当它关闭的时候,在delphi中可以知道 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 请参考一下这段源代码:{运行文件,并防止拷贝该可执行文件}function WinExecAndWait32(CommandLine: string; Visibility: Integer): Cardinal;var WorkDir: string; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation;begin {应用程序的工作目录} WorkDir := ExtractFileDir(Application.ExeName); FillChar(StartupInfo, Sizeof(StartupInfo), #0); StartupInfo.cb := Sizeof(StartupInfo); {设置进程显示标志} StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := Visibility; {创建进程,执行该文件} if not CreateProcess(nil, PChar(CommandLine), {指向命令行字符串} nil, {指向进程安全属性} nil, {指向线程安全属性} True, {句柄继承标志} CREATE_NEW_CONSOLE or {创建标志} NORMAL_PRIORITY_CLASS, nil, {指向环境块} PChar(WorkDir), {指向当前目录} StartupInfo, {指向结构STARTUPINFO } ProcessInfo) {指向结构PROCESS_INFO } then Result := INFINITE {-1} else begin FormPassDialog.Hide;{隐藏输入密码的窗口} {防止拷贝该临时文件} FormPassDialog.iTempFileName := FileOpen(FormPassDialog.TempFileName, fmShareExclusive); {设置应用程序的风格} SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW); {提交系统控制权} Application.ProcessMessages; {等待刚才创建的进程运行结束} WaitforSingleObject(ProcessInfo.hProcess, INFINITE); {获取进程的退出代码} GetExitCodeProcess(ProcessInfo.hProcess, Result); {关闭进程} CloseHandle(ProcessInfo.hProcess); {关闭进程} CloseHandle(ProcessInfo.hThread); {退出本应用程序} FormPassDialog.Close; end;end; myhandle:=createprocess(....) ;waitforsingleobject(myhandle,IN_FINITE); 遍历XML的一个子节点,然后判断是否能和另一个字符串匹配 请问ADOTable1为什么不能保存? 问一个比较少见的 关于上下标存储的问题 在用ADO打开excel时,为什么总是出现“已被独占方式打开”呢? Oracle8中Blob字段的读写 求爷爷告奶奶,谁能告诉我怎么样画出 EXCEL 横格的框线宽度!!!!!!!!!!!! 谁能解我燃眉之急? 过年深圳哪里招聘DELPHI程序员呀?各位大虾不妨说说! 请教Delphi中xml的应用。 请教delphi的网络数据库问题 在WINDOWS下如何关闭鼠标? 如何快速找到某段内存中的指定数据??
{运行文件,并防止拷贝该可执行文件}
function WinExecAndWait32(CommandLine: string; Visibility: Integer): Cardinal;
var
WorkDir: string;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
{应用程序的工作目录}
WorkDir := ExtractFileDir(Application.ExeName);
FillChar(StartupInfo, Sizeof(StartupInfo), #0);
StartupInfo.cb := Sizeof(StartupInfo);
{设置进程显示标志}
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
{创建进程,执行该文件}
if not CreateProcess(nil,
PChar(CommandLine), {指向命令行字符串}
nil, {指向进程安全属性}
nil, {指向线程安全属性}
True, {句柄继承标志}
CREATE_NEW_CONSOLE or {创建标志}
NORMAL_PRIORITY_CLASS,
nil, {指向环境块}
PChar(WorkDir), {指向当前目录}
StartupInfo, {指向结构STARTUPINFO }
ProcessInfo) {指向结构PROCESS_INFO }
then Result := INFINITE {-1} else
begin
FormPassDialog.Hide;{隐藏输入密码的窗口}
{防止拷贝该临时文件}
FormPassDialog.iTempFileName := FileOpen(FormPassDialog.TempFileName, fmShareExclusive);
{设置应用程序的风格}
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
{提交系统控制权}
Application.ProcessMessages;
{等待刚才创建的进程运行结束}
WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
{获取进程的退出代码}
GetExitCodeProcess(ProcessInfo.hProcess, Result);
{关闭进程}
CloseHandle(ProcessInfo.hProcess);
{关闭进程}
CloseHandle(ProcessInfo.hThread);
{退出本应用程序}
FormPassDialog.Close;
end;
end;
waitforsingleobject(myhandle,IN_FINITE);