vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Windows API
API-Funktion BitBlt 
Autor: Line
Datum: 25.06.08 08:43

Hallo!

Ich möchte mit der API-Funktion BitBlt den Inhalt des Fensters einer anderen Anwendung in eine PictureBox meiner Anwendung kopieren.
Das funktioniert auch schon fast, nur mit dem Problem, dass das Bild "versetzt" angezeigt wird.
D.h. Breite und Höhe stimmen schon mit dem Original überein, aber der Anfangspunkt passt nicht, also wird vom Fenster ein Teil abgeschnitten, auf der anderen Seite kommt aber ein Teil vom Hintergrund dazu.

Weiß jemand woran das liegen könnte? Ich hoffe ich hab mich einigermaßen verständlich ausgedrückt.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
  System.EventArgs) Handles Button1.Click
  ...
  PictureBox1.Image = CaptureWindow(hwnd)
End Sub
Public Function CaptureWindow(ByVal hwnd As Integer) As Bitmap
        Dim hdcSrc As Integer
        Dim Breite As Integer
        Dim Hoehe As Integer
        Dim hdcDest As Integer
        Dim hBm As Integer
        Dim hOldBm As Integer
        Dim BmNeu As Bitmap
        Dim RECT1 As RECT
 
        'hDC des Quellfensters
        hdcSrc = GetDC(hwnd)
 
        'Größe ermitteln
        GetWindowRect(hwnd, RECT1)
        Breite = RECT1.right - RECT1.left
        Hoehe = RECT1.bottom - RECT1.top
 
        'hDC des Zielfensters
        hdcDest = CreateCompatibleDC(hdcSrc)
 
        'Neue Bitmap anlegen
        hBm = CreateCompatibleBitmap(hdcSrc, Breite, Hoehe)
 
        'Bitmap selektieren
        hOldBm = SelectObject(hdcDest, hBm)
 
        'Quellfenster in neue Bitmap kopieren
        BitBlt(hdcDest, 0, 0, Breite, Hoehe, hdcSrc, 0, 0, SRCCOPY)
 
        'Auswahl wiederherstellen
        SelectObject(hdcDest, hOldBm)
 
        'Aufräumen
        DeleteDC(hdcDest)
        ReleaseDC(hwnd, hdcSrc)
 
        'In GDI+ Bitmap umwandeln
        BmNeu = Image.FromHbitmap(hBm)
 
        'Bitmap freigeben
        DeleteObject(hBm)
 
        Return BmNeu
End Function
Vielen Dank im Voraus!

Gruß Line
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: API-Funktion BitBlt 
Autor: ModeratorMartoeng (Moderator)
Datum: 27.06.08 10:09

Das lässt sich einfach lösen:
GetWindowDC anstatt GetDC.
GetDC ermittelt den DC des Fensterinhalts, Du möchtest aber das komplette Fenster inkl. Titelleiste und Rahmen.


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel