我想在我创建得控制台程序中执行Dos命令,请问如何实现?dos命令得运行结果要在我当前得控制台中输出,不是另打开一个dos窗口?
解决方案 »
- Merry Christmas
- 刚用quickrep的人问大家一个简单的问题,谢谢
- 在批量录入的时候如何判断当前数据集已经存在相同的记录!!
- 请问在xp下如何读写端口3fbh?
- 如何屏蔽键盘上的ALT+F4键呢?
- 线程开启后 怎么停不下来了?着急!!
- 请教能不能直接通过"insert into 数据库名 select * from 表名" 将SQL数据库转换成FOX数据库,谢谢。
- 初学delphi,简单问题之六,我写的查询对吗?
- missing operator or semicolon报错
- Cxgrid 当前行时触发的事件
- 高分求解QuickReport打印问题!!!急!!!
- 菜L问题!!!
const InterCmd: Boolean = False;
const WorkDir: string = '';
const Input: THandle = 0;
const Output: THandle = 0;
const TimeOut: DWORD = INFINITE): Integer;
{ 在控制台本身中运行DOS命令,输入输出在控制台本身中 }
{ returns -1 if the Exec failed, otherwise returns the process' }
{ exit code when the process terminates. }
var
pWorkDir: array[0..MAX_PATH] of Char;
pCmdLine: array[0..1024] of Char;
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
FillChar(StartupInfo, Sizeof(StartupInfo), 0);
if InterCmd then
StrPCopy(pCmdLine, 'cmd /c ' + Cmd)
else
StrPCopy(pCmdLine, Cmd);
if DirectoryExists(WorkDir) then
StrPCopy(pWorkDir, WorkDir)
else
StrPCopy(pWorkDir, GetCurrentDir);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.hStdInput := IfThen(Input = 0, GetStdHandle(STD_INPUT_HANDLE), Input);
StartupInfo.hStdOutput := IfThen(Output = 0, GetStdHandle(STD_OUTPUT_HANDLE), Output);
StartupInfo.wShowWindow := SW_SHOWNORMAL;
if not CreateProcess(nil,
pCmdLine, nil, nil, False, NORMAL_PRIORITY_CLASS, nil,
pWorkDir, StartupInfo, { pointer to STARTUPINFO }
ProcessInfo
) then { pointer to PROCESS_INF }
Result := -1
else
begin
case WaitforSingleObject(ProcessInfo.hProcess, TimeOut) of
WAIT_TIMEOUT: TerminateProcess(ProcessInfo.hProcess, Cardinal(Result));
else
GetExitCodeProcess(ProcessInfo.hProcess, Cardinal(Result));
end;
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
end;
end;