Как перенаправить вывод с консоли в файл?

Тема в разделе "WASM.WIN32", создана пользователем yureckor, 1 мар 2005.

  1. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    subj

    Чтоб можно было, например ipconfig (через CreateProcess)вывести в файл.
     
  2. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    создаешь файл под запрись, в StartupInfo.hStdOutput записываешь его хэндл, createprocess вызываешь с наследованием хэндлов. вот, видимо... а с командной строки можно так: лгураловрлоралу > file.txt



    да, кстати, и в StartupInfo.hStdError тоже єтот хандл записать нужно - мало ли кто куда что пишет ;)
     
  3. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    Да пробовал я так - не идет.

    С командной строки из под Far'а идет со знаком ]", из под ShellExecute нет.
    Код (Text):
    1.  invoke ShellExecute, 0, tx("open"), tx("ipconfig.exe>1.txt"), 0, 0, 0
    2.  




    так тоже не идет
    Код (Text):
    1.  
    2. myprog proc hInst:DWORD, par1:DWORD, par2:DWORD, par3:DWORD
    3. Local l1:DWORD
    4. Local hFile:DWORD
    5. Local prinfo2:PROCESS_INFORMATION
    6. Local stinfo2:STARTUPINFO
    7.  
    8.  invoke CreateFile, tx("1.txt"), GENERIC_WRITE,  FILE_SHARE_READ or FILE_SHARE_WRITE,\
    9.         0, OPEN_EXISTING, 0, 0
    10.  mov hFile,eax
    11.  CP eax, INVALID_HANDLE_VALUE, z, @@100
    12.  
    13.  invoke fill_memory, ADDR stinfo2, SIZEOF stinfo2, 0
    14.  mov [stinfo2.cb], SIZEOF stinfo2
    15.  mov [stinfo2.dwFlags], STARTF_USESTDHANDLES
    16.  mov eax, hFile
    17.  ;mov [stinfo2.hStdInput], eax
    18.  mov [stinfo2.hStdOutput], eax
    19.  ;mov [stinfo2.hStdError], eax
    20.  
    21.  invoke CreateProcess, tx("ipconfig.exe>1.txt"), 0, 0, 0, TRUE, \
    22.         0, 0, 0, ADDR stinfo2, ADDR prinfo2
    23.  
    24.  invoke CloseHandle, hFile
    25.  
    26. ...
    27.  
     
  4. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    я сечас попробую, но так - нельзя (вывалится):

     
  5. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    попробовал - пока не вышло (хрен его знает ;) но одно скажу - c:\winnt\system32\ipconfig.exe надо полностью писать... тогда запускается ;)
     
  6. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    Запускаться то запускается, но я даже его консоли не замечаю. Хотя msconfig например работает.
     
  7. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
  8. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    Вот, подобрал я :)
    Код (Text):
    1.  
    2.  ;invoke AllocConsole
    3.  
    4.  ;invoke CreateFile, tx("CONOUT$"), GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,\
    5.  ;       td(SIZEOF SECURITY_ATTRIBUTES, 0, TRUE), OPEN_EXISTING, 0, 0
    6.  
    7.  invoke CreateFile, tx("C:\WORK\1\probalib\1.txt"), GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,\
    8.         td(SIZEOF SECURITY_ATTRIBUTES, 0, TRUE), OPEN_EXISTING, 0, 0
    9.  
    10.  mov hFile,eax
    11.  CP eax, INVALID_HANDLE_VALUE, z, @@100
    12.  
    13.  ;mov edx, tx("proba")
    14.  ;invoke len_str, edx
    15.  ;invoke WriteFile, hFile, edx, [dlina_str], ADDR l1, 0
    16.  
    17.  invoke fill_memory, ADDR stinfo2, SIZEOF stinfo2, 0
    18.  mov [stinfo2.cb], SIZEOF stinfo2
    19.  mov [stinfo2.dwFlags], STARTF_USESTDHANDLES
    20.  mov eax, hFile
    21.  ;mov [stinfo2.hStdInput], eax
    22.  mov [stinfo2.hStdOutput], eax
    23.  mov [stinfo2.hStdError], eax
    24.  
    25.  invoke CreateProcess, tx("C:\WINXP\system32\ipconfig.exe"), 0, 0, 0, TRUE, \
    26.         0, 0, 0, ADDR stinfo2, ADDR prinfo2
    27.  
    28.  mpectex 'press ok'
    29.  
    30.  invoke CloseHandle, hFile
    31.  ;invoke FreeConsole
    32.  
    33.  
    34.  




    Можно или в файл (уже существующий или флаг поменять) или на свою консоль.

    td - макрос ( td(1, 2, 3) -> OF xxxx , xxxx dd 1, 2, 3 )
     
  9. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    о, хорошо! а то я уже через пип извернулся ;) но через пип некрасиво. но сработало ;)

    [​IMG] 1918231140__T3.ZIP
     
  10. krid24

    krid24 Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    88
    Код (Text):
    1. invoke ShellExecute, 0, tx("open"), tx("cmd.exe"),tx("/C ipconfig.exe > 1.txt"), 0, 0


    только лучше вместо cmd.exe юзай то, что лежит в %COMSPEC%
     
  11. yureckor

    yureckor New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    494
    Адрес:
    Russia
    Да, так тоже работает.

    Thanx