Ir para conteúdo
Fórum Script Brasil
  • 0

Api - Paintdesktop


TotZ

Pergunta

Saudações

Em um formulário com o seguinte código:

Private Declare Function PaintDesktop Lib "user32" (ByVal hdc As Long) As Long

Private Sub Command1_Click()
PaintDesktop Picture1.hdc
End Sub


Private Sub Form_Activate()
Picture1.Top = 0
Picture1.Left = 0

Picture1.Height = Form1.Height
Picture1.Width = Form1.Width

Picture1.BorderStyle = 0
End Sub

Ao se clicar no Command1, a Picture1 (que ocupa todo o formulário) fica com a imagem que está sendo usa como papel de parede no momento.

Gostaria de praticamente tirar um "PrintScreen" da tela atrás do Form e joga-la picture. Ou seja, quero que além do papel de parede, também sejam mostrados os ícones da área de trabalho e o menu iniciar.

Como faço isso?

Obrigado.

Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Experimente o seguinte:

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC 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 dwRop As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long

Private Sub Command1_Click()
    BitBlt Picture1.hDC, 0, 0, 12000, 9000, GetWindowDC(GetDesktopWindow()), 0, 0, vbSrcCopy
End Sub

Seria isso?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Experimente o seguinte:

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC 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 dwRop As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long

Private Sub Command1_Click()
    BitBlt Picture1.hDC, 0, 0, 12000, 9000, GetWindowDC(GetDesktopWindow()), 0, 0, vbSrcCopy
End Sub

Seria isso?

Abraços,

Graymalkin

Caro Graymalkin,

Essa solução é muito próxima da que eu desejava, contudo o próprio formulário aparece na picture. Isso acarreta em deixar a imagem totalmente cinza (a cor do form) quando o formulário está maximizado e sem borda.

Não há uma adaptação desse código para que o formulário não seja mostrado?

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0
Talvez se você sumir com ele da tela (Visible = False), mas não testei. Experimente aí e dê um retorno.

Abraços,

Graymalkin

Desculpe a demora para responder...

Com relação a tentar fazer com que o formulário ficasse invisível, funcionaria perfeitamente se não fosse um detalhe:

Quando a tela é minimizada, a Picture1 volta a ficar cinza. A imagem não se conserva. Isso pode ser facilmente observado se você rodar o código, arrastar o formulário até que metade dele estiver "para fora da área de exibição da tela" e depois voltar. A parte que foi coberta estará cinza.

Tentei colocar: "form1.picture = Picture1.picture" e "form1.picture = Picture1.image". Contudo, parece que o VB não entende que existe uma imagem ali. sad.gif

Alguma sugestão? unsure.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Já experimentou mudar a propriedade AutoRedraw da PictureBox para True?

Já havia tentado.

Por padrão, o AutoRedraw vem False. Se eu setar para True depois de

BitBlt Picture1.hDC, 0, 0, 12000, 9000, GetWindowDC(GetDesktopWindow()), 0, 0, vbSrcCopy

não faz nenhum efeito, ou seja o problema ainda persiste.

Se eu ponho depois, aparece a seguinte mensagem de erro:

"Run-time error '480':

Can´t create a AutoRedraw image"

Alguma idéia?

Link para o comentário
Compartilhar em outros sites

  • 0

Acredito que você teria que definir AutoRedraw como True antes de desenhar na mesma. Experimente mudar nas propriedades do próprio controle e não via código.

Como eu disse, se a propriedade AutoRedraw estiver definida com True (mesmo quando altero no próprio controle) antes da função ser executada, ao tentar desenhar a imagem na Picture1 aparece o tal erro "Can´t create a AutoRedraw image"

Não tenho mais idéias do que fazer sad.gif

Link para o comentário
Compartilhar em outros sites

  • 0
Acredito que você teria que definir AutoRedraw como True antes de desenhar na mesma. Experimente mudar nas propriedades do próprio controle e não via código.

Como eu disse, se a propriedade AutoRedraw estiver definida com True (mesmo quando altero no próprio controle) antes da função ser executada, ao tentar desenhar a imagem na Picture1 aparece o tal erro "Can´t create a AutoRedraw image"

Não tenho mais idéias do que fazer sad.gif

Aqui não dá este erro não, e a imagem se conserva na PictureBox. Experimente colocar o seguinte código no evento Load do form:

   Me.Visible = False
   BitBlt Picture1.hDC, 0, 0, 12000, 9000, GetWindowDC(GetDesktopWindow()), 0, 0, vbSrcCopy
   SavePicture Picture1.Image, "c:\teste.bmp"

Depois abra o arquivo c:\teste.bmp e veja se o conteúdo está correto.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Aqui não dá este erro não, e a imagem se conserva na PictureBox. Experimente colocar o seguinte código no evento Load do form:

   Me.Visible = False
   BitBlt Picture1.hDC, 0, 0, 12000, 9000, GetWindowDC(GetDesktopWindow()), 0, 0, vbSrcCopy
   SavePicture Picture1.Image, "c:\teste.bmp"

Depois abra o arquivo c:\teste.bmp e veja se o conteúdo está correto.

Executei a rotina e foi salva uma imagem de 77 x 29 pixels e toda cinza.

Acho que não funcionou...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...