Array
(
)

api do windows

Rafael Gomes
   - 17 jan 2006

amigos, alguem saberia me dizer que funcoes da api do windows, ou do proprio delphi, serviriam para o proposito de jogar uma string de um edit, ou no banco de dados, para a memoria do computador ...
e depois uma funcao que conseguisse ler essa string da memoria e colar em um edit de outra aplicacao???

seria possivel fazer isso? como??

se alguem tiver algum material sobre a api do windows por favor me de um toque onde posso conseguir

abraços!!!!!!!!!!!!!!!


Edilcimar
   - 17 jan 2006

já tentou jogar para a área de transferência?


Adriano Santos
   - 17 jan 2006

Você pode usar o ClipBoard do próprio Windows através de chamadas as funções no Delphi.

Declare a unit ClipBrd;

Para copiar para a memória

#Código


procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.CopyToClipboard;
end;


Para colar
#Código

procedure TForm1.Button2Click(Sender: TObject);
begin
Edit2.PasteFromClipboard;
end;



Rafael Gomes
   - 17 jan 2006


Citação:
Você pode usar o ClipBoard do próprio Windows através de chamadas as funções no Delphi.

Declare a unit ClipBrd;

Para copiar para a memória

#Código


procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.CopyToClipboard;
end;


Para colar
#Código

procedure TForm1.Button2Click(Sender: TObject);
begin
Edit2.PasteFromClipboard;
end;


o problema amigo é que quero copiar de uma aplicacao para outra, nao na mesma aplicacao ...

se puder ajudar eu agradeço!!

abraços!!!


Adriano Santos
   - 17 jan 2006

De uma aplicação pra outra?
Ai só usando banco de dados cara. Se você usar o msm banco de dados nos dois softwares vc nem vai precisar copiar nada para memoria.

Agora, explique mais detalhadamente o que quer....acho que não é tão difícil assim


Rafael Gomes
   - 17 jan 2006

sei que parece estanho essa necessidade .. mas preciso me comunicar com uma aplicacao que nao possui banco de dados ...

estou desenvolvendo uma aplicacao relacionada com a parte de exportacao ...

depois de efetuados todos os cadastros seria desejavel que eu conseguisse colar alguns dados em edits de uma outra aplicacao ...
o problema é como alternar o controle das aplicacoes, e como vou mandar os dados para a segunda aplicacao ...

é mais ou menos isso ... se precisar, posso dar mais detalhes ...

[]sss


Adriano Santos
   - 17 jan 2006


Citação:
sei que parece estanho essa necessidade .. mas preciso me comunicar com uma aplicacao que nao possui banco de dados ...

estou desenvolvendo uma aplicacao relacionada com a parte de exportacao ...

depois de efetuados todos os cadastros seria desejavel que eu conseguisse colar alguns dados em edits de uma outra aplicacao ...
o problema é como alternar o controle das aplicacoes, e como vou mandar os dados para a segunda aplicacao ...

é mais ou menos isso ... se precisar, posso dar mais detalhes ...

[]sss


Cara, vou pesquisar.
Eu tenho um exemplo aqui para escrever dentro do bloco de notas, se quiser o esquema é o seguinte:

#Código

procedure TForm1.Button1Click(Sender: TObject);
var
wnd : HWND;
i : Integer;
s : string;
begin
wnd := FindWindow(´notepad´,nil);
if wnd <> 0 then
begin
wnd := FindWindowEx(wnd,0,´Edit´,nil);

s := ´Seu Texto para ser escrito no bloco de notas :))´;
For i := 1 to Length(s) do
SendMessage(wnd, WM_CHAR, Word(s[i]), 0);
PostMessage(wnd, WM_KEYDOWN , VK_RETURN, 0); {Simular o enter}
PostMessage(wnd, WM_KEYDOWN , VK_SPACE, 0); {Simular o Espaço}
end;
end;



Talvez o melhor seja usar sockets.


Rafael Gomes
   - 17 jan 2006

sockets?? poderia me falar mais sobre isso???

interessante o codigo abaixo, depois vou testar ...
se voce conseguir alguma coisa em sua pesquisa ou souber de algum material para baixar, ou site ... poste aqui ... ficarei muito grato!!

grande abraço!!!! :D


Rafael Gomes
   - 17 jan 2006

só para complementar ...

#Código

wnd := FindWindow(´notepad´,nil);


esta funcao acha a janela pelo nome?? pelo titulo?? pelo nome do processo???


#Código
wnd := FindWindowEx(wnd,0,´Edit´,nil);

nao entendi o terceiro parametro, o que esse parametro tem a ver com a janela do notepad??

[]ss


Adriano Santos
   - 17 jan 2006

#Código

wnd := FindWindow(´notepad´,nil);


Pela classe da janela.

#Código
wnd := FindWindowEx(wnd,0,´Edit´,nil);

Aqui ele procura o controle dentro da janela notepad, no caso pela classe Edit


Rafael Gomes
   - 17 jan 2006

vixe amigo, entao complicou mais ainda ...
o programa que preciso colar as informacoes é um emulador de terminais chamado iww ...

ele emula a tela de um terminal IBM 3278 e 3279 modelos 2, 3, 4 e 5

entao nao sei como localizar a janela ... o programa utiliza janelas mdi, será que nao existe uma outra forma de localizar esta janela ... como por exemplo pelo nome, ou pelo processo???

eu tentei aqui pelo nome da janela mas sem sucesso ...
conto com a colaboracao do pessoal do forum

[]s


Adriano Santos
   - 17 jan 2006

#Código

wnd := FindWindow(nil,´Calculadora´);


Tente inverter usando o segundo parâmetro que é o caption da janela, agora se são janelas MDI acho que não funciona.


Rafael Gomes
   - 17 jan 2006

vou testar ... e tenho que ir passo a passo ...

entao vamos primeiro tentar achar a janela ... depois as janelas filhas ...


a respeito de material de consulta, sites e apostilas correlacionadas com o assunto, vc nao teria nada ??

abraços!!!!


Sanses
   - 17 jan 2006

Olá

