• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

softklin

[VB6] ScreenShots [Resolvido]

19 mensagens neste tópico

Olá pessoal!

Estou a fazer um programa e notei que essas grandes apps da Adobe e tal usam um splashscreen todo bonitinho, cheio de transparências.

Bom, o que eu quero não são transparências, mas dar a aparência de tal. :biggrin:

Por isso, gostava de saber se existe alguma função especial para tirar uma screen ao desktop e coloca-la numa variável.

Obrigado.

MODERADORES: Podem encerrar o tópico. Está resolvido!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tás a dizer que queres aplicar um nível de opacidade inferior a uma imagem?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se bem percebi queres fazer um screenshot do desktop certo?

Agora perferes que te espliquem como se faz e depois tu tentas fazer(uma rapidas pesquisa no google e encontras montes de coisas) ou não estas minimamente interessado em como se faz e queres é um código para meteres o programa a funcionar o mais depressa possivel?

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dsc a demora.

O que pretendo é tirar uma screenshot do desktop e guardá-la numa variável (ou na área de transferência). Mais nada, o resto já está preparado.

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se bem percebi queres fazer um screenshot do desktop certo?

Agora perferes que te espliquem como se faz e depois tu tentas fazer(uma rapidas pesquisa no google e encontras montes de coisas) ou não estas minimamente interessado em como se faz e queres é um código para meteres o programa a funcionar o mais depressa possivel?

cumps

O tempo não é problema... Podem explicar-me então como fazer a screenshot? Só pretendo mesmo fazer uma coisa do estilo

'Guardar a imagem em var

funScreenshot(imagem)

'Copiar p clipboard

clipboard.setdata(imagem)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora bem...

Começamos por declarar as API's e variaveis necessárias

Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As Long
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Private Const SRCCOPY = &HCC0020

Depois definine-se uma função que vai ser a função que vai "tirar" o screenshot, vai ter como nome GrabScreen

Variaveis para a função

Dim desktop_rect As RECT
Dim desktop_win As Long
Dim desktop_dc As Long
Dim desktop_wid As Long
Dim desktop_hgt As Long
Dim x As Long
Dim y As Long
Dim VarImg As Picture

Aqui retiras as dimensões do Desktop

desktop_win = GetDesktopWindow()
desktop_dc = GetDC(desktop_win)
GetWindowRect desktop_win, desktop_rect
desktop_wid = desktop_rect.Right
desktop_hgt = desktop_rect.Bottom

Agora que ja se tem as dimensões vamos colocar a imagem do desktop na formcom a API StretchBlt (se perferires tb da para meter numa PictureBox)

StretchBlt Form1.hdc, x, y, desktop_wid, desktop_hgt, desktop_dc, 0, 0, desktop_wid, desktop_hgt, SRCCOPY

Esta linha não te sei explicar bem o que faz, parece que é para "libertar" qualquer coisa do desktop, mas fiz uns testes e se a tirar não acontece nada... mas com la esta, deve ter algum motivo!

ReleaseDC desktop_win, desktop_dc

E por ultimo guarda-se a imagem para uma variavel

Set VarImg = Form1.Image

Para o clipboar, como tudisseste... basta istu

Clipboard.SetData VarImg

P.S.

Para que tudo istu funcione tens de meter a propriedade AutoRedraw da form a True.

EDIT: Se deopis quiseres guardar a imagem vais ver que tem um tamanho disparatado, á volta de 2Mb, para ficar com uma tamanho bastante reduzido existem Class's(para comprimira a imagem) ja feitas como é o caso da cJpege. Utilizando issu podes reduzes o tamanho da imagem para uns Kb's

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O código funciona perfeitamente! A screenshot é colocada no form!

Obrigado :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas depois dela estar na variavel e no clipboard podes fazer

Fom1.Cls

e fica limpa ou entao envez de issu estar na form podes meter numa picturebox :)

cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tanto codigo, acho que se faz isso com menos codigo

queres so tirar a do desktop sem aplicações a frente ou é mesmo printscreen do que estiver no ecra?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tanto codigo, acho que se faz isso com menos codigo

queres so tirar a do desktop sem aplicações a frente ou é mesmo printscreen do que estiver no ecra?

Se tiveres algum código mais pequeno que faça screenshots, arranjame issu sff :)  Quando mais pequeno melhor :P

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal Flags As Long, ByVal ExtraInfo As Long)

Metes isto por exemplo num button:

Call keybd_event(vbKeySnapshot, 0, 0, 0)

Picture1.Picture = Clipboard.GetData

Isto tira o que tiver no ecra, é a mesma coisa que tar a carregar na tecla print screen.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Espetaculo  :cheesygrin: , só tem um prob, se não quiseres que issu va para o clipboard...  :(

Não me tinha lembrado dessa tecla  :wallbash: tks :P

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Espetaculo  :cheesygrin: , só tem um prob, se não quiseres que issu va para o clipboard...  :(

Não me tinha lembrado dessa tecla  :wallbash: tks :P

Cumps

O código tá mesmo muito bom (Ovo de Colombo)...

Mas qual é o problema de ir para o clipboard?  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Issu ja depende do programa em que metas issu, ha programas em que nao tens interesse em que vá para o clipboard, imagina que tens la qualquer coisa... quando executas esse código essa coisa que estava no clipboard vai-se (penso eu)

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou não, guardas primeiro numa variável temporária... Ok?

E assim poupas linhas de código e ganhas tempo, a não ser que o que tenhas no clipboard não dê para meter numa variável temporária...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

epa... tambem podes fazer issu, guarda numa variavel, fazer o print, guardar o print e voltar a colocar no clipboard o que la estava. Para um programa normal penso que não há problema nenhum e esse código funcionar perfeitamente. Agora.... em determinados casos perfiro utilizar um código tipo aquele que postei, em que o print vai directamente para o programa sem passar por mais nada.

De qualquer forma o código do Crack é bem fixe  :(

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora