Capture image aus IntPtr

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von seby1302.

    Capture image aus IntPtr

    Hallo an alle.

    Ich habe ein kleiner Application programmiert, was ein Maus klick per SendMessage an einem unter Fenster sendet.

    Nun wollte ich gerne ein Screenshot machen nur aus diesem Fenste, so das es best möglichst auch bei minimierten zustand funktioniert.


    Der klick geht an MacromediaFlashPlayerActiveX das ist der 8te unter -Fenster.

    VB.NET-Quellcode

    1. SendMessage(Chwnd7, WM_LBUTTONDOWN, X, Y)
    2. SendMessage(Chwnd7, WM_LBUTTONUP, X, Y)


    Über Chwnd7 erreiche ich also mein unter-Fenster, wie kann ich nun ein Screenshot machen oder diese in ein Bitmap spaichern.
    Mfg


    P.s CaptureFromScreen etc Meine ich damit überhaupt nicht, sondern mit Chwnd7 mein unterfenster erreichen und davon ein Bitmap aspeichern. lg

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „seby1302“ ()

    Was ist Chwnd7 ?

    Importierts die Methode

    C#-Quellcode

    1. [DllImport("kernel32.dll", SetLastError = true, EntryPoint = "CopyMemory")]
    2. public static extern unsafe void CopyMemory(void* destination, void* source, uint length);


    1 .Leg ein Bitmap an mit den Maßen vom Fenster.
    2. dann machst du LockBits beim Bitmap
    3. holst die über Scan0 den IntPtr
    4. fürhrst CopyMemory aus
    5. UnLockBits beim Bitmap

    das wäre das speichern, aber wie du an das Bildkommst und wo es im speicher liegt kein plan :/

    ansonsten schau dir mal das an
    ourcodeworld.com/articles/read…-ways-with-c-and-winforms
    Danke für die schnelle antwort.

    Was ist Chwnd7 ?

    VB.NET-Quellcode

    1. Public hwnd, Chwnd, Chwnd2, Chwnd3, Chwnd4, Chwnd5, Chwnd6, Chwnd7 As IntPtr


    Der DllImport ist leider nicht für vb.net , ich habe das hier gefunden..

    VB.NET-Quellcode

    1. Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)


    Allerdings sagt der mir bei (Any)
    As Any Wird in Deklaration nicht unterstürzt 8|

    seby1302 schrieb:

    so das es best möglichst auch bei minimierten zustand funktioniert.
    Du kannst nur das fotografieren, was auch dargestellt wird!
    Du wirst bereits bei einem eigenen Fenster Schwierigkeiten haben, es aus dem minimierten Zustand heraus zu capturen,
    Bei einem Fremdfenster halte ich das für definitiv ausgeschlossen!
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also was du dann machen musst ist,
    1. Brauchst du den Handel des Prozess
    2. Holst du dir den "Device Content"
    3. erstellst ein DDB

    und fertig :D

    Dürfte ich fragen, was du genau vorhast, denn ich bin mir nicht sicher ob das hier zugelassen ist, was du das probierst ? :D
    Du kannst nur das fotografieren, was auch dargestellt wird!Du wirst bereits bei einem eigenen Fenster Schwierigkeiten haben, es aus dem minimierten Zustand heraus zu capturen,Bei einem Fremdfenster halte ich das für definitiv ausgeschlossen!


    Gennau deshalb habe ich es mit copymemory gemacht kein Capturefromschreen ;)
    Das funktioniert allso und hätte sich hiermt erledigt.
    mit Sendmessage sende ich die maus clicks und kommen ann richtiger stelle an alles tutti.. :thumbsup:

    Nun ein anderen problem dafür mache ich aber ein neuen post auf.
    vielen dank für die nutzlichen tipps. :)