Não sei se funciona, pois nunca testei em aplicações MDI, mais vale a pena tentar. Baixe este aplicativo free [url=http://www.greatis.com/delphicb/windowse/download.html]WinDowse[/url] e use a aba Class para pegar o nome da classe da aplicação desejada. A Aba Parents para pegar os componentes, ex:

Abra o Internet Explorer e seleciona a Aba Class, posicione o cursor do mouse na barra de título e voce terá para o nome da aplicação IEFrame.

Agora selecione a aba parents e posicione o mouse em cima do combobox correspondente a barra de endereço, voce terá ComboboxEx32 para este componente.

Como disse não sei se funciona em MDI, teste ai e poste o resultado, ok?

[]´s
Sanses


Michael
   - 17 jan 2006

Olá!

[url=http://subsimple.com/delphi.asp]Neste link[/url] vc vai encontrar o componente InterAppComm, que permite enviar mensagens de um aplicativo para o outro. Basta colocar um Sender em uma aplicação, e um Receiver na outra. Vem com um exemplo prático muito bom.

E vc não precisa se preocupar com janelas, API´s, etc. ;-) Na verdade, tudo o que os colegas estão falando aqui, sobre SendMessage, FindWindow, ele já implementa.

[]´s


Adriano Santos
   - 17 jan 2006


Citação:
Olá!

[url=http://subsimple.com/delphi.asp]Neste link[/url] vc vai encontrar o componente InterAppComm, que permite enviar mensagens de um aplicativo para o outro. Basta colocar um Sender em uma aplicação, e um Receiver na outra. Vem com um exemplo prático muito bom.

E vc não precisa se preocupar com janelas, API´s, etc. ;-) Na verdade, tudo o que os colegas estão falando aqui, sobre SendMessage, FindWindow, ele já implementa.

[]´s


Boa Michael, até eu vou dar uma olhada. :wink:


Rafael Gomes
   - 17 jan 2006


Citação:
Olá!

[url=http://subsimple.com/delphi.asp]Neste link[/url] vc vai encontrar o componente InterAppComm, que permite enviar mensagens de um aplicativo para o outro. Basta colocar um Sender em uma aplicação, e um Receiver na outra. Vem com um exemplo prático muito bom.

E vc não precisa se preocupar com janelas, API´s, etc. ;-) Na verdade, tudo o que os colegas estão falando aqui, sobre SendMessage, FindWindow, ele já implementa.

[]´s


ola michael, se nao estou enganado, para que funcione perfeitamente preciso que a aplicacao que vai receber os textos tenh o componente ´Receiver´ certo???
mas se a aplicacao nao tiver, caimos no mesmo problema que os colegas estavam tentando resolver ... mas mesmo assim, muito boa a dica
obrigado ...

ainda continuo tentando achar uma forma de encontrar a aplicacao, e dentro da aplicacao achar uma janela filha ... pelos nomes ....

abraços

obrigado a todos que estao contribuindo!!


Rafael Gomes
   - 18 jan 2006


Citação:
Olá

Não sei se funciona, pois nunca testei em aplicações MDI, mais vale a pena tentar. Baixe este aplicativo free [url=http://www.greatis.com/delphicb/windowse/download.html]WinDowse[/url] e use a aba Class para pegar o nome da classe da aplicação desejada. A Aba Parents para pegar os componentes, ex:

Abra o Internet Explorer e seleciona a Aba Class, posicione o cursor do mouse na barra de título e voce terá para o nome da aplicação IEFrame.

Agora selecione a aba parents e posicione o mouse em cima do combobox correspondente a barra de endereço, voce terá ComboboxEx32 para este componente.

Como disse não sei se funciona em MDI, teste ai e poste o resultado, ok?

[]´s
Sanses


bom amigo, testei ... o programa funciona perfeitamente ... realmente muito bom ... agora vou tentar continuar a implementacao com as informacoes que o programa me forneceu, qualquer coisa corro aqui pro forum pra ver se voces podem me ajudar ...

mais uma vez, obrigado aos que colaboraram ...
[]ss


Rafael Gomes
   - 18 jan 2006

só para complementar pessoal ...

estou utilizando o seguinte codigo para enviar o texto ... mas o mesmo nao esta funcionando ...

#Código

procedure TForm1.Button1Click(Sender: TObject);
var
wnd : HWND;
c : HWND;
i : Integer;
s : string;
begin
wnd := FindWindow(´MdiFrame´,nil);
if wnd <> 0 then
begin
c:= GetWindow(wnd,GW_CHILD);
wnd := FindWindowEx(wnd,c,´MdiEmuchild´,nil);

s := ´texto´;
For i := 1 to Length(s) do
SendMessage(wnd, WM_CHAR, Word(s[i]), 0);
PostMessage(wnd, WM_KEYDOWN , VK_RETURN, 0); {Simular o enter}
PostMessage(wnd, WM_KEYDOWN , VK_SPACE, 0); {Simular o espaço}
end;
end;



informacoes da janela principal do programa ...

#Código

*** Window Information *********************************************************

Text Irma Mainframe Display
Process ID 00000998
App instance 171F1576
Handle 00010410
Parent handle 00000000
Control ID 0031032D
Function 00000000
Menu handle 0031032D
Coords in parent left:-4, top:-4, right:1028, bottom:744
Coords in screen left:-4, top:-4, right:1028, bottom:744
Window size width:1032, height:748
Client area size width:1024, height:702
Style 17CF0000
Extended style 00000100
ws_overlapped | ws_visible | ws_clipsiblings | ws_clipchildren | ws_maximize |
ws_border | ws_dlgframe | ws_sysmenu | ws_thickframe | ws_minimizebox |
ws_maximizebox | ws_ex_windowedge | ws_ex_left | ws_ex_ltrreading | ws_ex_rightscrollbar


*** Class Information **********************************************************

Name MdiFrame
Function D6810820
Icon 000303A3
Small icon 000803E3
Cursor 00010011
Bkg brush 0000000D
Module handle 171F1576
Style 00000003
cs_vredraw | cs_hredraw


*** Parents ********************************************************************

# Handle Class name Text



*** Children *******************************************************************

Handle Class name Text

001 00010412 MDIClient
002 00010416 ATC_DockWindow
003 0001041C DCAStatusBar


*** Digger *********************************************************************

# Handle Class name Text

001 00010410 MdiFrame Irma Mainframe Display
002 000100BE SysListView32 FolderView
003 000100BC SHELLDLL_DefView
004 000100B6 Progman Program Manager


*** Executable Information *****************************************************

File path C:\WINDOWS\system32\
File name ntvdm.exe
Original file name NTVDM.EXE
File description NTVDM.EXE
File version 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
Product name Sistema operacional Microsoft® Windows®
Internal name NTVDM.EXE
Legal copyright © Microsoft Corporation. Todos os direitos reservados.
Legal trademarks
Product version 5.1.2600.2180
Company name Microsoft Corporation
Comments



informacoes da janela filha ...


#Código
*** Window Information *********************************************************

Text Untitled:1* [A]
Process ID 00000998
App instance 171F1576
Handle 001603A6
Parent handle 00010412
Control ID 00009000
Function 00000000
Menu handle 00000000
Coords in parent left:-4, top:-23, right:1028, bottom:653
Coords in screen left:-4, top:45, right:1028, bottom:721
Window size width:1032, height:676
Client area size width:1024, height:649
Style 57C70000
Extended style 00000140
ws_overlapped | ws_child | ws_visible | ws_clipsiblings | ws_clipchildren |
ws_maximize | ws_border | ws_dlgframe | ws_thickframe | ws_group | ws_tabstop |
ws_ex_mdichild | ws_ex_windowedge | ws_ex_left | ws_ex_ltrreading |
ws_ex_rightscrollbar


*** Class Information **********************************************************

Name MdiEmuChild
Function D6590000
Icon 000303A3
Small icon 000F03CD
Cursor 00010011
Bkg brush 01900011
Module handle 171F1576
Style 0000002B
cs_vredraw | cs_hredraw | cs_dblclks | cs_owndc


*** Parents ********************************************************************

# Handle Class name Text

001 00010412 MDIClient
002 00010410 MdiFrame Irma Mainframe Display - [ Un...


*** Children *******************************************************************

Handle Class name Text

001 00140368 EmuStatus


*** Digger *********************************************************************

# Handle Class name Text

001 001603A6 MdiEmuChild Untitled:1* [A]
002 00010412 MDIClient
003 00010410 MdiFrame Irma Mainframe Display - [ Un...
004 000202BA TEditControl
005 000202BC TPanel
006 000202B8 TPanel
007 00050274 TPanel
008 000302AE TPanel
009 00040292 TPanel
010 00030288 TEditWindow Unit1.pas
011 000102C8 TForm1 Form1
012 000100BE SysListView32 FolderView
013 000100BC SHELLDLL_DefView
014 000100B6 Progman Program Manager


*** Executable Information *****************************************************

File path C:\WINDOWS\system32\
File name ntvdm.exe
Original file name NTVDM.EXE
File description NTVDM.EXE
File version 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
Product name Sistema operacional Microsoft® Windows®
Internal name NTVDM.EXE
Legal copyright © Microsoft Corporation. Todos os direitos reservados.
Legal trademarks
Product version 5.1.2600.2180
Company name Microsoft Corporation
Comments


para quem teve paciencia de ver o topico até aqui ...
a estrutura do programa para o qual preciso enviar o texto é a seguinte ...

existe a aplicacao principal ... que é de classe MdiFrame
dentro dessa janela existe um ´componente´ de classe MdiClient

ao que me parece, quando se abre a janela filha de classe MdiEmuChild ela fica dentro de MdiClient que por sua vez esta dentro de MdiFrame ...



se alguem tiver alguma sugestao ... eu agradeceria MUITO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Rafael Gomes
   - 18 jan 2006

peço licença aos moderadores ... mas todas as mensagens que estou postando julgo relevantes para resolucao do problema ...
nao estou apenas upando meu topico ... :oops:

segue abaixo a hierarquia das janelas do programa para o qual preciso enviar os textos ...

screen da hierarquia das janelas!!!

[img:f9b7f8a139]http://www.ellas.com.br/fcunha/imagem.jpg[/img:f9b7f8a139]

screen das telas do programa

[img:f9b7f8a139]http://www.ellas.com.br/fcunha/imagem2.jpg[/img:f9b7f8a139]

[img:f9b7f8a139]http://www.ellas.com.br/fcunha/imagem3.jpg[/img:f9b7f8a139]


é isso ... aguardo a contribuicao dos amigos ...
[]s


Rafael Gomes
   - 18 jan 2006

sobe!