Захват выходных данных из exec

так что я пытаюсь написать какую-то вещь, которая должна захватить выходные команды, а затем плохо лечить его, а затем передать его в другую программу.

но если есть проблема, я не могу проработать, как получить выходные данные команды и сохранить их Ниже приведен образец того, что у меня есть

if(fork() == 0){
   execl("/bin/ls", "ls", "-1", (char *)0);
   /* hopefully do something with the output here*/
}else{
  *other stuff goes here*
 }`

, так что в основном я задаюсь вопросом, есть ли какой-либо способ я могу получить выход из «execl» и передать его в какую-то другую вещь (например, посредством хранения его в каком-то буфере).

любые предложения были бы отличными. спасибо ребята.. '

-121--913768- Как получить снимок экрана окна как растрового объекта в C++? Как получить снимок экрана окна как растрового объекта в C++? Предполагалось, что у меня уже есть ручка окна. И я хочу также знать, можно ли получить скриншот окна, когда оно...

Как получить снимок экрана окна как растрового объекта в C++? Предполагалось, что у меня уже есть ручка окна. И я хочу знать, можно ли получить снимок экрана окна, когда оно находится в минимизированном состоянии ?

C++ здесь означает VC++ со всеми библиотеками, связанными с Windows XP + (win32).

16
задан jondinham 3 September 2011 в 11:28
поделиться

2 ответа

Вы должны вызвать API PrintWindow:

void CScreenShotDlg::OnPaint()
{
    // device context for painting
    CPaintDC dc(this);

    // Get the window handle of calculator application.
    HWND hWnd = ::FindWindow( 0, _T( "Calculator" ));

    // Take screenshot.
    PrintWindow( hWnd,
                 dc.GetSafeHdc(),
                 0 );
}

см. Этот вопрос: получить скриншот окна Windows API

, если вы не используете MFC, здесь чистый Подпись PrintWindow:

BOOL PrintWindow(
    HWND hwnd,
    HDC hdcBlt,
    UINT nFlags
);

см. MSDN для получения более подробной информации: http://msdn.microsoft.com/en-us/library/dd162869 (v = vs.85) .aspx

о том, как сохранить его как растровое изображение, как сказал Маттео, зависит от фактической структуры, которую вы используете ...

РЕДАКТИРОВАТЬ:

здесь полный пример в необработанном C ++

#define _WIN32_WINNT    0x0501        //xp
#include <windows.h>

int main()
{ 
    RECT rc;
    HWND hwnd = FindWindow(TEXT("Notepad"), NULL);    //the window can't be min
    if (hwnd == NULL)
    {
        cout << "it can't find any 'note' window" << endl;
        return 0;
    }
    GetClientRect(hwnd, &rc);

    //create
    HDC hdcScreen = GetDC(NULL);
    HDC hdc = CreateCompatibleDC(hdcScreen);
    HBITMAP hbmp = CreateCompatibleBitmap(hdcScreen, 
        rc.right - rc.left, rc.bottom - rc.top);
    SelectObject(hdc, hbmp);

    //Print to memory hdc
    PrintWindow(hwnd, hdc, PW_CLIENTONLY);

    //copy to clipboard
    OpenClipboard(NULL);
    EmptyClipboard();
    SetClipboardData(CF_BITMAP, hbmp);
    CloseClipboard();

    //release
    DeleteDC(hdc);
    DeleteObject(hbmp);
    ReleaseDC(NULL, hdcScreen);

    cout << "success copy to clipboard, please paste it to the 'mspaint'" << endl;

    return 0;
}
23
ответ дан 30 November 2019 в 17:36
поделиться

Если кто-то заинтересован в получении изображения PrintWindow с минимизированным окном, здесь вы можете получить представление о том, как это сделать: http://www.codeproject.com/Article/20651/Capturing-Minimized- Window-A-Kid-s-Trick

Удачного кодирования;)

6
ответ дан 30 November 2019 в 17:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: