Estou fazendo um aplicativo de captura de tela e tudo está indo bem. Tudo o que preciso fazer é capturar a janela ativa e tirar uma captura de tela dessa janela ativa. Alguém sabe como eu posso fazer isso?
c#
screenshot
active-window
do utilizador
fonte
fonte
Respostas:
http://www.developerfusion.com/code/4630/capture-a-screen-shot/
fonte
para capturar o uso atual da janela
fonte
Sugiro a próxima solução para capturar qualquer janela ativa atual (não apenas nosso aplicativo C #) ou a tela inteira com determinação da posição do cursor em relação ao canto superior esquerdo da janela ou tela, respectivamente:
fonte
Rect
com o sistemaRectangle
, mas depois que a funçãoGetWindowRect
retornou retângulo errado. Em vez deRight
eTop
, ele defineWidth
eHeight
retângulo de saída.var thisWindowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle;
vez disso #Aqui está um trecho para capturar a área de trabalho ou a janela ativa. Não tem referência ao Windows Forms.
Como capturar a tela inteira:
Como capturar a janela ativa:
Originalmente encontrado aqui: http://www.snippetsource.net/Snippet/158/capture-screenshot-in-c
fonte
O código do KvanTTT funcionou muito bem. Estendi um pouco para permitir um pouco mais de flexibilidade no formato de salvamento, bem como a capacidade de salvar pelo hWnd, .NET Control / Form. Você pode obter um bitmap ou salvar em arquivo, com algumas opções.
fonte
Eu suponho que você use
Graphics.CopyFromScreen
para obter a captura de tela.Você pode usar P / Invoke para GetForegroundWindow ( e obter sua posição e tamanho ) para determinar de que região você precisa copiar.
fonte
Você pode usar o código desta pergunta: Como posso salvar uma captura de tela diretamente em um arquivo no Windows?
Apenas mude
WIN32_API.GetDesktopWindow()
para a propriedade Handle da janela que você deseja capturar.fonte
Um pequeno ajuste no método estático void ImageSave () concederá a opção de onde salvá-lo. O crédito vai para a Microsoft (http://msdn.microsoft.com/en-us/library/sfezx97z.aspx)
Seu evento button_click deve ser codificado com algo como isto ...
fonte
Se você deseja usar código gerenciado: Isso capturará qualquer janela através do ProcessId.
Eu usei o seguinte para tornar a janela ativa.
Eu usei a tela de impressão para capturar uma janela.
fonte
Use o seguinte código:
fonte
Com base na resposta do ArsenMkrt, mas esta permite capturar um controle em seu formulário (estou escrevendo uma ferramenta, por exemplo, que possui um controle WebBrowser e deseja capturar apenas sua exibição). Observe o uso do método PointToScreen:
Tendo o objeto Bitmap, você pode simplesmente chamar Salvar nele
O exemplo acima pressupõe que o GC pegue o bitmap, mas talvez seja melhor atribuir o resultado de someControl.getScreenshot () a uma variável Bitmap e, em seguida, descarte essa variável manualmente quando terminar com cada imagem, especialmente se você estiver fazendo isso com frequência ( digamos que você tenha uma lista de páginas da web que deseja carregar e salve as capturas de tela delas):
Melhor ainda, poderia empregar uma cláusula using, que tem o benefício adicional de liberar os recursos de bitmap, mesmo no caso de uma exceção ocorrer dentro do bloco using (child):
Atualizar:
Agora, a ferramenta WebCapture é implantada no ClickOnce ( http://gallery.clipflair.net/WebCapture ) na Web (também possui um bom suporte de atualização automática graças ao ClickOnce) e você pode encontrar o código fonte em https://github.com/Zoomicon / ClipFlair / tree / master / Servidor / Ferramentas / WebCapture
fonte