Jump to content

Recommended Posts

Posted

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. 😁

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!

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Posted

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

Posted

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.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Posted

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)

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Posted

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

Posted

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 😛

Cumps

Posted

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.

Posted

Espetaculo  😁 , só tem um prob, se não quiseres que issu va para o clipboard...  😞

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

Cumps

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

Mas qual é o problema de ir para o clipboard?  😛

Posted

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

Posted

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

Posted

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.