Click auf Div Element im Webbrowser element

  • VB.NET

Es gibt 55 Antworten in diesem Thema. Der letzte Beitrag () ist von Roger1992.

    Wie gar nichts passiert?? Natürlich passiert da was, da wird auf den Print Prozess des angegeben Handlers zugegriffen und in das angegebene Bitmap Handler geschrieben.

    Und wenn man nicht weiß was ein Handler ist, dann googlet man danach =)
    Habe nun diesen Code um den Handler herauszufinden:

    VB.NET-Quellcode

    1. Dim form1 As IntPtr = FindWindow("", Formname) tbHandle = FindWindowEx(form1, IntPtr.Zero, "", "WebBrowser1")



    Leider erhalte ich die Fehlermeldung

    Quellcode

    1. Die arithmetische Operation hat einen Überlauf verursacht.

    Beim versuch

    Quellcode

    1. Dim form1 As IntPtr = FindWindow("", Formname)


    zu debuggen
    FindWindow brauchste nicht, weil das nur für externe Programme ist auf die sonst kein direkten zugriff hast, aber da du ja das programm selbst schreibst hast du auch die Handles, weil die hat jedes Control.

    VB.NET-Quellcode

    1. Dim hwnd As IntPtr = WebBrowser1.Handle
    Okey hab jetzt folgenden Quellcode:

    VB.NET-Quellcode

    1. Dim b As New Bitmap(wb.Width, wb.Height)
    2. Dim g As Graphics = Graphics.FromImage(b)
    3. Dim hdc As IntPtr = g.GetHdc()
    4. Dim Formname As String = Me.Name
    5. Dim hwnd As IntPtr = wb.Handle
    6. PrintWindow(hwnd, hdc, 0)
    7. PictureBox1.Image = b


    Leider wird mir der Screenshot immer noch nicht in der PictureBox angezeigt, also doch das Bild wird geladen aber es ist einfach leer, was bedeutet, der ScreenShot funktioniert noch nicht richtig.
    Okay, sry vergessen dass man das Handle wieder freigeben muss

    VB.NET-Quellcode

    1. Dim b As New Bitmap(WebBrowser1.Width, WebBrowser1.Height)
    2. Dim g As Graphics = Graphics.FromImage(b)
    3. Dim hdc As IntPtr = g.GetHdc()
    4. Dim hwnd As IntPtr = WebBrowser1.Handle
    5. PrintWindow(hwnd, hdc, 0)
    6. g.ReleaseHdc(hdc)
    7. g.Flush()
    8. g.Dispose()
    9. PictureBox1.Image = b
    10. b.Dispose()
    Cool jetzt funktioniert es. Brauche nun nur noch den click im Background mittels Send Massage

    Noch eine kurze Frage kann ich in einem Bild nach nem Bild suchen also wenn mein grosses Bild aus einer Weltkarte besteht mit lauter kleinen Bildchen z.B. einem Bauerndorf, kann ich nach dem Bild des Bauerndorfs suchen?

    Grüsse
    Hallo

    Danke für die Hilfe.

    Habe noch ein Problem. Ich versuche im Moment, den Klick auszuführen.

    VB.NET-Quellcode

    1. Public Const WM_LBUTTONDOWN As Integer = &H201
    2. Public Const WM_LBUTTONUP As Integer = &H202
    3. Public Declare Function SendMessage Lib "user32" _
    4. Alias "SendMessageA" (ByVal hwnd As Long, _
    5. ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long


    Und Folgendermassen rufe ich das auf:

    VB.NET-Quellcode

    1. Public Sub SendClick(ByVal lnghWND As Long, ByVal x As Long, ByVal y As Long)
    2. Dim iResult As Long
    3. Dim lParam As Long
    4. lParam = (y * &H10000) + x
    5. iResult = SendMessage(lnghWND, WM_LBUTTONDOWN, 0&, lParam)
    6. iResult = SendMessage(lnghWND, WM_LBUTTONUP, 0&, lParam)
    7. iResult = SendMessage(lnghWND, WM_LBUTTONDOWN, 0&, lParam)
    8. iResult = SendMessage(lnghWND, WM_LBUTTONUP, 0&, lParam)
    9. Timer2.Start()
    10. Timer2.Interval = 1000
    11. Wait_Counter = 0
    12. End Sub


    Wobei:

    Quellcode

    1. lnghWND das Handle des Webbrowsers ist wb.Handle
    2. und lParam eine Zusammensetzung aus den Browserabhängigen Koordinaten (Linke obere ecke des WebBrowser = X: 0 Y: 0


    Leider funktioniert das nicht so wie ich möchte.
    Grüsse und Danke

    Roger
    Das ist keine genaue Fehlerbeschreibung, aber ich habe eine Idee:
    As Long-> As Integer
    du verwendest hier die VB Classics API-Aufrufe, wobei in VB Classics(6 und älter) Long 32-Bit groß ist und Integer 16...
    In VB.Net ist Long 64-Bit groß und Integer 32....
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Hallo zusammen

    Ich habe ein ganz merkwürdiges Problem.

    In meinem WebBrowser da ist ein Button.
    In der Funktion navigiere ich den Mauszeiger zum Button und führe einen Linksclick aus.
    Diesen Klick macht es auch, allerdings nicht richtig.
    Der Button wird mit einer gepunkteten Linie umrandet. Was eigentlich bedeutet, dass der klick ausgeführt worden ist.
    Allerdings werde ich nicht weitergeleitet.
    Sehr merkwürdig.

    Bitte um Hilfe!

    Grüsse Roger

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

    Hey

    Das mit dem 2. Click funktioniert nicht.
    Ich klicke den Button weils eigentlich kein Button ist sondern durch den Click eine JavaScript Funktion aufgerufen wird.
    Der Button hat keine ID sondern nur eine Class.
    Und warum ich nicht die JavaScript Funktion aufrufe ist weil ich etwa 10 mal auf den selben Knopf drücke allerdings immer Punkte abhängig Parameter mitgegeben werden.

    Grüsse Roger