FindWindow e Memo
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
[quote:51cd8333fe=´Moderação´][color=red:51cd8333fe]Título editado por Massuda
Original: ´Sockets me dando uma coça !!!!´[/color:51cd8333fe][/quote:51cd8333fe]
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
[quote:51cd8333fe=´Moderação´][color=red:51cd8333fe]Título editado por Massuda
Original: ´Sockets me dando uma coça !!!!´[/color:51cd8333fe][/quote:51cd8333fe]
Paulocesar1301
Curtidas 0
Respostas
Crash
22/02/2006
Creio que vc tenha q procurar a classe e nao o nome do objeto.
Entao seria ao Inves de Memo1, seria TMemo.
t+
Entao seria ao Inves de Memo1, seria TMemo.
t+
GOSTEI 0
Paulocesar1301
22/02/2006
Tentei a classe TNxMemo mas tb não tinha funcionado !
Alguém tem alguma idéia ?
Alguém tem alguma idéia ?
GOSTEI 0
Crash
22/02/2006
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+
t+
GOSTEI 0
Paulocesar1301
22/02/2006
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 !!
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 !!
GOSTEI 0
Rafael Gomes
22/02/2006
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
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
GOSTEI 0
Nildo
22/02/2006
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..
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..
GOSTEI 0
Paulocesar1301
22/02/2006
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 !!!
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 !!!
GOSTEI 0
Paulocesar1301
22/02/2006
É povo... o WinDowse indicou a classe que eu já colocava (TNxMemo)... simplesmente não tenho mais idéias !!
GOSTEI 0
Nildo
22/02/2006
É 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?
GOSTEI 0
Rafael Gomes
22/02/2006
nildo, nao entendi sua sugestão ... ele nao esta fazendo exatamente o que voce sugeriu?? :roll:
[]ss
[]ss
GOSTEI 0
Nildo
22/02/2006
[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:
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
[]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
GOSTEI 0
Rafael Gomes
22/02/2006
[b:932f7c9256]codigo do paulo cesar[/b:932f7c9256]
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 ...
a janela para qual necessito enviar o texto é [b:932f7c9256]EmuMdiChild[/b:932f7c9256]
sugestoes sao bem vinda!! :lol:
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 ...
a janela para qual necessito enviar o texto é [b:932f7c9256]EmuMdiChild[/b:932f7c9256]
sugestoes sao bem vinda!! :lol:
GOSTEI 0
Nildo
22/02/2006
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.
GOSTEI 0
Rafael Gomes
22/02/2006
nesse caso voce nao teria alguma sugestao??
GOSTEI 0
Nildo
22/02/2006
[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
Não.. Eu não consigo manipular componentes que não usam mensagens do Windows
GOSTEI 0
Paulocesar1301
22/02/2006
pessoal,
agradeço muito a boa vontade, mas os testes de classe foram feitos sim... coloquei a classe correta ´TNxMemo´, mas não funciona de maneira alguma... o FindWindowEx não acha o bendito
agradeço muito a boa vontade, mas os testes de classe foram feitos sim... coloquei a classe correta ´TNxMemo´, mas não funciona de maneira alguma... o FindWindowEx não acha o bendito
GOSTEI 0
Nildo
22/02/2006
pessoal,
agradeço muito a boa vontade, mas os testes de classe foram feitos sim... coloquei a classe correta ´TNxMemo´, mas não funciona de maneira alguma... o FindWindowEx não acha o bendito
Faz assim, com aquele programa que eu citei, o WinSpy, jogue o ´alvo´ em cima do seu Memo, e veja qual o parent dele.. Dai você usa o FindWindowEx pra achar o parent e depois pra achar ele. E veja se a classe é TNxMemo mesmo, pelo WinSpy
GOSTEI 0