Como pegar nomes dos campos de um Programa Topic is solved

Tire suas dúvidas sobre programação em AutoHotkey

Moderator: Gio

jrufino
Posts: 33
Joined: 25 Oct 2019, 07:17

Como pegar nomes dos campos de um Programa

04 Aug 2022, 10:01

Bom dia pessoal, em especial ao nosso querido Gio que é o fera do autohotkey!

Aqui no meu trabalho eu criei um script para preencher os campos de um formulario pra mim, acontece que eu não sei pq mas tem momentos que ele altera no nome dos campos, então por exemplo, um campo que era "edit7" depois passa a ser "edit20" e para contornar isso eu tive que adicionar um novo campo no meu script para poder ficar alterando estes campos... ficou assim:

Code: Select all

if (CAMPO_CODIGO = 1)
	{
		varTIPO = TEdit20		
		varNUMERO_AP = TEdit22
		varANDAR = TEdit21
		varBLOCO = TEdit19
........
}

if (CAMPO_CODIGO = 2)
	{
		varTIPO = TEdit10		
		varNUMERO_AP = TEdit25
		varANDAR =  TEdit5
		varBLOCO = TEdit11
........
}
eu repito esses blocos if 5x pois são 5 variaçoes diferentes dos nomes dos campos... então que queria saber se tem como eu pegar automaticamente os de todos os campos do programa e gravar talvez em um array para poder eliminar esse monde de código repetido e fazer somente um bloco de if.....
User avatar
Gio
Posts: 1247
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: Como pegar nomes dos campos de um Programa  Topic is solved

04 Aug 2022, 11:14

Bom dia Jrufino.

Os números de ordem dos ClassNN (tipo edit5 ou edit7) normalmente são automáticos e sua ordem normalmente é a mesma ordem à qual os controles foram adicionados à janela pelo programa-alvo. Sendo assim algum comportamento do programa pode estar criando ou recriando os campos em ordens ou quantidades diferentes na tela-alvo.

então que queria saber se tem como eu pegar automaticamente os de todos os campos do programa e gravar talvez em um array para poder eliminar esse monde de código repetido e fazer somente um bloco de if.....

Faltou uma palavra aí após "os". Mas se o que quiz dizer foi "os nomes" (ou "os ClassNNs"), então você pode usar o comando WinGet com o parâmetro ControlList para isso.

Exemplo : No código abaixo, altere o nome da janela-alvo (determinado via windowspy) e veja se de fato consegue recuperar os nomes dos ClassNN dos controles.

Code: Select all

WinGet, Lista_de_controles, ControlList, NOME_DA_JANELA_ALVO ; altere aqui com o nome da janela-alvo desejada obtido através do WindowSpy.
msgbox % Lista_de_controles

Para referência de consultas futuras: WindowSpy é uma ferramenta embutida no autohotkey. Você pode acessá-la da seguinte forma: quando um script está em execução no computador, um ícone de H verdade aparecerá no canto inferior-direito da tela (se não aparecer, você deve clicar na seta que mostra os ícones ocultos no canto-inferior direito da tela). Ao clicar com o botão direito do mouse em cima do ícone de H verde, uma das opções é o WindowSpy. O WindowSpy é uma ferramente que mostra os dados ocultos das janelas e dos controles aberto. Clique em "follow mouse" e coloque o mouse em cima do controle de janela que quiser obter as informações (tais como o ClassNN) e elas serão mostradas na tela do WindowSpy.
jrufino
Posts: 33
Joined: 25 Oct 2019, 07:17

Re: Como pegar nomes dos campos de um Programa

04 Aug 2022, 11:37

Gio wrote:
04 Aug 2022, 11:14
Bom dia Jrufino.

Os números de ordem dos ClassNN (tipo edit5 ou edit7) normalmente são automáticos e sua ordem normalmente é a mesma ordem à qual os controles foram adicionados à janela pelo programa-alvo. Sendo assim algum comportamento do programa pode estar criando ou recriando os campos em ordens ou quantidades diferentes na tela-alvo.

então que queria saber se tem como eu pegar automaticamente os de todos os campos do programa e gravar talvez em um array para poder eliminar esse monde de código repetido e fazer somente um bloco de if.....

Faltou uma palavra aí após "os". Mas se o que quiz dizer foi "os nomes" (ou "os ClassNNs"), então você pode usar o comando WinGet com o parâmetro ControlList para isso.

Exemplo : No código abaixo, altere o nome da janela-alvo (determinado via windowspy) e veja se de fato consegue recuperar os nomes dos ClassNN dos controles.

Code: Select all

WinGet, Lista_de_controles, ControlList, NOME_DA_JANELA_ALVO ; altere aqui com o nome da janela-alvo desejada obtido através do WindowSpy.
msgbox % Lista_de_controles

Para referência de consultas futuras: WindowSpy é uma ferramenta embutida no autohotkey. Você pode acessá-la da seguinte forma: quando um script está em execução no computador, um ícone de H verdade aparecerá no canto inferior-direito da tela (se não aparecer, você deve clicar na seta que mostra os ícones ocultos no canto-inferior direito da tela). Ao clicar com o botão direito do mouse em cima do ícone de H verde, uma das opções é o WindowSpy. O WindowSpy é uma ferramente que mostra os dados ocultos das janelas e dos controles aberto. Clique em "follow mouse" e coloque o mouse em cima do controle de janela que quiser obter as informações (tais como o ClassNN) e elas serão mostradas na tela do WindowSpy.
Esqueci a palavra "nomes" mesmo Gio :lol:
Eu uso o WindowSpy para pegar os nomes dos campos, mas estes nomes mudam não sei por qual motivo.
São 33 campos que eu posso alterar, peguei o nome de todos com o WindowSpy e fiz o script, estava funcionando quando de repente depois de salvar um novo item, vi que os dados estavam indo embaralhados para o programa mas no script estava correto, então abri o WindowSpy e constatei que realmente os nomes dos campos do programa tinham mudado e novamente peguei o nome de cada um dos 33 campos e fiz um novo bloco com eles... e de repente os nomes mudaram novamente... então não são os nomes dos campos do script que estão mudando, são os nomes dos ClassNN do programa mesmo.

De qualquer maneira vc já me ajudou bastante, era isso que eu queria, agora vou ver se os campos mantem a mesma ordem e so muda o nome pois aí eu so faço um laço para pegar as variaveis nas posições que eu preciso :dance:

Muito obrigado Gio! :thumbup:

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 4 guests