Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Scrrenshots Teil II

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.12.2006, 01:33 Uhr
-Biohazard-



Hallo Leute,
ich habe nun ein Programm geschrieben, dass meinen Desktop filmt und anzeigt, doch nun ist nur meine Frage, wie ich beim Aufzeichnen des Desktops ein Fenster ausblenden kann. Ich habe im Vordergrund nämlich mein "Videofenster", dass widerrum gefilmt wird und schlecht aussieht.
Ich würde mein Programmfenster gerne ausblenden auf dem Videobild

C++:
HDC hdcScreen = GetDC( GetDesktopWindow() );
        HDC hdcCompatible = CreateCompatibleDC( hdcScreen );
        HBITMAP hbmScreen = CreateCompatibleBitmap( hdcScreen, 1280, 1024 );
        SelectObject( hdcCompatible, hbmScreen );
        BitBlt( hdcCompatible, 0, 0, 1280, 1024, hdcScreen, 0, 0, SRCCOPY );
        StretchBlt( hdc, 0, 0, 800, 600, hdcCompatible, 0, 0, 1280, 1024, SRCCOPY );
        DeleteObject( hdcCompatible );
        DeleteObject( hdcScreen );
        DeleteObject( hbmScreen );



Danke für eure Hilfe
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.12.2006, 10:37 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


fenster ausblenden, bild machen, einblenden
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.12.2006, 11:25 Uhr
-Biohazard-



Ups
Danke
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.12.2006, 18:53 Uhr
xXx
Devil


Naja aber wenn er filmen will ist das auch schlecht Obwohl geht Hmm aber so wird das ja bestimmt nicht von den verschiedenen Dektopaufnahme Programmen gemacht... die werden doch nicht für jeden Frame den Desktop neu knipsen, oder etwa doch?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.12.2006, 21:57 Uhr
-Biohazard-



Damit gehts...

C++:
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
{
  InvalidateRect(hWnd, NULL, TRUE);
  HDC hdc; // Handle auf Zeichenbereich
  PAINTSTRUCT ps; // Zeichenbereich
  switch ( message )
  {
    case WM_ERASEBKGND: // kein Flimmern!
      return (1);
    case WM_PAINT:
      hdc = BeginPaint( hwnd, & ps );
      {
        // -X-X-X-X-X-X BILD
        HDC hdcScreen = GetDC( GetDesktopWindow() );
        HDC hdcCompatible = CreateCompatibleDC( hdcScreen );
        HBITMAP hbmScreen = CreateCompatibleBitmap( hdcScreen, 1280, 1024 );
        SelectObject( hdcCompatible, hbmScreen );
        BitBlt( hdcCompatible, 0, 0, 1280, 1024, hdcScreen, 0, 0, SRCCOPY );
        StretchBlt( hdc, 0, 0, 800, 600, hdcCompatible, 0, 0, 1280, 1024, SRCCOPY );
        DeleteObject( hdcCompatible );
        DeleteObject( hdcScreen );
        DeleteObject( hbmScreen );
        // -X-X-X-X-X-X
      }
      EndPaint( hwnd, & ps );
      return ( 0 );
    case WM_DESTROY:
      PostQuitMessage( 0 );
      return 0;
  }
  return DefWindowProc( hwnd, message, wParam, lParam );
}


Ich aktualisiere die ganze Zeit das Bild und damit kein Flimmern entsteht habe ich WM_ERASEBKGND benutzt.
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.12.2006, 19:16 Uhr
xXx
Devil


Das wird dir kein sauberes Bild liefern ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
21.12.2006, 19:49 Uhr
xXx
Devil



C++:
case WM_PAINT:
        {
            RECT    rcClient;
            RECT    rcDesktop;
            SystemParametersInfo(SPI_GETWORKAREA, 0, &rcDesktop, 0);

            HDC        hDC                = BeginPaint(hWnd, &ps);
            HDC        hScreenDC        = GetDCEx(NULL, NULL, 0);
            GetClientRect(hWnd, &rcClient);
            SetStretchBltMode(hDC, HALFTONE /*COLORONCOLOR*/);
            StretchBlt(hDC, 0, 0, rcClient.right - rcClient.left, rcClient.bottom - rcClient.top, hScreenDC, 0, 0, rcDesktop.right - rcDesktop.left, rcDesktop.bottom - rcDesktop.top, SRCCOPY);
            DeleteDC(hScreenDC);
            EndPaint(hWnd, &ps);
        } break;

macht so ziemlich das selbe Nur mit der entsprechenden Desktopauflösung usw.
Naja aber wenn ich das jetzt mal in ne App reinhau... dann auch die WM_ERASEBKGND Message return 1; nehme ... k dann erhält man ein äußerst merkwürdiges Bild ... immer weiter ineinander verschachtelte Desktopabbildungen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: