как вызвать bat-файл из своей программы

Тема в разделе "WASM.BEGINNERS", создана пользователем hakeem, 10 сен 2008.

  1. hakeem

    hakeem New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    74
    как вызвать bat-файл из своей программы, и можно ли?
     
  2. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    hakeem
    Способ 1.
    ShellExecute()
    Все подробно в мсдн. С примерами.

    Способ 2
    WinExec()
    Передаешь имя батника

    Способ 3
    Вместо WinExec использовать CreateProcess
    В качестве коммандной строки передаешь что-то вроде
    cmd.exe /c start C:\path\yourfile.bat
     
  3. hakeem

    hakeem New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    74
    Отлично...
    Спасибо, и еще такой вопрос, а редактировать его можно?
     
  4. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Можно, узнаешь размер батника (GetFileSize<Ex>), добавляешь к результату единицу выделяешь память(GlobalAlloc,GlobalLock), открываешь файл(_lopen), читаешь(_lread), ищешь нужную строку(придеться делать свою процедурку), изменяешь в памяти, записываешь обратно в батник(_lwrite), закрываешь файл(CloseHandle), освобождаешь память...(GlobalUnlock,GlobalFree)
     
  5. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    hakeem
    Можно

    можно даже создавать непосредственно перед запуском

    Вот так например

    1. VirtualAlloc()
    выделяешь буффер. Загоняешь туда содержимое своего будущего бат-файла

    [add]
    ЗЫ: майкрософт советует отказываться от GlobalLock
    Юзай либо VirtualAlloc, либо HeapAlloc
    второй даже предпочтительнее, т.к. память выделяется из кучи и не заполняется нулями, тобто функция быстрее работает
    [/add]


    2. CreateFile()
    создаешь бат-файл

    3, WriteFile()
    пишешь в свой файл содержимое своего буффера

    4. CloseHandle()
    VirtualFree()
    закрываешь хендл и освобождаешь память



    С аргументами думаю разберешься. Кодер, как-никак -)
     
  6. hakeem

    hakeem New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    74
    Спасибо, будем КОПАТЬ...
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Magnum
    CreateProcess позволяет запускать bat-файлы, передавая просто путь к ним, без всяких cmd.
     
  8. DeGlucker

    DeGlucker New Member

    Публикаций:
    0
    Регистрация:
    19 сен 2002
    Сообщения:
    28
    У меня работает через ShellExecute "open"