Q&A

  • dos 실행후 자동으로 닫고 다음 명령실행하기
도스프로그램을 델파이에서 실행후 도스프로그램이 종료후 도스창이 자동으로 닫치고

다음 프로그램을 실행하도자할때 어떤방법으로 프로그램을 해야 하나요.

아시는분이 있으시면 가르처주시면 정말 고맙겠습니다.

제가쓰는 방법을 적어보면

winexec - /c로 도스창이 자동으로 닫치지만 끝나는 시점을 모르고

createprocess - 끝나는 시점을 알지만 도스창이 자동으로 않닫치고 있습니다.

읽어주시고 답장을 주시면 많은 도움이 되겠습니다.



2  COMMENTS
  • Profile
    김영대 2000.10.14 09:41
    rsghhw wrote:

    > 도스프로그램을 델파이에서 실행후 도스프로그램이 종료후 도스창이 자동으로 닫치고

    > 다음 프로그램을 실행하도자할때 어떤방법으로 프로그램을 해야 하나요.

    > 아시는분이 있으시면 가르처주시면 정말 고맙겠습니다.

    > 제가쓰는 방법을 적어보면

    > winexec - /c로 도스창이 자동으로 닫치지만 끝나는 시점을 모르고

    > createprocess - 끝나는 시점을 알지만 도스창이 자동으로 않닫치고 있습니다.

    > 읽어주시고 답장을 주시면 많은 도움이 되겠습니다.

    >

    dos 실행후 값을 return 하는 팁입니다.

    참고 하세여...

    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    Memo1: TMemo;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    {32bit 프로그램을 실행시키는 모듈입니다}

    function WinExecAndWait32(Path: PChar; Visibility: Word): integer;

    var

    Msg: TMsg;

    lpExitCode : integer;

    StartupInfo: TStartupInfo;

    ProcessInfo: TProcessInformation;

    begin

    FillChar(StartupInfo, SizeOf(TStartupInfo), 0);

    with StartupInfo do

    begin

    cb := SizeOf(TStartupInfo);

    dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;

    wShowWindow := visibility;

    end;

    if CreateProcess(nil, path, nil, nil, False,

    NORMAL_PRIORITY_CLASS OR CREATE_SEPARATE_WOW_VDM,

    nil, nil, StartupInfo, ProcessInfo) then

    begin

    repeat

    while PeekMessage(Msg, 0, 0, 0, pm_Remove) do

    begin

    if Msg.Message = wm_Quit then

    Halt(Msg.WParam);

    TranslateMessage(Msg);

    DispatchMessage(Msg);

    end;

    GetExitCodeProcess(ProcessInfo.hProcess,lpExitCode);

    until (lpExitCode <> Still_Active);



    with ProcessInfo do

    begin

    CloseHandle(hThread);

    CloseHandle(hProcess);

    end;

    Result := 0; {sucess}

    end

    else

    Result := GetLastError; {error occurs during CreateProcess}

    end;



    function ExecuteDOSCommand(cmdline, logfile:String; hidden: Boolean): integer;

    const

    flags: array [Boolean] of Integer = (SW_SHOWNORMAL, SW_HIDE);

    // array[Boolean] -> array[0..1] 입니다

    // 테스트:

    // ShowMessage(IntToStr(Ord(False)));

    // ShowMessage(IntToStr(Ord(True)));

    var

    cmdbuffer: array [0..MAX_PATH] of Char;

    cmd: String;

    begin

    // Windows 95/98의 환경변수 COMSPEC는 command.com 입니다

    GetEnvironmentVariable('COMSPEC', cmdBUffer, Sizeof(cmdBuffer));

    // command.com의 /C 파라미터는 명령 실행 후 되돌아 가라는 옵션입니다

    cmd := cmdbuffer + ' /C ' + cmdline + ' > ' + logfile;

    // 실행이 종료될때까지 대기

    Result := WinExecAndWait32(PChar(cmd), flags[hidden]); // SW_HIDE 로 실행

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    if ExecuteDOSCommand('netstat -a', 'netstat.txt', True) = 0 then

    Memo1.Lines.LoadFromFile('netstat.txt');

    end;



    end.



    도움이 되셨으면 하네여..

  • Profile
    이성훈 2000.10.14 03:50
    rsghhw wrote:

    > 도스프로그램을 델파이에서 실행후 도스프로그램이 종료후 도스창이 자동으로 닫치고

    > 다음 프로그램을 실행하도자할때 어떤방법으로 프로그램을 해야 하나요.

    > 아시는분이 있으시면 가르처주시면 정말 고맙겠습니다.

    > 제가쓰는 방법을 적어보면

    > winexec - /c로 도스창이 자동으로 닫치지만 끝나는 시점을 모르고

    > createprocess - 끝나는 시점을 알지만 도스창이 자동으로 않닫치고 있습니다.

    > 읽어주시고 답장을 주시면 많은 도움이 되겠습니다.

    >

    제가 옛날에 한 경험이 있는데....

    dos프로그램을 실행하여두 caption의 이름은 실행한 파일로 뜰겁니다.

    기억이 잘 안는데 findwindow함수가 있을겁니다. 예전에 한 거라서...

    함help를 찾아보세요..