FindWindow e Memo

22/02/2006

Pessoal... não sei mais que fazer... estou na faze final de um sistema de mensagens interno em minha empresa e estou apanhando dos sockets:

Meu código no server:

if sCommand = ´MSG´ then
begin
Try
wnd := FindWindow(nil, ´QCP Mensageiro 1.0´);
if wnd <> 0 then
begin
wnd := FindWindowEx(wnd, 0, PChar(´NxMemo´), nil);
AuxS := LowerCase(EnviadoPor) + ´ diz:´ + #13 + Mensagem + 13;
For i := 1 to Length(s) do
SendMessage(wnd, WM_CHAR, Word(s[i]), 0);

PostMessage(wnd, WM_KEYDOWN , VK_RETURN, 0);
end;
Finally
AThread.Connection.Disconnect;
End;
End;

O problema é que ele não consegue ´achar´ a bendita classe do memo que estou usando... já testei com edit normal, memo normal e tb não funciona... tem algo errado com esse código ???

Plz help me !

tkz

[color=red:51cd8333fe]Título editado por Massuda Original: ´Sockets me dando uma coça !!!!´[/color:51cd8333fe]



Paulocesar1301

Respostas

22/02/2006

Crash

Creio que vc tenha q procurar a classe e nao o nome do objeto.

Entao seria ao Inves de Memo1, seria TMemo.


t+


Responder Citar

22/02/2006

Paulocesar1301

Tentei a classe TNxMemo mas tb não tinha funcionado !

Alguém tem alguma idéia ?


Responder Citar

22/02/2006

Crash

eu teria que ver o contexto... mais porque vc envia comandos de teclado para o memo e nao envia o texto para o memo? esse memo eh em outra aplicação? E o memo que vc ta tentando procurar eh um TMemo ou TNxMemo? Essa classe TNxMemo foi vc quem fez? explica direito q eu posso te ajudar.


t+


Responder Citar

22/02/2006

Paulocesar1301

TNxMemo é a classe do ´TMemo´ do NextGrid... uma coleção de componentes que estou utilizando... mas básicamente é igual... (obs: tentei até com um memo comum e não consegui)

O NxMemo está em outra aplicação com o nome de MemoMensagens (bem básico!), mas o mesmo não recebe nem texto nem comando de teclado, na verdade... ele nem é encontrado, pois o handle vem zerado !!


Responder Citar

22/02/2006

Rafael Gomes

olá amigo,
provavelmente o erro esta nessa linha

[b:614aa54048]wnd := FindWindowEx(wnd, 0, [color=red:614aa54048]PChar(´NxMemo´)[/color:614aa54048], nil); [/b:614aa54048]


procure no google pela palavra [b:614aa54048]WinDowse[/b:614aa54048].
este programa tem varios recursos interessantes e pode te ajudar a resolver seu problema.

[]ss


Responder Citar

22/02/2006

Nildo

Porque você não pode deixar o form do Memo dentro da aplicação que recebe os dados do chat?

Assim, você não vai conseguir localizar ele pois ele é um Child. Você tem que localizar Child por Child, por exemplo:

hJanela := FindWindow( ´TSeuFormulario´, nil );
hMemo := FindWindowEx( hJanela, 0, ´TMemo´, nil );

dai sim você usa o handle localizado pelo hMemo.
Eu não lembro exatamente de cór os parâmetros dessas APIs mas to com o Delphi fechado, dai num pude testar..


Responder Citar

23/02/2006

Paulocesar1301

o grande detalhe é que são sistemas diferentes... e precisam continuar assim por problemas outros...

vou procurar esse tal de ´WinDowse´ pra ver no que dá... vlw!

Se alguém ainda tiver alguma idéia... ou eu mesmo se achar algo nesse ´WinDowse´ do Rafa... eu posto para loucos como eu não terem o mesmo problema !!!


Responder Citar

24/02/2006

Paulocesar1301

