Handle !!!!
caros colegas, sempre vejo algumas pessoas perguntando como pegar o handle ( de um form ) a minha duvida é a seguinte ????
O que vem a ser o Handle !!!!!
[]´s
O que vem a ser o Handle !!!!!
[]´s
Anonymous
Curtidas 0
Respostas
Anonymous
10/03/2003
Handle é um numero que indica para o windows a instancia da janela,
existem varios tipos de handles, qnd vc programa em c++ e nao tem
algo como uma vcl, vc cria janelas atravez da API CreateWindowEx,
essa funcao retorna o HANDLE que identifica a janela e para vc enviar
mensagem, mudar o estilo e o texto, vc presisa do HANDLE.
De uma pesquisa no help da API que vem com o delphi, o meu texto
ta meio confulso mas, ´faz parte´
falow
existem varios tipos de handles, qnd vc programa em c++ e nao tem
algo como uma vcl, vc cria janelas atravez da API CreateWindowEx,
essa funcao retorna o HANDLE que identifica a janela e para vc enviar
mensagem, mudar o estilo e o texto, vc presisa do HANDLE.
De uma pesquisa no help da API que vem com o delphi, o meu texto
ta meio confulso mas, ´faz parte´
falow
GOSTEI 0
Nildo
10/03/2003
handle é a identificação da janela ou objeto. Cada objeto tem um handle.
Com um handle é possível fazer varias coisas como:
Colocar uma janela (Calculadora por exemplo) dentro de um TPanel de seu Form. (Caso queria o codigo me pessa. eu coloco aqui). Voce pode ter um controle sobre qualquer coisa sobre um handle: Saber se está visivel (Ex.: Se o bloco de notas está aberto), saber se está Enabled ou disabled, e qualquer otura coisa como o Left, o width, etc. E você pode obter informações sobre o handle do bloco de notas por exemplo, saber o Left dele, etc. Você pode colocar um botão de seu formulário dentro do Bloco de notas ou da calculadora, em fim qualquer outra janela. É muito interessante. Todos os profissionais avançados em delphi, que trabalham com HOOK por exemplo, é obrigado a saber mecher com handle.
Ahh você pode também modificar o estado do Bloco de notas (por exemplo) mudando seu Width da janela, abilitando, desabilitando, escondendo, mostrando, minimizar, maximizar, fechar, etc.. Tudo a partir de seu programa. Em fim, pode fazer de tudo com outra janela =P
Quaquer duvida sobre como fazer este tipos de coisas, me avise.
Com um handle é possível fazer varias coisas como:
Colocar uma janela (Calculadora por exemplo) dentro de um TPanel de seu Form. (Caso queria o codigo me pessa. eu coloco aqui). Voce pode ter um controle sobre qualquer coisa sobre um handle: Saber se está visivel (Ex.: Se o bloco de notas está aberto), saber se está Enabled ou disabled, e qualquer otura coisa como o Left, o width, etc. E você pode obter informações sobre o handle do bloco de notas por exemplo, saber o Left dele, etc. Você pode colocar um botão de seu formulário dentro do Bloco de notas ou da calculadora, em fim qualquer outra janela. É muito interessante. Todos os profissionais avançados em delphi, que trabalham com HOOK por exemplo, é obrigado a saber mecher com handle.
Ahh você pode também modificar o estado do Bloco de notas (por exemplo) mudando seu Width da janela, abilitando, desabilitando, escondendo, mostrando, minimizar, maximizar, fechar, etc.. Tudo a partir de seu programa. Em fim, pode fazer de tudo com outra janela =P
Quaquer duvida sobre como fazer este tipos de coisas, me avise.
GOSTEI 0
Tatuweb
10/03/2003
Colocar uma janela (Calculadora por exemplo) dentro de um TPanel de seu Form. (Caso queria o codigo me pessa. eu coloco aqui).
Nildo vc ainda tem esse código? Ou alguém que esteja vendo sabe como fazer?
GOSTEI 0
Nildo
10/03/2003
Tenho sim:
windows.SetParent( FindWindow( nil, ´Calculadora´ ), panel1.handle )
GOSTEI 0
Paulo_amorim
10/03/2003
Olá
Pow legal isso... tinha usado Handle em algumas funções que pediam o Handle, mas sempre daquele jeito ´burro´ sem saber realmente o que estava fazendo!
No caso de eu abrir várias instâncias de um programa, como o Notepad, cada janela terá seu Handle diferente então?
Como diferenciar uma da outra, daí?
Até+
Pow legal isso... tinha usado Handle em algumas funções que pediam o Handle, mas sempre daquele jeito ´burro´ sem saber realmente o que estava fazendo!
No caso de eu abrir várias instâncias de um programa, como o Notepad, cada janela terá seu Handle diferente então?
Como diferenciar uma da outra, daí?
Até+
GOSTEI 0
Nildo
10/03/2003
Nesse caso você não diferencia. mas cada uma vai ter um handle diferente. Só dá para diferenciar pelo ID do processo.
GOSTEI 0
Fórum Vini
10/03/2003
Nesse caso você não diferencia. mas cada uma vai ter um handle diferente. Só dá para diferenciar pelo ID do processo.
Só explicando melhor: Você não consegue pegar o Handle das duas usando o FindWindow(porque as duas janelas vão ter o mesmo caption(nem sempre) e o mesmo nome de classe), ele sempre vai retornar o handle da primeira( ou da última, não me lembro da ordem ).. Mas fazendo uma pesquisa usando GetNextWindow você consegue achar as duas separadamente...
GOSTEI 0
Marco Salles
10/03/2003
pesquisando aqui no forum , encontrei uma sugestão bem interresante, no que diz a este assunto.
http://forum.clubedelphi.net/viewtopic.php?t=43989&highlight=calculadora
onde seguindo a dica do Chico Gois as instruçoes para isto são :
porem encontrei tb uma dica do nildo muito interresante neste outro tópico:
http://forum.clubedelphi.net/viewtopic.php?t=4735&highlight=calculadora
onde seguindo a dica do nildo , a gente coloca uma janela , dentro de um form , usando a seguinte instrução :
[color=red:0b17c77ab5]Agora mais precisamente, é que entra a segunda parte desta dúvida...[/color:0b17c77ab5]
Ao Colocar a janela dentro do form como fica o código para capturar
o valor da calculadora em um edit :cry: :cry: :cry:
http://forum.clubedelphi.net/viewtopic.php?t=43989&highlight=calculadora
onde seguindo a dica do Chico Gois as instruçoes para isto são :
procedure TForm1.Timer1Timer(Sender: TObject); var h: Thandle; s : string; i: Integer; begin //Procure pela calculadora H := FindWindow(´scicalc´, nil); //pegue o handle da caixa, ou seja, um filho que a calculadora h := getwindow(h,GW_CHILD); //Tamanho do Texto i:=SendMessage(h, WM_GETTEXTLENGTH, 0, 0) + 1; // inicializar uma variável string com o tamanho do texto setLength(s, i); //agora, pegue o texto SendMessage(h, WM_GETTEXT, i, Integer(s)); //tratar o seu valor s := trim(s); //Exibi-lo Edit1.Text := s; end;
porem encontrei tb uma dica do nildo muito interresante neste outro tópico:
http://forum.clubedelphi.net/viewtopic.php?t=4735&highlight=calculadora
onde seguindo a dica do nildo , a gente coloca uma janela , dentro de um form , usando a seguinte instrução :
windows.SetParent( FindWindow( nil, ´Calculadora´ ), Form1.handle )
[color=red:0b17c77ab5]Agora mais precisamente, é que entra a segunda parte desta dúvida...[/color:0b17c77ab5]
Ao Colocar a janela dentro do form como fica o código para capturar
o valor da calculadora em um edit :cry: :cry: :cry:
GOSTEI 0