Как получить соержимое консоли?

Тема в разделе "WASM.BEGINNERS", создана пользователем _Colibri_, 6 июн 2008.

  1. _Colibri_

    _Colibri_ New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    20
    САБЖ
    Как можно скопировать содержимое консоли в буффер?
     
  2. _Colibri_

    _Colibri_ New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    20
    Наверное я неточно выразился

    я не про буффер обмена

    Нужно сдлеать вот что внутри нашей программы:
    1. выделить буффер с помощью VirtualAlloc
    2. Найти окно нужной программы (консоль не наша)
    2. Получить содержимое консоли
    3. Скопировать содержимое в буффер

    Как это реализовать?
    какие функции юзать и т.п. ?
     
  3. Colibri

    Colibri New Member

    Публикаций:
    0
    Регистрация:
    8 май 2008
    Сообщения:
    117
    С поиском окон разобрался

    Теперь, как имея хэндл окна, получить его содержимое? (если речь о консольном приложении)
     
  4. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Код (Text):
    1.     DWORD nLength = 0x4000;
    2.     DWORD pid;
    3.     GetWindowThreadProcessId(FindWindow(NULL, L"C:\\winduke\\system32\\cmd.exe"), &pid);
    4.     FreeConsole();      // Процессу нельзя быть приаттаченым более чем к одной консоли
    5.     AttachConsole(pid);
    6.     HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
    7.     PVOID pBuf = VirtualAlloc(NULL, sizeof(WCHAR)*nLength, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
    8.     DWORD nRead;
    9.     COORD coord = {0, 0};
    10.     ReadConsoleOutputCharacter(hCon, (LPWSTR)pBuf, nLength, coord, &nRead);
    Возможно, придётся читать в несколько приёмов, изменяя coord - при значениях nLength немного бОльших ReadConsoleOutputCharacter возвращает ноль и говорит "Not Enough Memory".

    Edit:
    _Colibri_
    Colibri

    wut? :)
     
  5. Colibri

    Colibri New Member

    Публикаций:
    0
    Регистрация:
    8 май 2008
    Сообщения:
    117
    _basmp_
    _Colibri_ - это временный ник, пока этот был забанен за мат на форуме

    Sol_Ksacap
    Спасибо огромное!