É povo... o WinDowse indicou a classe que eu já colocava (TNxMemo)... simplesmente não tenho mais idéias !!


Responder Citar

24/02/2006

Nildo

É povo... o WinDowse indicou a classe que eu já colocava (TNxMemo)... simplesmente não tenho mais idéias !!


Porque não tenta o que eu disse?


Responder Citar

24/02/2006

Rafael Gomes

nildo, nao entendi sua sugestão ... ele nao esta fazendo exatamente o que voce sugeriu?? :roll:

[]ss


Responder Citar

24/02/2006

Nildo

[quote:7abeff7e7c=´Rafael Gomes´]nildo, nao entendi sua sugestão ... ele nao esta fazendo exatamente o que voce sugeriu?? :roll:

[]ss[/quote:7abeff7e7c]

Não está, bom, pelo menos ele nao falou se testou ou não o FindWindowEx.
É que o FindWindow funciona assim: ele localiza uma janela que [b:7abeff7e7c]não tenha parent[/b:7abeff7e7c]. Então, se você tem um Memo dentro de um Form, primeiro você deve achar o handle do Form assim:

hForm := FindWindow( ´TSeuForm´, ´Seu formulário´ );
hMemo := FindWindowEx( hForm, 0, ´TNxMemo´, nil );


O FindWindowEx, como eu exemplifiquei, vai localizar uma janela Child. Seu Memo nada mais é do que um Child da janela Pai: O Formulário.

Agora dá para você ter uma idéia do que deve ser feito. Um programinha que pode te ajudar é o WinSpy, vc faz um Drag&Drop de uma imagem dentro dele para a janela que você quer e ele te informa a classe do child e do parent dele. (download: http://www.codeproject.com/threads/winspy.asp e baixe o Demo, tem apenas 20kb)

Qualquer coisa estamos ai


Responder Citar

24/02/2006

Rafael Gomes

[b:932f7c9256]codigo do paulo cesar[/b:932f7c9256]

wnd := FindWindow(nil, ´QCP Mensageiro 1.0´); 
if wnd <> 0 then 
begin 
wnd := FindWindowEx(wnd, 0, PChar(´NxMemo´), nil); 



hForm := FindWindow( ´TSeuForm´, ´Seu formulário´ ); 
hMemo := FindWindowEx( hForm, 0, ´TNxMemo´, nil );


o que eu vi de diferente foi o nil na chamada de [b:932f7c9256]FindWindow[/b:932f7c9256] e o parametro de [b:932f7c9256]FindWindowEx[/b:932f7c9256] que realmente esta incorreto ...
o certo seria como o proprio nildo disse ´TNxMemo´ e nao ´NxMemo´

... agora aproveitando o topico, há algum tempo eu postei algo similar ao conteudo deste topico, mas ninguem se prontificou a ajudar :cry:

tenho uma aplicação x desenvolvida em delphi que deve enviar textos para uma aplicação y que é um emulador de terminais ...

tentei de todas as formas mas sem sucesso ...
abaixo esta a estrutura do emulador ...

[img:932f7c9256]http://www.ellas.com.br/fcunha/est.jpg[/img:932f7c9256]

a janela para qual necessito enviar o texto é [b:932f7c9256]EmuMdiChild[/b:932f7c9256]

sugestoes sao bem vinda!! :lol:


Responder Citar

24/02/2006

Nildo

Rafael Gomes, sobre sua dúvida, se você conseguiu localizar o Handle dela (handle<>0), e o SetWindowText não teve efeito, então ele deve ser um componente criado sem suporte ao wm_text do Windows.


Responder Citar

24/02/2006

Rafael Gomes

nesse caso voce nao teria alguma sugestao??


Responder Citar

24/02/2006

Nildo

[quote:ea76f24e5e=´Rafael Gomes´]nesse caso voce nao teria alguma sugestao??[/quote:ea76f24e5e]

Não.. Eu não consigo manipular componentes que não usam mensagens do Windows


Responder Citar