CefSharp / WinForms - automatisierte Mausklicks - ein Klick fehlt



  • push?



  • hast du es mal ohne mouseUp probiert? evtl. falsche koordinaten?



  • @Wade1234 Dann gibt's nicht einmal den einen Rechtsklick. Die Koordinaten sind okay.



  • also auf https://stackoverflow.com/questions/31135070/cef-simulate-mousedown-and-keysend (ĂĽbrigens das 3. ergebnis bei google -> sendmouseclickevent) gibt es ein beispiel mit CefEventFlags.None als letzten parameter. angeblich funktioniert das. probiers halt mal, wenns nicht funktioniert, kann ich dir auch nicht weiter helfen.



  • @Wade1234 Danke, kenn ich schon, funzt net.



  • @Wade1234 Okay, danke trotzdem 🙂



  • @bruder sagte in CefSharp / WinForms - automatisierte Mausklicks - ein Klick fehlt:

    int x = 300, y = 300;

    Verschieb' das mal in dein Lambda rein. Das ist ja völlig sinnfrei das ausserhalb zu haben. Plus du solltest sicherstellen dass du das ganze nur 1x startest - nicht dass OnLoadingStateChanged mehrfach mit args.IsLoading == false aufgerufen wird und das irgend ein unerwartetes Verhalten erzeugt.



  • @hustbaer Aye aye Sir!

    private async Task<int> Klick()
            {
                    await Task.Run(async () =>
                    {
                        int x = 300, y = 300;
                        
                        chromeBrowser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Right, false, 1, CefEventFlags.RightMouseButton);
                        await Task.Delay(100);
                        chromeBrowser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Right, true, 1, CefEventFlags.RightMouseButton);
                        await Task.Delay(1000);
    
                        x -= 50; y -= 50;
    
                        chromeBrowser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Right, false, 1, CefEventFlags.RightMouseButton);
                        await Task.Delay(100);
                        chromeBrowser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Right, true, 1, CefEventFlags.RightMouseButton);
                        await Task.Delay(1000);
    
                        x -= 50; y -= 50;
    
                        chromeBrowser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Right, false, 1, CefEventFlags.RightMouseButton);
                        await Task.Delay(100);
                        chromeBrowser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Right, true, 1, CefEventFlags.RightMouseButton);
                        await Task.Delay(1000);
                    });
                return 1;
            }
    
            private async void button1_Click(object sender, EventArgs e)
            {
                await Klick();
            }
    

    Funzt net. Nach wie vor wird nur einmal geklickt.


  • Administrator

    @bruder Nimm bitte das Task.Run da raus. Dadurch läuft die Sache in einem anderen Thread. Ich weiss nicht mal, ob die API Thread-Safe ist.

    private async Task Klick()
    {
        int x = 300, y = 300;
        
        chromeBrowser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Right, false, 1, CefEventFlags.RightMouseButton);
        await Task.Delay(100);
        chromeBrowser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Right, true, 1, CefEventFlags.RightMouseButton);
        await Task.Delay(1000);
    
        x -= 50; y -= 50;
    
        chromeBrowser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Right, false, 1, CefEventFlags.RightMouseButton);
        await Task.Delay(100);
        chromeBrowser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Right, true, 1, CefEventFlags.RightMouseButton);
        await Task.Delay(1000);
    
        x -= 50; y -= 50;
    
        chromeBrowser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Right, false, 1, CefEventFlags.RightMouseButton);
        await Task.Delay(100);
        chromeBrowser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Right, true, 1, CefEventFlags.RightMouseButton);
        await Task.Delay(1000);
    }
    

    Aber ich vermute, dass es auch so nicht funktionieren wird. Meine Hilfe beruhte nur auf der Erfahrung mit WinForms. Ich kenne mich ansonsten mit CefSharp leider nicht aus.



  • @Dravere sagte in CefSharp / WinForms - automatisierte Mausklicks - ein Klick fehlt:

    Aber ich vermute, dass es auch so nicht funktionieren wird.

    Da hast du leider Recht.


Log in to reply