delphi中怎么用ShellExecuteEx执行一个bat文件,并等待其运行结束啊? 希望能给个简单的例子
解决方案 »
- 请问各位,DBGridEh合计如何自动计算
- delphi调用C++BUILDER编写的DLL时这个函数调用(在线等)?
- 为什么使用ModelMaker产生的帮助文件不支持中文
- 如何把文件写成字符串函数???急!!!!!!高分请助,在线等。。。。
- 如何在fastreport中应用自定义函数?
- 求职中。。。。。。,来谈谈吧!
- 请教:解释一下THandle,句柄是什么,干什么用~
- 没有用过delphi,我需要一个用delphi写的activex控件来测试
- 简单问题,请进》》》》》
- 有制作Windows2000那样可折叠菜单的控件吗?
- 如何在程序中应用dsp_DeFX.dll? 最好能提供源码,凡提供有效帮助者均有分
- 老菜的问题了 WIN2003中Delphi 7中的Project菜单中Options菜单打不开
if WinExec(PChar(filename),SW_SHOWNORMAL) > 31 then
begin
//--
end;
var
zAppName: array[0..512] of char;
zCurDir: array[0..255] of char;
WorkDir: string;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
StrPCopy(zAppName, FileName);
GetDir(0, WorkDir);
StrPCopy(zCurDir, WorkDir);
FillChar(StartupInfo, Sizeof(StartupInfo), #0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(nil,
zAppName, { pointer to command line string }
nil, { pointer to process security attributes }
nil, { pointer to thread security attributes }
true, { handle inheritance flag }
CREATE_NEW_CONSOLE or { creation flags }
NORMAL_PRIORITY_CLASS,
nil, { pointer to new environment block }
nil, { pointer to current directory name, PChar}
StartupInfo, { pointer to STARTUPINFO }
ProcessInfo) { pointer to PROCESS_INF }
then Result := INFINITE {-1} else
begin
WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, Result);
CloseHandle(ProcessInfo.hProcess); { to prevent memory leaks }
CloseHandle(ProcessInfo.hThread);
end;
end;//调用方法
WinExecAndWait32_v1('c:\a.bat ', SW_NORMAL);
if(strDestIPAddress != "")
{
PROCESS_INFORMATION pi;
STARTUPINFO si;
si.cb = sizeof(STARTUPINFO);
si.lpReserved = NULL;
si.lpDesktop = NULL;
si.lpTitle = NULL;
si.dwFlags = 0;
si.cbReserved2 = 0;
si.lpReserved2 = NULL;
String cmd = "";
if(nDestPort != -1)
{
cmd = "cmd.exe /c .\\test.bat" + strDestIPAddress+" "+AnsiString(nDestPort)
+" "+Filename;
}
else
{
cmd = "cmd.exe /c .\\test.bat " + strDestIPAddress+" 80 "+Filename;
}
BOOL bRet = CreateProcess(NULL,cmd.c_str(),NULL,NULL,false,
NORMAL_PRIORITY_CLASS,
NULL,NULL,&si,&pi);
if(bRet == false)
{
//Application->MessageBox("执行test.bat出错!","错误t",MB_OK);
}
else
{
CloseHandle(pi.hThread);
DWORD dwret=WaitForSingleObject(pi.hProcess, INFINITE); //INFINITE CloseHandle(pi.hProcess);
strAttchPath = ExtractFilePath(Application->ExeName)+ Filename;
}
}