• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Sir Pereira

SendKeys

15 mensagens neste tópico

Boas pessoal,

há alguma coisa que possa bloquear o SendKeys de funcionar?

É que a primeira vez que o experimentei funcionava, agora deixou de dar, mesmo comentando o resto do código, continua na mesma coisa.

O que está mal aqui?

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        InputBox("lol")

        SendKeys.Send("lol")
    End Sub

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Será que assim conseguem perceber melhor o problema ? ;)

sendkeys.jpg

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens que reparar que o SendKeys simula o teclado, logo, quem tiver o focus (pode até não ser uma janela do teu projecto) é que vais receber isso. Por isso, a tua inputbox pode não estar a receber, mas o sendkeys estar a enviar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta por um activate antes do sendkeys e um focus na textbox

Assim:

Private Sub Form1_load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Activate()
        "instancia da Caixa de Texto".Focus()
        SendKeys.Send("LOL")
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta por um activate antes do sendkeys e um focus na textbox

Assim:

Private Sub Form1_load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Activate()
        "instancia da Caixa de Texto".Focus()
        SendKeys.Send("LOL")
    End Sub

Assim funciona.

Então e como conseguiria fazer o SendKeys numa InputBox por exemplo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

inputBox.focus(), da mm maneira q esse.

Mas porque queres fazer isso através do SendKeys?

Nas caixas de texto tb podes afectar a propriedade Text.

Com Caixa.Text = "LOL"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

inputBox.focus(), da mm maneira q esse.

Mas porque queres fazer isso através do SendKeys?

Nas caixas de texto tb podes afectar a propriedade Text.

Com Caixa.Text = "LOL"

Há aqui uma coisa que não apanhei.

O InputBox não tem Focus.

E o InputBox não é uma TextBox, são coisas diferentes.

Já agora:

    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        System.Threading.Thread.Sleep(5000)

        SetCursorPos(270, 404) ' Where X and Y are in pixel
        Dim tempPos As Point
        Dim R As Long = GetCursorPos(tempPos) ' You'll get your location in TempPos



        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

        System.Threading.Thread.Sleep(10000)

        WebBrowser1.Focus()
        SendKeys.Send("teste")
    End Sub

Por exemplo, este código não me escreve no campo. Apesar do campo ficar seleccionado e até posto de forma a edição de texto.

O campo no site é em Flash, fará isso alguma diferença?

É que se não for o SendKeys e eu escrever dá na maior.

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aí o q fica com o Focus é o componente WebBrowser, tinhas q fazer chegar o focus ao conteudo desse web browser.

Visto isso ser em flash não tou a ver como o poderás fazer. Talvez enviar o sendkeys, e do lado do flash no action script ter alguma coisa q detecte qd são enviadas as Keys. Como n conheço actionscript n te sei dizer se isso é possivel, mas acho q sim.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tipo se quiseres escrever algo numa inputbox usas o default value

InputBox("Pergunta", "", "Lol")

Explica melhor a questão por favor

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tipo se quiseres escrever algo numa inputbox usas o default value

InputBox("Pergunta", "", "Lol")

Explica melhor a questão por favor

Só não queria isso porque era mesmo para testar as SendKeys, e não percebi porque lá não davam.

Ora bem, então vou explicar tudo.

No outro dia lembrei-me de fazer um bot para o jogo MyBrute, que nem sei como se joga, mas como se tinha de interagir e o adversário ganhava pontos só pelo preenchimento de um username e o clique em 2 teclas, pensei em fazer uma coisa destas para vender a pessoal que eu sei que está interessado.

Ora bem, actualmente, já consegui ter o código para que, quando o carregamento do documento do WebBrowser estiver completo, ele clica na posição do ecrã definida por mim, que vai activar a caixa de texto em Flash, de seguida faço um SendKeys para essa caixa de texto, mas népia.

Tá aqui o código, os sleep's, são para dar tempo ao PC para processar alguma informação que não tenha ficado por processar.

    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        System.Threading.Thread.Sleep(5000)

        SetCursorPos(270, 404) ' Where X and Y are in pixel
        Dim tempPos As Point
        Dim R As Long = GetCursorPos(tempPos) ' You'll get your location in TempPos



        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

        System.Threading.Thread.Sleep(10000)

        WebBrowser1.Focus()
        SendKeys.Send("teste")
    End Sub

Ajuda ? (A)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A função InputBox() é modal, ou seja, o resto do código só se faz quando esta fechar.

Uma forma de fazer o que queres é usar um timer para escrever através de uma nova thread.

Por exemplo:

    Private WithEvents tm As Timer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        tm = New Timer
        tm.Interval = 150
        tm.Start()
        InputBox("Isto é um teste ... ")
    End Sub

    Private Sub tm_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tm.Tick
        tm.Stop()
        SendKeys.Send("ABC")
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A função InputBox() é modal, ou seja, o resto do código só se faz quando esta fechar.

Uma forma de fazer o que queres é usar um timer para escrever através de uma nova thread.

Por exemplo:

    Private WithEvents tm As Timer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        tm = New Timer
        tm.Interval = 150
        tm.Start()
        InputBox("Isto é um teste ... ")
    End Sub

    Private Sub tm_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tm.Tick
        tm.Stop()
        SendKeys.Send("ABC")
    End Sub

Ok, obrigado.

E quanto ao problema do Flash, consegues ajudar-me? :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E quanto ao problema do Flash, consegues ajudar-me? :)

Não sei, só testando.

Podes arranjar um exemplo ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei, só testando.

Podes arranjar um exemplo ?

Exemplo como?

Ora: http://sirpereira.mybrute.com/ , com um WebBrowser, após simulares um clique na parte onde é para pôr o username, experimenta lá fazer um SendKeys.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

porque nao fazes isso em AutoIT?

é a linguagem mais usada para fazer "Bots" para jogos :confused:, e vem com um help gigante que tem tudo o que possas querer fazer la...

(em menos de 2h fazes isso la)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora