так что я пытаюсь написать какую-то вещь, которая должна захватить выходные команды, а затем плохо лечить его, а затем передать его в другую программу.
но если есть проблема, я не могу проработать, как получить выходные данные команды и сохранить их Ниже приведен образец того, что у меня есть
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++ здесь означает VC++ со всеми библиотеками, связанными с Windows XP + (win32).
Вы должны вызвать 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;
}
Если кто-то заинтересован в получении изображения PrintWindow с минимизированным окном, здесь вы можете получить представление о том, как это сделать: http://www.codeproject.com/Article/20651/Capturing-Minimized- Window-A-Kid-s-Trick
Удачного кодирования;)