Ajuda - Busca - Membros - Calendário
Versão Completa: (Resolvido) [Dúvida] Simples (eu acho o.o)
Fórum Script Brasil > Programação & Desenvolvimento > Delphi, Kylix
Ritmi
Olá.
Eu preciso de uma solução pra pegar o nome da janela ativa no momento e escrever em um determinado arquivo .txt.
Pesquisei e o jeito aconselhável de se fazer isso e parece que é usando um comando de uma "API do Windows": GetWindowText.
Tudo bem até aí?... Pra mim não.

Não fazia idéia do que era API, então pesquisei. Entendi mais ou menos que existem xxxxxxx API's do Windows que fazem praticamente qualquer coisa, que essas API's se encontram em dll's tipo kernel32 ou user32, que elas são um conjunto de comandos... Coisas assim... Mas como sempre, as informações sobre programação são vagas e em uma linguagem que somente quem já programa vai entender.

int GetWindowText(
HWND hWnd, //handle da janela ou do controle com texto.
LPTSTR lpString, //endereço do buffer de leitura.
int nMaxCount //número máximo de caracteres que devem ser copiados
);

Peguei esse código e dei uma olhadinha. No começo achei meio estranho. Depois achei mais estranho ainda.
Eu não faço a mínima idéia de como traduzir isso, como é que esse comando vai saber qual é o arquivo em que ele vai salvar o nome da janela? Será que ele faz isso mesmo? Eu substituo aquelas "palavras" na frente das maiúsculas? Se sim, pelo quê?

Muitas questões surgiram... Como traduzir um comandinho desses...?
Deve ser tão simples... 4 linhas apenas, mas parecem letras aleatórias pra mim. A única coisa que eu entendi ali foi o MaxCount tongue.gif

Gostaria que alguém me ajudasse, ou pelo menos que tentasse. E caso seja algo muito idiota a ponto de ignorar, me diga onde tá o erro sad.gif
itibere
Cara como imagino que você deva ser novo em programação para resolver seu caso de forma rápida.

crie uma variável global e coloque nela e toda vez que um forme for a cessado ele grave o nome nela., ai quando você abrir o form você só lê o conteúdo da variável;

Mas eu aconselho da uma aprofundada em api do windows, por que é uma coisa chata mesmo.
Jhonas
QUOTE
Eu preciso de uma solução pra pegar o nome da janela ativa no momento e escrever em um determinado arquivo .txt.


Fica dessa maneira

CODE
procedure TForm1.Button1Click(Sender: TObject);
var titulo: string; s : TLabel;
    Arquivo : TextFile;
begin
   setlength( titulo, 255 );
   GetWindowText( GetforegroundWindow, PChar(titulo), 255);
   s.Caption := titulo;
   AssignFile(Arquivo, 'C:\Janelas.Txt');
   Rewrite(Arquivo);
   Writeln(Arquivo, trim(s));
   CloseFile(Arquivo);
end;


abraço
Micheus
QUOTE(Ritmi @ 02/03/2009 - 18:37) *
int GetWindowText(
HWND hWnd, //handle da janela ou do controle com texto.
LPTSTR lpString, //endereço do buffer de leitura.
int nMaxCount //número máximo de caracteres que devem ser copiados
);

Peguei esse código e dei uma olhadinha. No começo achei meio estranho. Depois achei mais estranho ainda.
Eu não faço a mínima idéia de como traduzir isso, como é que esse comando vai saber qual é o arquivo em que ele vai salvar o nome da janela? Será que ele faz isso mesmo? Eu substituo aquelas "palavras" na frente das maiúsculas? Se sim, pelo quê?
Ritmi, se você vai programar em Delphi não vai precisar fazer nenhuma tradução - as principais API's do Windows já estão disponíveis. Já olhou a cláusula uses de qualquer projeto Dephi? Lá sempre aparece Windows e Messages.

Isto que você encontrou é a definição da função (header) e que está escrita em C++ linguagem utilizada pela Microsoft para a codificação. Quando quiser fazer qualquer busca com funções de API do Windows no Google, inclua sempre a palavra Delphi na busca - certamente haverão páginas com exemplos em delphi do uso da tal função.

Se você programa em Delphi 7, poderá achar facilmente toda a referência às API's do Windows através da 3ª opção do menu Help, chama-se Windos SDK. Em outras versões você também deve achar, mas talvez não esteja tão explícita quanto nesta.

Ficam algumas dicas:
- o tipo de dados HWND é uma abreviatura de Handle Window e você irá encontrar outros tipos que começam com o H (o delphi tem um equivalente - THande, que é um Integer)
- LPTSTR é um ponteiro para string terminada em zero. Aquele LP refere-se a Long Pointer.

Veja com está a declaração da função em Delphi na unit Windows:
function GetWindowText(hWnd: HWND; lpString: PChar; nMaxCount: Integer): Integer; stdcall;

Outros tipos de dados que você pode encontrar nas definições das API's do Windows podem ser encontrados aqui (ref. msdn)


Abraços
Ritmi
Muito obrigado pelas respostas... Já está clareando um pouco a situação!

Eu não gosto muito de perguntar, mas algumas coisas não têm como adivinhar tongue.gif
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.