Bildschirm Handle



  • Hallo,

    aus der FAQ habe ich Screenshot Variante 1 entnommen. Ich will einen Screenshot vom gesamten Bildschirm haben.
    Hab dies verändert:

    HDC HWindowDC = GetDesktopWindow;//GetWindowDC(Form1->Handle);
    

    Aber das Ergebnis ist dann immer ein schwarzes Bild.

    Wie kann ich den gesamten Bildschirm übergeben ?



  • HDC HWindowDC = GetWindowDC(0);
    


  • Darf ich noch eine Frage stellen - den Bildschirminhalt möchte ich dann als jpg abspeichern.

    TJPEGImage *Pic = new TJPEGImage;
    Pic->??? = Image1->Picture;
    Pic->SaveToFile() ..?
    
    delete Pic;
    


  • Hallo

    Zum Kopieren des Inhalts von TBitmap nach TJPEG must du mit TCancas::Draw machen.

    bis bald
    akari



  • Hallo,

    ja okay. Ich will aber auch nur eine Form mit einem Button, größer soll das gesamte Formular nicht sein. Und über den Button dann den Screenshot erstellen. Dazu hab ich nichts gefunden.

    Trotzdem danke für die erste Antwort.



  • void MakeScreenShot(HWND handle, TImage* image)
    {
        TCanvas* canvas = new TCanvas();
        canvas->Handle = GetWindowDC(handle);
    
        TRect Dest   = Form1->Image1->ClientRect;
        TRect Source;
        GetWindowRect(handle, (LPRECT)&Source);
        Source = Rect(0, 0, Source.Right - Source.Left, Source.Bottom - Source.Top);
    
        image->Canvas->CopyRect(Dest, canvas, Source);
        delete canvas;
    
       TJPEGImage *Pic = new TJPEGImage;
       Form1->Image1->Canvas->Draw(0, 0, Pic);
       Pic->SaveToFile("c:\\Test.jpg");
       delete Pic;
    }
    

    Hallo,

    das Image1->Picture kann ich speichern. Aber die jpg-Datei wird erzeugt, hat aber keinen Inhalt. Was mache ich falsch ?



  • Also, so krieg ich es hin und das läuft auch. Quelle: http://www.mbdealer.de/borland-cpp-builder/screenshot-erstellen-und-jpg-datei-speichern/

    Aber der Screenshot ist unscharf. Wenn ich vergleichbar mit SnagIt einen Screenshot mache habe ich ein klares, scharfes Bild. So will ich es auch in meiner Anwendung haben. Nur wie ?!

    HDC dc = GetDC(NULL);
    TJPEGImage *pJPG_Bild = new TJPEGImage();
    
    Graphics::TCanvas *ScreenCanvas = new Graphics::TCanvas();
    ScreenCanvas->Handle = dc;
    
    TRect rect = Rect(0,0,Screen->Width, Screen->Height);
    Form1->Image1->Canvas->CopyRect(rect, ScreenCanvas, rect);
    
    ReleaseDC(NULL,dc);
    
    pJPG_Bild->Assign(Image1->Picture->Bitmap);
    pJPG_Bild->CompressionQuality = 50;
    pJPG_Bild->SaveToFile("c:\\Test.jpg");
    
    delete pJPG_Bild;
    delete ScreenCanvas;
    


  • pJPG_Bild->CompressionQuality = 50;
    

    Denk mal drüber nach ...


Anmelden zum Antworten