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

Discussion in 'WASM.BEGINNERS' started by _Colibri_, Jun 6, 2008.

  1. _Colibri_

    _Colibri_ New Member

    Blog Posts:
    0
    Joined:
    Jun 2, 2008
    Messages:
    20
    САБЖ
    Как можно скопировать содержимое консоли в буффер?
     
  2. _Colibri_

    _Colibri_ New Member

    Blog Posts:
    0
    Joined:
    Jun 2, 2008
    Messages:
    20
    Наверное я неточно выразился

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

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

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

    Colibri New Member

    Blog Posts:
    0
    Joined:
    May 8, 2008
    Messages:
    117
    С поиском окон разобрался

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

    Sol_Ksacap Миша

    Blog Posts:
    0
    Joined:
    Mar 6, 2008
    Messages:
    623
    Code (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

    Blog Posts:
    0
    Joined:
    May 8, 2008
    Messages:
    117
    _basmp_
    _Colibri_ - это временный ник, пока этот был забанен за мат на форуме

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