Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lfranca

[Resolvido] Saber se e possivel

Recommended Posts

Tenho um problema um pouco complexo, preciso fazer um programa pode ser em qualquer linguagem estou utilizando vb pq ja estou mexendo com otros projetos em vb.

 

Bom o programa precisa abrir outro programa, mover o cursor do mouse ate uma determinada coordenada (x,y) e realizar um procedimento como clicar e ou digitar algo.

 

Bom o q eu tenho no momento:

 

Private Sub Command1_Click()

Shell ("teste.exe"), vbMaximizedFocus

End Sub

 

 

Andei pesquisando o forum sobre rotinas com o mouse + nao consegui achar nada que pudesse me servir, se alguem tiver alguma ideia que possa me ajudar eu agradeço. Lembrando q pode ser qualquer linguagem, e so dar o caminho q eu aprendo o resto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, eu vou colocar aqui o nome de algumas funções(API do Windows) que você pode usar.

 

GetCursorPos

SetCursorPos

Movimenta e captura a posição do mouse.

 

 

 

GetWindowRect

Pega as dimenções de um objeto.

 

 

Se for de um programa externo, vai precisar saber o Handle da janela(você vai ler por ai WINDOW, entenda WINDOW como um objeto qualquer), então use

FindWindow

FindWindowEx

 

mouse_event

Simula o click do mouse.

 

Com essas funções acho que ja da para fazer. Dá uma procura no Mr. Google que você acha muita coisa sobre essas criancinhas. Mas se tiver alguma dúvida pode vir aqui e pergunta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E isso msm eu preciso movimentar o mouse sobre o outro programa e realizar a acão de clicar ou digitar, brigado scorpio vo da uma olhada nesses comando e fazer testes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente é um erro do programa que você quer abrir. Tenta instala de novo, verifica se o programa está com todos os arquivos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

alguem sabe q erro e esse?

 

Imagem Postada

 

por enquanto so fiz declarar a função e chamar o programa, realmente scorpion o erro anterior era do programa externo e nao do vb.

 

 

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

-------------------------------------------

Private Sub Command1_Click()

Shell ("notepad.exe"), vbMaximizedFocus

End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

A declaração foi feita em um módulo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Put scorpio, eu sou iniciante em VB, nao sei nem do q você ta falando. Eu simplesmente digitei no form como ta na img abaixo, tem q fazer algo +?

 

 

Imagem Postada

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Franca, então realmente a dúvida do scorpio estava certa.

 

Declarações com publicas só podem ser feitas dentro de modulos.

 

Para adicionar um module em seu programa vá até Project -> Add Module.

Todas as funções que está declarando com publicas, declare dentro do module.

 

Ou então você tem a opção de declará-las no form mesmo, mas ai precisa trocar de publicas (public) para privadas (private).

Compartilhar este post


Link para o post
Compartilhar em outros sites

saquei, consegui andar com o programa, brigado ai scorpion e neto...se surgirem duvidas + pra frente eu volto a postar e no final eu posto o resultado.

 

Desculpe o trabalho q dei a vcs!!

 

=p

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa voltei, esta tudo funcionando, o programa abre o outro programa clica onde eu quero tudo bonitinho, so q agora eu estou estudando o SendMessage pq preciso passar um texto para um campo do outro programa, + eu nao consegui entender muito bem como q o SendMessage faz isso tipo eu declaro ele:

 

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal Param As Any) As Long

 

beleza ate ai tudo bem agora como q eu vou passar a palavra para o campo q eu quero, como o SendMessage sabe exatamente qual o campo? Eu estava lendo neste site http://www.codelines.com/Portugues1/api046.htm + nao consegui entender como ele faz isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use a API SetWindowText.

 

Ret = SetWindowText(handle,"texto")

Ou se quiser o sendmessage

Const WM_SETTEXT as long = &HC
ret = SendMessage(handle,WM_SETTEXT,0&,"texto")

 

Na página que você passou, ele usa a API para selecionar um item da lista.

Com essa SendMessage você pode fazer quase ou tudo que o Windows faz. POde mover, redimencionar, fechar janelas e um monte de coisas mais.

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw scorpio, + achei um modo bem simples ja q o campo texto ja sai selecionado entao eu usei o SendKeys so pra jogar o texto pra dentro do campo + concerteza eu ainda vo usar o SendMessage.

 

Abração!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parece brincadeira ne + travei denovo.

 

Bom o q acontece e o seguinte o program serve pra automatizar uma funcao feita varias vezes no dia essa funcao consiste em abrir um program e inserir dados em certas posicoes, a questao e q qnd meu vb comeca a rodar ele abre o programa reconhece as coordenadas que deve posicionar o mouse e simula o click do mouse essa primeira etapa esta funcionado corretamente.

 

