Какая WinAPI выполняет cmd...

Тема в разделе "WASM.WIN32", создана пользователем pikador, 4 дек 2008.

  1. pikador

    pikador New Member

    Публикаций:
    0
    Подскажите WinAPI позволяющую выполнять CMDшные команды....
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Впервые о такой слышу.
     
  3. Partner

    Partner Павел

    Публикаций:
    0
    Не слышал о CMD.EXE ? :))
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    pikador
    CreateProcess с невидимым окном?
    Код (Text):
    1. ...
    2. STARTUPINFO si;
    3. PROCESS_INFORMATION pi;
    4.  
    5. ZeroMemory(&si, sizeof(si));
    6. ZeroMemory(&pi, sizeof(pi));
    7.  
    8. si.cb = sizeof(si);
    9. si.dwFlags = STARTF_USESHOWWINDOW;
    10. si.wShowWindow = SW_HIDE;
    11.  
    12. if (CreateProcess(NULL, lpCmdLine, NULL, NULL,
    13.        FALSE, 0, NULL, NULL, &si, &pi))
    14. {
    15. //  WaitForSingleObject(pi.hProcess, INFINITE);
    16.  
    17.   CloseHandle(pi.hProcess);
    18.   CloseHandle(pi.hThread);
    19. }
    20. ...
     
  5. Partner

    Partner Павел

    Публикаций:
    0
    А ShellExecute не нравится ?
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Partner
    Это API?
     
  7. Partner

    Partner Павел

    Публикаций:
    0
    Это шутка :)
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Partner
    Смешно.
     
  9. pikador

    pikador New Member

    Публикаций:
    0
    q_q, Partner
    Пасибо, то что нужно.
     
  10. q_q

    q_q New Member

    Публикаций:
    0
    Partner
    > А ShellExecute не нравится ?
    Предпочитаю CreateProcess , потому что:
    1) в STARTUPINFO можно настроить не только видимость окна;
    2) могу наблюдать за ("контролировать") завершением процесса - WaitForSingleObject.
     
  11. dendi

    dendi New Member

    Публикаций:
    0
    использование слова INFINITE моветон
     
  12. q_q

    q_q New Member

    Публикаций:
    0
    dendi
    Imho в данном случае моветон это - твоя придирка к закомментированному коду, основная задача которого, продемонстрировать, что существует возможность наблюдать, за завершением процесса.

    Целью моего сообщения было показать направление, в котором думать, а не давать готовое решение.
     
  13. Osen

    Osen Рие

    Публикаций:
    0
    pikador
    В функции CreateProcess есть параметр CommandLine, это как раз то что нужно вам.
     
  14. Partner

    Partner Павел

    Публикаций:
    0
    ShellExecuteEx позволяет все вышеперечисленное и даже больше.
     
  15. Osen

    Osen Рие

    Публикаций:
    0
    Partner
    Она позволяет кое-что еще (запуск программ, которые ассоциированны с файлами), но кое что она и не умеет (расширенные флаги создания процесса отстутствуют). Управлять процессом после его создания нельзя.
     
  16. Partner

    Partner Павел

    Публикаций:
    0
    Структура SHELLEXECUTEINFO имеет поле hProcess куда можно получить handle созданного процесса.
     
  17. q_q

    q_q New Member

    Публикаций:
    0
    Partner
    > даже больше
    "Учись матчасть" (С) клерк(кристалик)
     
  18. Partner

    Partner Павел

    Публикаций:
    0
    Где я неправ ? Покажи пальцем.
     
  19. q_q

    q_q New Member

    Публикаций:
    0
    Partner
    Я не согласен с "даже больше".
     
  20. Partner

    Partner Павел

    Публикаций:
    0
    Я нигде не говорил что ShellExecuteEx может все, что может CreateProcess.

    Ты привел всего два пункта, по которых ты предпрочитаешь CreateProcess.
    ShellExecuteEx может все, перечисленное тобой. Ты сомневаешся что она может больше ?
    Можно ли с помощью CreateProcess :
    1. Задать иконку для приложения.
    2. Выбрать монитор на котором запускать в системе с несколькими мониторами.
    3. Запустить ассоциированое приложение для файла.
    4. Ассоциировать хоткей с запущенным приложением.

    И это еще не все...