/ / AutoIt e tela bloqueada - janelas, automação, autoit

AutoIt e tela bloqueada - janelas, automação, autoit

Eu tenho um software proprietário que eu uso para baixar alguns dados confidenciais da Internet, este software é a única maneira de acessar esses dados.

O software abre com uma tela e então eutem que clicar em "download" e o download começa. Eu gostaria de baixar esses dados tarde da noite (digamos 0200 horas) todas as noites. A desvantagem era que eu tinha que sentar na frente do laptop para "clicar" no botão de download.

Então, eu escrevi um script AutoIt para abrir osoftware, aguarde 30 segundos para que o software termine a rotina de inicialização e, em seguida, "vá para" um determinado local (coordenadas) na tela e execute um "mouseclick ()". Em seguida, criei uma "tarefa agendada" usando o agendador de tarefas do Windows para executar este executável autoit às 0200 horas. Tudo funciona bem, como esperado.

Autoit executável corre bem quando o usuário está"ativo". Mas se o usuário está "bloqueado" (ou seja, tela de bloqueio), então ele está preso em "WinActivate ()" esperando o usuário se tornar "Ativo" e recomeça a partir daí, depois que o usuário se torna "ativo". Isso significa que o laptop precisa estar no modo desbloqueado durante a noite, o que não é aconselhável por razões de segurança. Eu então descobri que eu poderia usar "ControlClick ()" para fazer o mesmo quando a tela está bloqueada.

Meu problema agora é que quando eu uso AutoIt WindowFerramenta de informação, ele não mostra a CLASSE ou qualquer informação relacionada ao botão de download quando eu passar o mouse sobre o botão de download. Então, pode ser a tela é uma tela de flash ou outra coisa que foi intencionalmente feita para se certificar de que o botão CLASS não foi visto!

Uma opção seria tirar uma screenshot, encontrar olocalização e, em seguida, enviar as coords para Mouseclick (), mas que poderia facilmente ficar muito mais complicado, considerando resolução de tela diferente em máquinas diferentes (no caso isto é portado para outra máquina etc etc)

Alguma sugestão e soluções?

Respostas:

1 para resposta № 1

WinActivate () irá esperar até que o usuário estejaativado para ativar a janela e, em seguida, retornar e é uma função de bloqueio, neste caso, para evitá-lo. Mantenha seu aplicativo VB em segundo plano, não minimizado e remova a função WinActivate (). O ControlClick não precisa que a janela esteja ativa.

Isso deve funcionar com o nome do manipulador e o nome da classe corretos:

HotKeySet("!{s}", "_exit")
Local $count = 0
Local $handle

While $count < 3
Sleep(5000)
$handle = ControlGetHandle("name", "", "[CLASS:ThunderRT6FormDC]")   ;add name as well if there is one
If $handle Then     ;check if handle exists
ConsoleWrite("Handle exists" & @LF)
ControlClick($handle, "", "[CLASS:Classhere]", "left", 1, 191, 115)   ;add a class if exists
EndIf
ConsoleWrite("Try: "  & $count & " times" & @LF)
$count += 1
WEnd

Func _exit()
ConsoleWrite("Exiting!" & @LF & "Tried: " & $count & @LF)
Exit
EndFunc

As informações que você me deu da informação autoitferramenta não é suficiente. Use alguma outra ferramenta para obter mais informações. O Spy ++ é uma ótima ferramenta. Experimente e volte com mais informações sobre o nome e as classes do manipulador do Windows.

E mais uma vez você está dando algumas informações sobre o seu código. Este exemplo deve executar um clique de controle, mas você pode ter outra função além de winactivate que irá bloquear seu script novamente

Editar: Adicionado Tesseract OCR UDF: http://www.autoitscript.com/forum/topic/89542-tesseract-screen-ocr-udf/