Bild aufnehmen Vom hWnd/IntPtr nicht mehr Möglich nach windows 10 Update

  • VB.NET
  • .NET (FX) 4.0

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

    Bild aufnehmen Vom hWnd/IntPtr nicht mehr Möglich nach windows 10 Update

    Hallo Leute.
    Habe seit längerem das Problem das mein Code unter Windows 10 nicht mehr funktioniert, unter ältere Windows Versionen tut es noch immer, z.b auch unter Windows 10 ohne Update.

    Es geht darum Screenshot von einem Bestimmten Fenster zu machen, dieser konnte sich früher auch außerhalb des Bildschirm befinden, solange sie Maximiert war.
    Weiß einer weshalb es nicht mehr geht?
    Und wie man es umgehen könnte?

    Mein Code:

    VB.NET-Quellcode

    1. Friend Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Int32


    VB.NET-Quellcode

    1. Friend Function CreateBitmap(ByVal hWnd As IntPtr, ByVal BmpRect As Bitmap) As Bitmap
    2. Dim WinRect As RECT
    3. GetWindowRect(hWnd, WinRect)
    4. BmpRect = New Bitmap(WinRect.right - WinRect.left, WinRect.bottom - WinRect.top)
    5. Dim hdcFrom As IntPtr = GetDC(hWnd)
    6. Dim hdcTo As IntPtr = CreateCompatibleDC(hdcFrom)
    7. Dim hBitmap As IntPtr = CreateCompatibleBitmap(hdcFrom, BmpRect.Width, BmpRect.Height)
    8. If hBitmap <> IntPtr.Zero Then
    9. Dim hLocalBitmap As IntPtr = SelectObject(hdcTo, hBitmap)
    10. BitBlt(hdcTo, 0, 0, BmpRect.Width, BmpRect.Height, hdcFrom, 0, 0, SRCCOPY)
    11. SelectObject(hdcTo, hLocalBitmap)
    12. DeleteDC(hdcTo)
    13. ReleaseDC(hWnd, hdcFrom)
    14. BmpRect = Image.FromHbitmap(hBitmap)
    15. DeleteObject(hBitmap)
    16. End If
    17. Return BmpRect
    18. End Function



    VB.NET-Quellcode

    1. Dim hWnd As IntPtr = Win32.FindWindow(Nothing, "Rechner")
    2. If Not hWnd = IntPtr.Zero Then
    3. PictureBox1.Image = CreateBitmap(hWnd, BmpRect)
    4. End If



    Danke schon mal :)

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

    @seby1302 Poste mal vollständigen und compilierbaren Code.
    ====
    Mit Option Strict On :!:
    Visual Studio - Empfohlene Einstellungen
    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!

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

    @RodFromGermany Ansiech ist es schon vollständig oben bis auf die Buttons etc.
    Im Anhang die Datei..

    @wolfi_bayern
    Vom Bildschirm Kann ich nicht gebrauchen, diese Funktion macht auch dann einem wenn wie bereits gesagt, das Fenster Außerhalb des Bild liegt.
    Z.b kann du Den Rechner offen haben, und oben Drüber Öffnest du ein Browser o.ä es macht ganz normal Weiter davon Fotos obwohl du zu der zeit ganz was anderes siehst.

    Die Funktion läuft ja wie bereits gesagt, nur nicht mehr unter Windows 10 nach update, deshalb interessiert mich was die lieben von MS gemacht haben, und ob man es umgehen kann...
    Dateien
    • CaptureHwnd.rar

      (149,15 kB, 74 mal heruntergeladen, zuletzt: )
    @seby1302 Möglicherweise liegt es am Calc.
    Mit nem Notepad hatte ich Erfolg:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    3. Dim p = Process.GetProcessesByName("Notepad.exe")
    4. If (p.Count = 0) Then
    5. Process.Start("Notepad.exe")
    6. End If
    7. End Sub
    8. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    9. Dim RechnerhWnd As IntPtr = Win32.FindWindow(Nothing, "Unbenannt - Editor")
    10. Dim BmpRect As Bitmap = Nothing
    11. If RechnerhWnd <> IntPtr.Zero Then
    12. Me.PictureBox1.Image = CreateBitmap(RechnerhWnd, BmpRect)
    13. Label1.Text = "Sucess"
    14. Else
    15. Label1.Text = "Editor not Found!"
    16. End If
    17. End Sub
    18. End Class
    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!
    Tatsächlich bei mir auch. :D
    Ok Also werden die Meisten Komponenten Blockiert, Mein Haupt Programm mit Integriertem Browser will auch nicht mehr.
    Ich vermute mal das sie etwas Drüber gelegt haben, als Schutz vor unerwünschte Spionage Tools.

    Getestet habe ich nun auch.
    Widgets wie UHR Funktioniert nicht mehr(Windows sitebar).
    Windows Startleiste funktioniert wiederum.
    Desktop Ebenfalls Schwarzes Bild.

    Frage ist nun ob es eine Option gibt dieses zu Deaktivieren, oder das Programm ins ausnahmen hinzufügen zu können.
    Weil selbst wen ich die Update deinstallieren wollte, habe ich dann ein Problem mit den danach kommende updaten die sich dann nicht mehr installieren lassen

    EDIT: Seiten wie Google.com Kann er aber finden, sehe ich grade.
    Nur solche seiten Mit Flash Player etc nicht mehr =O

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

    seby1302 schrieb:

    als Schutz vor unerwünschte Spionage Tools.
    Ein "normaler" Screenshot funktioniert doch.
    ====
    GetProcessesByName() ohne Extension eingeben:

    VB.NET-Quellcode

    1. Dim p = Process.GetProcessesByName("Notepad")
    2. If (p.Count = 0) Then
    3. Process.Start("Notepad.exe")
    4. End If

    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!

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

    Nun funktioniert es, habe den Browser auf eine Neuere Version emuliert und da lässt sich das machen.
    Vielen dank :)
    Was wäre den die Version des Neuesten Microsoft edge?

    VB.NET-Quellcode

    1. Public Module EmulateIEModul
    2. Public Sub EnulateTheIeModul()
    3. Dim AppName As String = My.Application.Info.AssemblyName
    4. Dim VersionCode As Integer
    5. Dim Version As String = ""
    6. Dim ieVersion As Object = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\Microsoft\Internet Explorer").GetValue("svcUpdateVersion")
    7. If ieVersion Is Nothing Then
    8. ieVersion = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\Microsoft\Internet Explorer").GetValue("Version")
    9. End If
    10. If ieVersion IsNot Nothing Then
    11. Version = ieVersion.ToString.Substring(0, ieVersion.ToString.IndexOf("."c))
    12. Select Case Version
    13. Case "10"
    14. VersionCode = 10000
    15. Case Else
    16. If CInt(Version) >= 7 Then
    17. VersionCode = 10000
    18. Else
    19. Throw New Exception("IE Version not supported")
    20. End If
    21. End Select
    22. Else
    23. Throw New Exception("Registry error")
    24. End If
    25. 'Check if the right emulation is set
    26. 'if not, Set Emulation to highest level possible on the user machine
    27. Dim Root As String = "HKEY_CURRENT_USER\"
    28. Dim Key As String = "Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION"
    29. Dim CurrentSetting As String = CStr(Microsoft.Win32.Registry.CurrentUser.OpenSubKey(Key).GetValue(AppName & ".exe"))
    30. If CurrentSetting Is Nothing OrElse CInt(CurrentSetting) <> VersionCode Then
    31. Microsoft.Win32.Registry.SetValue(Root & Key, AppName & ".exe", VersionCode)
    32. Microsoft.Win32.Registry.SetValue(Root & Key, AppName & ".vshost.exe", VersionCode)
    33. End If
    34. End Sub
    35. End Module

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

    seby1302 schrieb:

    Was wäre den die Version des Neuesten Microsoft edge?
    So was:
    IE:

    Edge:
    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!
    ja scheint so, allerdings habe ich unter edge nun gesehen das der Captcha gar nicht richtig funktioniert(Im Edge Browser meine ich).
    Genau das selbe Alles Über oder Unter Die Emulierte V10000
    Im Bilder Modus, Gibt er immer wider neue.
    Im Ton Modus kommt sofort...
    (your computer or network may be sending automated queries)
    Einzige was Einiger massen Funktioniert scheint die 10000 Version zu sein :whistling:
    Werde diese dann dabei belassen, tut ja was es soll.