VB 5/6-Tipp 0201: Clientbereich fremder Fenster pixelweise auslesen
von ActiveVB
Beschreibung
Nunja, wofür es so richtig nützlich sein soll, weiß ich auch nicht so recht. Die Frage kommt aus dem Forum. Zumindest lässt sich hiermit das Fenster einer beliebigen Anwendung, sofern nicht verdeckt, pixelweise auslesen. Das macht nur Sinn wenn nur ein oder ein paar weinge, bestimmte Pixel erforderlich sind. Ansonsten ließe sich das mit der BitBlt viel zügiger umsetzen.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: FindWindowA (FindWindow), GetClientRect, GetDC, GetPixel, GetWindowRect | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Project1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Beschriftungsfeld "Label1" Option Explicit Private Declare Function FindWindow Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As String, ByVal _ lpWindowName As String) As Long Private Declare Function GetDC Lib "user32" (ByVal hwnd _ As Long) As Long Private Declare Function GetPixel Lib "gdi32" (ByVal _ hdc As Long, ByVal x As Long, ByVal y As Long) _ As Long Private Declare Function GetWindowRect Lib "user32" (ByVal _ hwnd As Long, lpRect As RECT) As Long Private Declare Function GetClientRect Lib "user32" (ByVal _ hwnd As Long, lpRect As RECT) As Long Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Sub Form_Load() Dim xhWnd&, xhDC&, x&, y&, pCol& Dim dx&, dy&, r As RECT, offy& Label1.Visible = False With Me .Caption = "Fälschung" Call Shell("calc.exe") xhWnd = FindWindow(vbNullString, "Rechner") Call GetWindowRect(xhWnd, r) .Width = (r.Right - r.Left) * Screen.TwipsPerPixelX .Height = (r.Bottom - r.Top) * Screen.TwipsPerPixelY xhDC = GetDC(xhWnd) Call GetClientRect(xhWnd, r) dx = r.Right - r.Left dy = r.Bottom - r.Top offy = .ScaleHeight / Screen.TwipsPerPixelY - dy .ScaleMode = vbPixels .AutoRedraw = True .Refresh For x = 0 To dx For y = 0 To dy pCol = GetPixel(xhDC, x, y) Me.PSet (x, y + offy), pCol Next y Next x .Refresh .AutoRedraw = False End With End Sub '---------- Ende Formular "Form1" alias Form1.frm ---------- '-------------- Ende Projektdatei Project1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 3 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Alain WIND am 26.09.2003 um 17:20
Hallo,
Ich mochte eine Picturebox die grösser ist als das Bildschirm duplizieren (eine Copy machen).
Auf der Picturebos habe ich controls (VB6 und Eingene).
Ich habe die "Print a Form That Is Larger Than the Screen" von microsoft versucht aber die controls werden nicht copiert.
Ich habe auch Bitblts versucht aber nur was am Bildshirm ist wird copiert.
Man hat mir WM_PrintClient empfohlen. ich finde aber keinen Beispiel.
Einen tip?
Im voraus vielen Dank.
MFG
ALAIN
Gibt es eine Lösung
Kommentar von claudia am 03.08.2001 um 04:47
ich habe gewartet, ... aber da kam nichts - koenntet ihr dazuschreiben, dass in der englischen vb-version in
xhWnd = FindWindow(vbNullString, "Rechner")
der rechner ein "Calculator" ist?
Kommentar von Mats Vanselow am 15.01.2001 um 16:30
Leider aktualisiert der Code die erstellte Grafik nicht! Wie kann ich das ändern? Bitte antworten, wer es weiß.