none
OBTENDO DADOS DA TELA DE UM OUTRO PROGRAMA RRS feed

  • Pergunta

  • Pessoal, Boa Noite!

    Estou idealizando uma solução para um cliente que consiste em automatizar a atualização do campo situação de registros do banco de dados dele.

    A informação de situação está em um banco de dados em um ambiente externo na receita federal e portanto é inacessível sem se utilizar um emulador, que é uma caixa preta.

    No ambiente do cliente estão instalados alguns sistema feitos em VB6/Windows Form.

    A idéia é criar um robozinho, como é feito no caso do SISBACEN, para:

    1 - Abrir o sistema VB6

    2 - Abrir uma tela de pesquisa

    3 - Colar no campo chave o ID do registro que eu quero buscar

    4 - Abrir o registro retornado

    5 - Ir no campo situação (label) e copiar o texto referente a situação do registro

    6 - Salvar esta informação no banco de dados em campo específico conforme a chave do registro.

     

    Então, neste cenário entenda-se:

    1 - Existirá um novo sistema comandando o aplicativo VB6 terceirizado que nãoi temos acesso aos fontes e nem ao Banco de Dados

    2 - Existirá um novo aplicativo desenvolvido pela minha empresa

    3 - Existirá um Banco de Dados FireBird que está atrelado ao sistema legado do cliente, que também é uma caixa preta já que é um sistema de uma outra empresa.

    4 - Tenho acesso às tabelas deste sistema legado citado no item 3

     

    Enfim, achei umas referências interssantes aqui mesmo no forum: http://social.msdn.microsoft.com/forums/pt-BR/vsvbasicpt/thread/f4f083d3-bd98-40df-8d7e-99f061e3d47e

    Mas gostaria de mais informações e possibilidades de se resolver um problema como este?

    Alguém ai já fez um robozinho em vb.net como o robo idealizado para capturar as telas do sisbacen?

    No aguardo,

    Lincoln Sposito


    Atenciosamente, Lincoln Sposito TEL COM. 55 11 3337-0944 / TEL CEL. 55 11 9182-8571 / EMAIL: LINCOLN@SPTRES.COM / skype: lincoln.sposito / www.sptres.com
    quinta-feira, 18 de agosto de 2011 22:54

Respostas

Todas as Respostas

  • Para isso você deve usar as apis do Windows. Uma das mais usadas para isso é a SendMessage, Gettext, etc. Abaixo segue alguns links com os exemplos para controlar a calculadora do windows, aí é só ir ajustando para o que você quer.

    http://forums.mrplc.com/index.php?app=downloads&showfile=816

    http://www.codeproject.com/KB/system/hooksys.aspx

    http://www.devasp.net/net/articles/display/690.html


    Bruno Ferreira de Souza
    MSP - Microsoft Student Partner
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    www.maestrodotnet.com.br
    @BrunoMaestro
    sexta-feira, 19 de agosto de 2011 02:37
  • Amigos estou trabalhando neste desenvolvimento e estou usando algumas apis do windows.

    No entanto, estou meio perdido.

    Na minha lógica, os seguintes passos devem ser executados:

    PASSO: 1 - Abrir o aplicativo ABC.EXE e obter o handle da janela principal.

    Para este item estou usando a API FindWindows da seguinte maneira:

     

    Dim lpszParentClass As String =

    "ABC.EXE"

    Dim lpszParentWindow As String =

    "ABC"

     

    Dim ParenthWnd As New IntPtr

    (0)

     

    ParenthWnd = FindWindow(vbNullString, lpszParentWindow)

     

    If ParenthWnd.Equals(IntPtr.Zero) Then Return Else IniciaEnum(ParenthWnd)

    Funcionou corretamente.

    PASSO 2: ABRIR UMA SUB-JANELA DO APLICATIVO ABS, ATRA´VÉS DO MENU CONSULTAR

    Não sei como fazer corretamente este item e estou indo por tentativa e erro.

    No caso, estou tentando obter a classe do menu Consultar através da api GetClassName, a partir dela estou tentando chamar a sub-janela de consulta para continuar o trabalho.

    Enfim, nesta ettapa o meu objetivo é abrir um form (Form Child) de consulta dentro do aplicativo VB6.

    Qual seria a melhor forma de fazer isto?

    PASSO 3: DENTRO DO FORM CONSULTAR NECESSITO COLOCAR UM VALOR DENTRO DO CAMPO DE PESQUISA

    Entendo que o processo deva ser realizado através das apis GetClassName e SendMessage.

    Mas também não estou entendendo o uso das mesmas.

    No caso, usei um código parecido com este:

      "

    Public

     

    Function EnumChildProc(ByVal hWnd As Long, ByVal lParam As Long) As

    Boolean

     

    Dim tam As

    Long

     

    Dim tamAux As

    Integer

     

    Dim bufAux As String

    = Space(255)

     

    Dim bufCopia As

    String

     

    Dim bufTitle As

    String

     

    Dim bufClassName As

    String

     

    ' Obtém o tamanho do texto da janela.

    tam = SendMessage(hWnd, WM_GETTEXTLENGTH, 0&, 0&)

     

    ' Verifica se o tamanho do texto retornado é maior que 0.

     

    If tam > 0

    Then

     

    ' Nome da classe.

    tamAux = GetClassName(hWnd, bufAux, 255)

    tamAux = InStr(1, bufAux, Chr(0))

    bufClassName = Left$(bufAux, tamAux - 1)

     

    ' Verifica o nome do controle no Delphi.

     

    If bufClassName = "TEdit"

    Then

     

    ' Edit1

     

    ' Título da janela.

    tamAux = GetWindowText(hWnd, bufAux, 255)

    tamAux = InStr(1, bufAux, Chr(0))

    bufTitle = Left$(bufAux, tamAux - 1)

     

    ' Copia texto de Edit1 para Text1 no aplicativo VB.

     

    If bufTitle = "Edit1"

    Then

     

    Debug

    .Print(CopiaTexto(hWnd))

     

    ' Copia texto de Edit2 para Text2 no aplicativo VB.

     

    ElseIf bufTitle = "Edit2"

    Then

     

    ' Edit2

     

    Debug

    .Print(CopiaTexto(hWnd))

     

    End

    If

     

    End

    If

     

    End

    If

     

    ' Continua o loop até passar por todas as janelas internas.

    EnumChildProc =

    True

     

    End

    Function

    "

    Não obtenho sucesso pois a chamada do GetClassName não me retorna nada.

    PASSO 4: EXECUTAR A CONSULTA ATRAVÉS DO CLIQUE NO BOTÃO OK

    Acredito que este passo deva ser realizado através da api SendMessage.

    Mas não tenho certeza.

     

    Realizando estes passos acredito ter condições de dar andamento nos demais passos para a conclusão do fluxo do sistema.

    Alguém poderia me dar um help?

     

    Abs,

    Lincoln


    Atenciosamente, Lincoln Sposito TEL COM. 55 11 3337-0944 / TEL CEL. 55 11 9182-8571 / EMAIL: LINCOLN@SPTRES.COM / skype: lincoln.sposito / www.sptres.com
    sexta-feira, 16 de setembro de 2011 23:30
  • No passo 2, tenta atribuir uma tecla de atalho para esse menu, e se ele tiver você da o sendkeys com essa tecla.

    Bruno Ferreira de Souza
    MSP - Microsoft Student Partner
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    MCC - Microsoft Community Contributor
    www.maestrodotnet.com.br
    @BrunoMaestro

    quarta-feira, 21 de setembro de 2011 03:48