result.Height := Screen.Height; dc := GetDc(0); cv := TCanvas.Create; cv.Handle := DC; result.Canvas.CopyRect(Rect( 0, 0,Screen.Width,Screen.Height), cv,Rect(0,0,Screen.Width, Screen.Height)); cv.Free; ReleaseDC (0, DC); end; { Exemplos de utilização } { Captura a tela e salva para o disco } CapturaTela.SaveToFile('tela.bmp'); { Exibe a tela em um componente Image } Image1.Picture.Assign(CapturaTela); 2. Capturando a imagem da tela (screen-shot) de uma máquina da rede GP - Esse recurso é bastante utilizado por aplicações estilo “trojan”, permitindo que o intruso possa observar o que a pessoa na outra máquina está fazendo. Deixando o hackerismo de lado, um exemplo prático da técnica é monitorar remotamente a ação de usuários na sua aplicação. Por exemplo, é muito comum utilizar esse recurso em programas que controlam lan-houses, ou aplicações estilo PcAnywhere ou Terminal Services. A idéia é simples, construímos duas aplicações que trocam imagens através de sockets, usando streams. O primeiro passo é construir a aplicação servidora, que deve ficar em execução em todas as máquinas a serem monitoradas. Em uma nova aplicação VCL, coloque no formulário um IdTCPServer da Indy. Configure seu DefaultPort para 8090 e Active para True. No seu evento OnExecute digite o código da Listagem 2. Observe que fazemos uso da rotina CapturaTela, mostrada no exemplo anterior. Na aplicação cliente, coloque um IdTCPClient da Indy e defina a propriedade Port como 8090. Coloque um Image, um Edit e um Button. No evento OnClick do Button digite o código da Listagem 3. Você pode colocar um Timer e chamar o mesmo código, se quiser que a imagem seja atualizada constantemente. Ao clicar no botão, a imagem mostrará a tela do computador indicado no Edit (digite o endereço IP ou o nome da máquina). Listagem 2. Servidor captura tela da máquina e envia pela rede procedure TForm1.IdTCPServerExecute( AThread: TIdPeerThread); var Stm : TStream; Tela: TBitmap; cmd: string; fn: string; r: integer; begin randomize; r := Random(MaxInt); fn := Format('tela%d.bmp',[r]); cmd := AThread.Connection.ReadLn; if pos('TELA',cmd) > 0 then begin Tela := CapturaTela; Tela.SaveToFile(fn); Tela.Free; Stm := TFileStream.Create(fn, fmOpenRead + fmShareDenyNone); AThread.Connection.OpenWriteBuffer; AThread.Connection.WriteStream(Stm); AThread.Connection.CloseWriteBuffer; FreeAndNil(Stm); end; AThread.Connection.Disconnect; end; Listagem 3. Aplicação monitora terminais remotamente procedure TForm1.Button1Click(Sender: TObject); var Stm: TStream; begin IdTCPClient1.Host := Edit1.Text; IdTCPClient1.Connect; WriteLn('TELA'); Stm := TFileStream.Create('tela.bmp',fmCreate); try while IdTCPClient1.Connected do IdTCPClient1.ReadStream(Stm,-1,true); except end; FreeAndNil(Stm); Image1.Picture.LoadFromFile('tela.bmp'); end; 3. Obtendo dados da Web a partir de uma aplicação Delphi GP - Hoje em dia, é muito comum sua aplicação precisar de informações ou utilizar serviços disponibilizados por outra aplicação. Não é para menos que surgiram os Web Services. Com essa tecnologia, podemos incluir em nossas aplicações serviços oferecidos por outras empresas. Por exemplo, você pode ter um sistema de controle de estoque que, dada a falta de um determinado produto, conecta-se automaticamente aos fornecedores através de Web Services e pesquisa pela disponibilidade do produto, pelo melhor preço e já faz a encomenda automaticamente. Porém, a realidade nos mostra que, muitos serviços na Web estão somente disponíveis para acesso via browser. Ou seja, para usar o serviço, é preciso abrir um browser, conectar no site da empresa e usar seu serviço (exemplos: envio de mensagem para celular, consulta à lista telefônica, consulta ao CPF etc.). Uma saída é fazer a requisição “no braço”. É justamente o que mostrarei aqui. A idéia é simples: montamos uma requisição HTTP (como se nossa aplicação fosse um browser), enviamos a solicitação ao site desejado, obtemos a página de retorno e fazemos o parse do HTML a procura da informação desejada. Vamos a um exemplo simples: em uma nova aplicação, coloque um IdHTTP, um Label e um Button. No evento OnClick do Button digite: var s: string; begin s := IdHTTP1.Get('http://br.invertia.com'); Label1.Caption := copy(s,pos('Compra',s) + 115,7); end; O código anterior mostra 4. Preenchendo formulários de Web Sites programaticamente GP - No exemplo anterior, recuperamos uma página da Web apenas indicando a URL. Muitas vezes, no entanto, o conteúdo de retorno depende da passagem de parâmetros ou do preenchimento de campos de um formulário. Vou dar um exemplo: o site de pesquisa Google possui uma opção para tradução (ferramentas de idiomas). Antes de obter a página com a tradução de uma palavra/texto, precisamos passar o valor do campo desejado na requisição HTTP. É exatamente isso que fiz no código da Listagem 4. Nele, o texto em inglês digitado em um Memo é traduzido para o português. Observe que o parse é feito de forma totalmente manual. Imagine o leque de opções que você terá agora, sabendo como utilizar esse recurso. Poderá integrar sua aplicação a uma gama enorme de serviços disponibilizados na Web, mesmo que não sejam oferecidos via Web Services. Listagem 4. Preenchendo formulários Web programaticamente procedure TForm1.Button2Click(Sender: TObject); var s: string; Fields: TStrings; p: integer; begin Fields := TStringList.Create; Fields.Add('text=' + memo1.lines.Text); Fields.Add('langpair=en|pt'); s := IdHTTP1.Post( 'http://translate.google.com/translate_t',Fields); p := pos('PHYSICAL',s) + 9; Memo1.lines.Clear; while s[p] <> '<' do begin Memo1.lines.Text := Memo1.lines.Text + (s[p]); p := p + 1; end; Fields.Free; end; Nota: O preenchimento automático de formulários Web e a postagem de requisições HTTP via programação é algo que pode prejudicar os serviços disponibilizados por empresas. É muito simples, por exemplo, criar um programa que fique cadastrando usuários em um site (enchendo o BD de “lixo”), ou fazendo propaganda em chats, ou fazendo spam para celular, usando as técnicas aqui demonstradas. Dessa forma, web sites utilizam várias técnicas para impedir a ação de programas automáticos: validação via cookies, sessão, IP ou ainda pedindo para que o usuário digite um texto exibido em uma imagem, que em teoria não pode ser lido através de programação. 5. Descobrindo quando uma página da Web foi atualizada GP - Nos exemplos anteriores, vimos como usar o componente ...
Artigo Clube Delphi 60 - 60 dicas e soluções em Delphi
Artigo da Revista Clube Delphi Edição 60.
Confira outros conteúdos:
Perguntas frequentes
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.