Auto klik   zodpovězená otázka

C#, VB.NET, WinForms

Dobrý den, mám dotaz ohledně naprogramovaného kliku, ani tak neřešim pozici cursoru to už nějak zvládnu ale nemám potuchy jak napsat kod který prostě klikne myší nic víš, děkuji mnohokrát za rady.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

zapoměl jsem dodat že to píšu ve VB2010..

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Hledejte hýbání s myší ve vyhledávání a ve vlákně "Hýbání s myší" si najeďte cca. doprostřed a tam to je.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jasně na ten kod kterej tam psali na autoklik jsem uz taky narazil ale nefunguje mi hazí mi to tohle:

"A call to PInvoke function 'Automat!Automat.Form1::mouse_event' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature."

Nemam paru o co mu jde..

Jinym zpusobem to nejde?

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Tento kód vložte na začátek (ale pod Class!!!)

Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

    Const MOUSEEVENTF_LEFTDOWN = &H2
    Const MOUSEEVENTF_LEFTUP = &H4
    Const MOUSEEVENTF_MIDDLEDOWN = &H20
    Const MOUSEEVENTF_MIDDLEUP = &H40
    Const MOUSEEVENTF_RIGHTDOWN = &H8
    Const MOUSEEVENTF_RIGHTUP = &H10
    Dim cButt
    Dim dwEI

a pokud chcete každou sekundu kliknout tak si udělejte timer s intervalem 1000 a do procedury Tick:

mouse_event(MOUSEEVENTF_LEFTDOWN, 0&, 0&, cButt, dwEI)
mouse_event(MOUSEEVENTF_LEFTUP, 0&, 0&, cButt, dwEI)

čímž tlačítko sepnete a zase odepnete.

Ondryáš O

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pořád mi to hází tu samou chybu, není ještě jiný způsob?

Někde jsem viděl že to dělal někdo přes:

mouse.click.left()

atd..

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak ten niekto mal pravdepodobne napísaný nejaký wrapper v ktorom bola definovaná metóda left() ale určite klikal cez WINAPI.

Tá chyba znamená, že poradie alebo typy parametrov vo funkcii, ako ste ju vo VB.NET definoval nezodpovedá definícii funkcie v pôvodnej unmanaged knižnici. Skontrolujte, či ste tie typy správne namapoval z unmanaged typov na tie managed.

Ešte som kedysi našiel http://www.pinvoke.net/default.aspx/user... . Treba to kus prekopať, ale potom tým môžete ovládať úplne všetko, aj hru ktorá číta údaje cez DirectInput.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

mouseClickLeft, mouseClickRight atd. budou nejspíš jenom metody do kterých je zabalená ta samotná apina.

Zkopírujte si do projektu tohle a mělo by to fungovat:

    Public Structure MOUSEINPUT
        Public dx As Integer
        Public dy As Integer
        Public mouseData As Integer
        Public dwFlags As Integer
        Public dwtime As Integer
        Public dwExtraInfo As Integer
    End Structure

    Public Structure INPUT_TYPE
        Public dwType As Integer
        Public xi As MOUSEINPUT
    End Structure

    Private Declare Function SendInput Lib "user32.dll" (ByVal nInputs As Integer, ByRef pInputs As INPUT_TYPE, ByVal cbSize As Integer) As Integer
    Const M_MOVE = &H1
    Const M_LD = &H2
    Const M_LU = &H4
    Const M_RD = &H8
    Const M_RU = &H10





    Sub mouseLeftChytit()
        Dim inputEvents(0) As INPUT_TYPE

        inputEvents(0).xi.dx = 0
        inputEvents(0).xi.dy = 0
        inputEvents(0).xi.mouseData = 0
        inputEvents(0).xi.dwFlags = M_MOVE + M_LD '+ M_LU
        inputEvents(0).xi.dwtime = 0
        inputEvents(0).xi.dwExtraInfo = 0


        SendInput(1, inputEvents(0), Len(inputEvents(0)))
    End Sub

    Sub mouseLeftPustit()
        Dim inputEvents(0) As INPUT_TYPE

        inputEvents(0).xi.dx = 0
        inputEvents(0).xi.dy = 0
        inputEvents(0).xi.mouseData = 0
        inputEvents(0).xi.dwFlags = M_MOVE + M_LU
        inputEvents(0).xi.dwtime = 0
        inputEvents(0).xi.dwExtraInfo = 0


        SendInput(1, inputEvents(0), Len(inputEvents(0)))
    End Sub

    Sub mouseRightChytit()
        Dim inputEvents(0) As INPUT_TYPE

        inputEvents(0).xi.dx = 0
        inputEvents(0).xi.dy = 0
        inputEvents(0).xi.mouseData = 0
        inputEvents(0).xi.dwFlags = M_MOVE + M_RD
        inputEvents(0).xi.dwtime = 0
        inputEvents(0).xi.dwExtraInfo = 0

        SendInput(1, inputEvents(0), Len(inputEvents(0)))
    End Sub

    Sub mouseRightPustit()
        Dim inputEvents(0) As INPUT_TYPE

        inputEvents(0).xi.dx = 0
        inputEvents(0).xi.dy = 0
        inputEvents(0).xi.mouseData = 0
        inputEvents(0).xi.dwFlags = M_MOVE + M_RU
        inputEvents(0).xi.dwtime = 0
        inputEvents(0).xi.dwExtraInfo = 0

        SendInput(1, inputEvents(0), Len(inputEvents(0)))
    End Sub

Pokud budete chtít kliknout tak prostě jen zavoláte:

mouseLeftChytit()
mouseLeftPustit()

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Tak jsem to tam vlozil vse a ono to jde, i kdyz je to asi 5x delsi:) ale hlavne ze to jde dekuji!

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback