Controlar outro programa com python.

629 views
Skip to first unread message

ericla...@gmail.com

unread,
Aug 4, 2017, 11:29:22 AM8/4/17
to Python Brasil
Oi pessoal, sou programador de C#, VB e VBA. Estou começando nesse mundo de Python pela interação bem sucedida em C#.

Estou procurando informações sobre como controlar um programa .exe. Como se fosse um web scraping ou um parse.

Ex. Tenho um programa (.exe) de terceiros que aparece informações na tela, informações que o usuário pode editar, incluir ou somente visualizar(tipo uma label que não pode ser selecionada para ctrl+c ctrl+v). Preciso criar um programa para pegar e incluir informações nesse programa, inclusive pegar informações nessa label unselectable.

Se você tiver qualquer informação, qualquer luz ou codigo pronto por favor me ajude. De preferência sem muitas gambiarras, mas elas também serão bem vindas.

Marcos Thomaz

unread,
Aug 4, 2017, 12:05:16 PM8/4/17
to python...@googlegroups.com
Em Python não cheguei a fazer isso, mas creio que a lib pywin(32/64) deva te auxiliar. Fiz algo semelhante já tem um (bom) tempo. Na ocasião, precisava modificar o atalho da área de trabalho de um usuário indicando o novo servidor. O problema era que em muitos computadores (maioria deles na verdade) não existia o acesso ao compartilhamento. E por algum motivo desconhecido, se não marcasse o compartilhamento como persistente, o sistema apresentava instabilidade (sistema feito em delphi, 3 camadas usando COM+). Fiz um executável (em Delphi) que acessava o compartilhamento e modificava o atalho do servidor antigo, apontando para o novo. O caso é que, nestes computadores que não tinham acesso ao compartilhamento do novo servidor, abria a tela solicitando usuário e senha de acesso, além de um checkbox para marcar, indicando se era para persistir (salvar no "cofre" do windows) o usuário e senha. O executável que fiz, ao detectar que a janela abria, preenchia com usuário/senha padrão e marcava a caixa, e acionava o botão OK. Isso era executado bem rápido e o usuário normalmente via que alguma tela aparecia, mas se fechava rapidamente. Na época fiz em Delphi este executável, usando mensagens do windows. Como eu disse, não fiz em Python na época, porém, creio que dê para fazer, com certa pesquisa, pois mesmo em delphi, usei apenas a API padrão do windows pra isso (findwindow, sendmessage e postmessage, e estas podem ser acessadas/utilizadas a partir da pywin32 ou pywin64).

Basicamente, você teria que capturar o handle da janela (usando findwindow) e depois, usando postmessage, enviar mensagens solicitando os elementos da janela. FindWindow nesse caso, captura pelo Título da janela. O chato vai ser ler os componentes porque, na janela do próprio Windows (que foi onde apliquei isso), para pegar o "checkbox" tinha uns 4 frames, mais umas 2 classes (tipo Container). O maior trabalho foi esse, mapear os elementos da tela. Creio que em uma tela com mais elementos você terá um grande trabalho, ou alguém aqui do grupo tenha alguma outra solução. Lembro que eu havia visto algo semelhante há um tempo, que mapeava as telas pegando e enviando informações (cliques, preenchimento de campos de texto, etc), mas que funcionava especificamente para o MacOS (algo do tipo: você colava a imagem e ele executava ou preenchia o campo). 

Talvez seja uma ideia também, uma vez que, pela API do windows você pode selecionar os elementos que estão em uma determinada região (chamada de Rect), passando as coordenadas de topo/esquerda e base/direita (pra pegar a posição exata tinha que usar uma outra função disponível na API chamada ScreenToClient). Mas isso é uma especulação, não fiz dessa forma. 



--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasil+unsubscribe@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--


Marcos Thomaz da Silva
Analista de Tecnologia da Informação
Reply all
Reply to author
Forward
0 new messages