Закрытие программы [Delphi]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 24 Jun 2007.

  1. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    ВОзникла проблема с закрытием стороней программы...
    Вообщем я сделла чтобы через мою прогну можно было открыть другую..
    Code:
     AppHI := ShellExecute(Handle, 'open',PChar(Edit3.Text), nil, nil, SW_SHOWNORMAL);
    Но вот мне надо сделать чтобы можно было закрыть её через мою прогу...
    Программа, которую запускаю через свою прогу - консольная....
     
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    Ну мне это ниче не дало...

    Программа консольная, заголовки окна все время меняются...
     
    #2 banned, 24 Jun 2007
    Last edited: 24 Jun 2007
  3. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    Программа консольная, заголовки окна все время меняются...
     
  4. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    Pid ведь всегда меняется :(
     
  5. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    Isis, небольшой примерчик:
    Code:
    var
      appname: string;
      start: TStartupInfo;
      procInfo: TProcessInformation;
    begin
      appname := 'cmd.exe';
      fillchar(start, sizeof(start), 0);
      fillchar(procInfo,sizeof(procInfo), 0);
      CreateProcess(nil,pchar(appname),nil,nil,false,0,nil,nil,start,procInfo);
      sleep(1000);
      TerminateProcess(procInfo.hProcess,0);
    end;
     
    #5 Joker-jar, 25 Jun 2007
    Last edited: 25 Jun 2007
    1 person likes this.
  6. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252

    Хм, т.е. можно прогу закрыть по имени в процессах?
     
  7. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    Не, appname := 'cmd.exe'; это я для примера запускаю консоль. CreateProccess создает процесс, структура procInfo заполняется информацией о процессе. Завершается процесс через TerminateProcess (подается procInfo.hProcess - хэндл созданного процесса). В примере через секунду. Тебе нужно будет procInfo объявить как глобальную, зарершить процесс сможешь когда тебе угодно.
     
    1 person likes this.
  8. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    Ну тут опять надо знать заголовок проги, а он постояно меняется =\
     
  9. NetMan

    NetMan Elder - Старейшина

    Joined:
    9 Feb 2004
    Messages:
    121
    Likes Received:
    37
    Reputations:
    34
    Isis, в примере, что дал Joker-jar не надо знать заголовок окна.
     
  10. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    Ты не понял примера. Там запуск идет не через shellexecute, а через createprocess, что, кстати, более красиво, но суть не в том.
    CreateProcess, если запуск прошел удачно, вернет тебе ThreadId, ProcessId, hThread, hProcess созданного процесса. Дальше можно смело орудовать этими значениями (конечно, стоит их гдето сохранить). Потом вызовешь TerminateProcess(pi.hProcess, 0) и все.

    Кстати, а каким боком вопрос относится к дельфи? Тему разделяю.. автору -
     
  11. bopoh13

    bopoh13 Elder - Старейшина

    Joined:
    31 Oct 2006
    Messages:
    195
    Likes Received:
    20
    Reputations:
    0