Depois do programa aberto eu preciso inserir um login e senha de administrador e clicar em ok, bom nessa parte e q nao funciona o q parece q q o programa tem um forma dentro da janela, ou seja você tem a janela principal do programa que ja havia sido aberta anteriromente pelo vb e dentro dessa janela você tem acredito ser um form onde tem os campos de login, senha e os botoes de ok e cancelar, eu consigo posicionar o mouse onde eu quiser nessa janela porem o comando para simular o mouse ja nao funciona. alguem tem alguma ideia do q possa ser?

 

O programa esta da seguinte forma:

 

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long

Private Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long

End Type

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Type POINTAPI

x As Long

y As Long

End Type

Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

Private 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_MOVE = &H1

Const MOUSEEVENTF_ABSOLUTE = &H8000

Const MOUSEEVENTF_RIGHTDOWN = &H8

Const MOUSEEVENTF_RIGHTUP = &H10

Private Declare Function InternetGetConnectedState Lib "wininet" (ByRef dwflags As Long, ByVal dwReserved As Long) As Long

Private Function IsWebConnected(Optional ByRef ConnType As String) As Boolean

Dim dwflags As Long

Dim WebTest As Boolean

ConnType = ""

WebTest = InternetGetConnectedState(dwflags, 0&)

Select Case WebTest

Case dwflags And CONNECT_LAN: ConnType = "LAN"

Case dwflags And CONNECT_MODEM: ConnType = "Modem"

Case dwflags And CONNECT_PROXY: ConnType = "Proxy"

Case dwflags And CONNECT_OFFLINE: ConnType = "Offline"

Case dwflags And CONNECT_CONFIGURED: ConnType = "Configurada"

Case dwflags And CONNECT_RAS: ConnType = "Remota"

End Select

IsWebConnected = WebTest

End Function

Function FU_Delay(Quanto As Double, PermiteDoEvents As Integer) As Double

Dim Inicio As Double

Dim Check As Double

Dim Contador As Double

Contador = Timer

Inicio = Timer

Do Until Check >= (Inicio + Quanto)

Check = Timer

If PermiteDoEvents Then DoEvents

Loop

FU_Delay = (Timer - Contador)

End Function

Private Sub Form_Load()

Dim pos As RECT

Dim altura, largura As Double

Dim x, y As Single

Dim posicao As POINTAPI

Dim msg As String

If IsWebConnected(msg) Then 'funcao q verifica se o programa esta conectado

Shell ("teste.exe"), vbNormalFocus 'abre o programa

vPausa = FU_Delay(2, False)

hwnd_inicial = FindWindow(vbNullString, "nome da janela")

Debug.Print hwnd_inicial

If hwnd_inicial <> 0 Then

teste = GetWindowRect(hwnd_inicial, pos)

altura = pos.Bottom

largura = pos.Right

Debug.Print altura

Debug.Print largura

GetCursorPos posicao

Debug.Print "Current X = " & posicao.x

Debug.Print "Current y = " & posicao.y

SetCursorPos 912, 740 'posiciona o mouse no botao ok

vPausa = FU_Delay(4, False)

mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0&, 0&, cButt, dwEI 'clica no botao ok

vPausa = FU_Delay(4, False)

SetCursorPos 912, 740 'posiciona o mouse no campo de login

mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0&, 0&, cButt, dwEI 'clica no campo de login

Sendkeys "login" 'digita o login

Else

MsgBox "Erro ao Abrir o Programa"

End If

Else

msg = "Programa nao conectado"

MsgBox msg, vbOKOnly, "Estado de conexão à Internet"

End If

 

End Sub

 

 

Apartir da parte em vermelho ele nao consegue + executar os comandos, uma duvida o nome da janela no FindWindow e o nome q aparece la me cima no cabecalho ne?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi. Esse programa tem forms MDI(uma janela dentro da outra)?

 

 

FindWindow, sim é o que aparece lá em cima.

 

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou exemplificar com forms do VB, o programa que eu chamo e + - asim que ele abre.

 

1- Ele abre uma tela so pra iniciar o programa, como se fosse um botao so pra entrar no programa ate essa parte eu consigo de boa posicionar o mouse e clicar no botao iniciar.

 

Imagem Postada

 

 

2- Qnd o progrma abre realmente, ele abre da forma abaixo o nome da janela princiapal permanece + tem tipo uma janela menor dentro do programa para inserir login e senha para autenticar o usuario do programa, nesta parte eu conisgo posicionar o mouse onde eu quiser porem nao consigo usar os comandos de simular o clikc do mouse ou de mandar o login e senha atraves do sendkeys

 

Imagem Postada

 

Obs: Essa outra janela menor nao e em cima do programa principal ela e dentro do programa principal, o nome da janela principal(maior) permanece igual o tempo inteiro ela nao muda em momento algum.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa tela que abre dentro, vem com alguma caixa de texto selecionada? (com o foco?)

Se sim, pode tentar usar a API GetFocus para pegar o HANDLE do objeto, e dai colocar loginn/senha.

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.