api do windows

Delphi

17/01/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!!!!!!!!!!!!!!!


Rafael Gomes

Rafael Gomes

Curtidas 0

Respostas

Edilcimar

Edilcimar

17/01/2006

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


GOSTEI 0
Adriano Santos

Adriano Santos

17/01/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

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


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



GOSTEI 0
Rafael Gomes

Rafael Gomes

17/01/2006

[quote:becf2ac93e=´Adriano Santos´]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

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


Para colar
procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit2.PasteFromClipboard;
end;
[/quote:becf2ac93e]

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

se puder ajudar eu agradeço!!

abraços!!!


GOSTEI 0
Adriano Santos

Adriano Santos

17/01/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


GOSTEI 0
Rafael Gomes

Rafael Gomes

17/01/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


GOSTEI 0
Adriano Santos

Adriano Santos

17/01/2006

[quote:21dc3752b1=´Rafael Gomes´]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[/quote:21dc3752b1]

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

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.


GOSTEI 0
Rafael Gomes

Rafael Gomes

17/01/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


GOSTEI 0
Rafael Gomes

Rafael Gomes

17/01/2006

só para complementar ...

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


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


wnd := FindWindowEx(wnd,0,´Edit´,nil);

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

[]ss


GOSTEI 0
Adriano Santos

Adriano Santos

17/01/2006

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


Pela classe da janela.

wnd := FindWindowEx(wnd,0,´Edit´,nil);

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


GOSTEI 0
Rafael Gomes

Rafael Gomes

17/01/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


GOSTEI 0
Adriano Santos

Adriano Santos

17/01/2006

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.


GOSTEI 0
Rafael Gomes

Rafael Gomes

17/01/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!!!!


GOSTEI 0
Sanses

Sanses

17/01/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


GOSTEI 0
Michael

Michael

17/01/2006

Olá!

[url=http://subsimple.com/delphi.asp]Neste link[/url] vc vai encontrar o componente [b:9e2e4f4e2d]InterAppComm[/b:9e2e4f4e2d], que permite enviar mensagens de um aplicativo para o outro. Basta colocar um [i:9e2e4f4e2d]Sender [/i:9e2e4f4e2d]em uma aplicação, e um [i:9e2e4f4e2d]Receiver [/i:9e2e4f4e2d]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 [b:9e2e4f4e2d]SendMessage[/b:9e2e4f4e2d], [b:9e2e4f4e2d]FindWindow[/b:9e2e4f4e2d], ele já implementa.

[]´s


GOSTEI 0
Adriano Santos

Adriano Santos

17/01/2006

Olá! [url=http://subsimple.com/delphi.asp]Neste link[/url] vc vai encontrar o componente [b:e22cd39f9a]InterAppComm[/b:e22cd39f9a], que permite enviar mensagens de um aplicativo para o outro. Basta colocar um [i:e22cd39f9a]Sender [/i:e22cd39f9a]em uma aplicação, e um [i:e22cd39f9a]Receiver [/i:e22cd39f9a]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 [b:e22cd39f9a]SendMessage[/b:e22cd39f9a], [b:e22cd39f9a]FindWindow[/b:e22cd39f9a], ele já implementa. []´s


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


GOSTEI 0
Rafael Gomes

Rafael Gomes

17/01/2006

Olá! [url=http://subsimple.com/delphi.asp]Neste link[/url] vc vai encontrar o componente [b:868c2b629d]InterAppComm[/b:868c2b629d], que permite enviar mensagens de um aplicativo para o outro. Basta colocar um [i:868c2b629d]Sender [/i:868c2b629d]em uma aplicação, e um [i:868c2b629d]Receiver [/i:868c2b629d]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 [b:868c2b629d]SendMessage[/b:868c2b629d], [b:868c2b629d]FindWindow[/b:868c2b629d], 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!!


GOSTEI 0
Rafael Gomes

Rafael Gomes

17/01/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


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


GOSTEI 0
Rafael Gomes

Rafael Gomes

17/01/2006

só para complementar pessoal ...

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

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;



[b:10a4e8440f]informacoes da janela principal do programa ...[/b:10a4e8440f]

*** 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       



[b:10a4e8440f]informacoes da janela filha ...[/b:10a4e8440f]


*** 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 [b:10a4e8440f]MdiFrame[/b:10a4e8440f]
dentro dessa janela existe um ´componente´ de classe [b:10a4e8440f]MdiClient[/b:10a4e8440f]

ao que me parece, quando se abre a janela filha de classe [b:10a4e8440f]MdiEmuChild [/b:10a4e8440f] ela fica dentro de MdiClient que por sua vez esta dentro de MdiFrame ...

:cry:

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


GOSTEI 0
Rafael Gomes

Rafael Gomes

17/01/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 ...

[b:f9b7f8a139]screen da hierarquia das janelas!!![/b:f9b7f8a139]


[b:f9b7f8a139]screen das telas do programa [/b:f9b7f8a139]




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


GOSTEI 0
Rafael Gomes

Rafael Gomes

17/01/2006

sobe!


GOSTEI 0
Rafael Gomes

Rafael Gomes

17/01/2006

up!


GOSTEI 0
Rafael Gomes

Rafael Gomes

17/01/2006

sobe ! :cry:


GOSTEI 0
POSTAR