2014-09-30 5 views
1

우선, 제 질문에 대한 효과적인 답변을 제공하기 위해 "eddie_cat"씨에게 감사드립니다. 그는 "ScreenCapture"방식의 신용을 가지고 있습니다. 이 방법은 내 문제를 해결하지 않지만 (Windows 서비스 측면에서는 작동하지 않습니다), 코드가 정상적인 Windows 화면에서 화면 캡처 용으로 사용될 수 있다고 생각합니다.C#을 사용하여 Windows 서비스에서 캡처 화면 캡처 문제를 해결하려면 어떻게해야합니까?

"윈도우 서비스가 실행되도록 설계 : 나는이 문제를 해결하기위한 해결책을 찾을 수 없습니다

생각, 내가 Windows service couldnt get screenshot in windows 7

자신의 게시물 말했다" 다비드 Piras "씨에서 좋은 제안을 찾을 수 또한 연결된 사용자가 없을 때 항상 서버 프로세스처럼 작동하고 듣고, 작동하여 무언가를하거나 유휴 상태가됩니다.

필요한 모든 클라이언트 세션이 실행되는 클라이언트 응용 프로그램입니다. 결국 필요하다면 servi와 통신한다. 일을 끝내라.

Windows 서비스가 0이 아닌 다른 세션에서 실행되는 대신 모든 사용자 로그인시 모든 사용자의 시작 폴더에서 시작하는 작은 실행 파일 (UI가 없을 수도 있음)을 만들 수 있습니다. . 그런 응용 프로그램은 적절한 세션 내에서 실행되고 그 세션에 액세스 할 수 있습니다. 그러면 스크린 샷을 가져 와서 어딘가에 저장하거나 Windows 서비스 (세션 0에서 항상 실행 중)에서 끝점을 호출하고 스크린 샷을 작성하는 서비스를 만들 수 있습니다 클라이언트 응용 프로그램에서 가져온 것입니다.

이 방법은 비스타와 7에 마지막으로 시스템이 시작될 때 로그인하지 않은 사용자 세션에서 서비스를 시작하기 위해 "마법"을 사용하지 않는 것입니다. "

+0

실제로, 전체 화면을 캡처 한 다음 파일로 저장하는 간단한 방법이 필요합니다. 간단한 해결책은 대단히 환영합니다. –

+0

@Marc B, Grant Winney. 제 질문은 다른 사람들과의 사이에 있습니다. 내 문제는 서버가 세션 화면을 캡처하는 Windows 서버에서 사용자 활성 창 세션이 아닌 화면을 캡처하려고하여 발생합니다. –

+0

여전히 중복되지만 목록에없는 질문은 아닙니다. 이것으로 변경하십시오. http://stackoverflow.com/questions/18891819/windows-service-screen-capture-returns-black-screen?lq=1 –

답변

6

사용이 아니라, 훨씬 더 간단 :

Rectangle bounds = Screen.PrimaryScreen.Bounds; 
Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height); 
using (Graphics graphics = Graphics.FromImage(bitmap)) 
{ 
    graphics.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size); 
} 
bitmap.Save("C:\\temp\\test.png", ImageFormat.Png); 

당신이 다른 질문에서 복사 한 코드는 매우 구체적인 문제를 해결하기 위해 의미되었다 당신은 그냥 스크린 샷을 캡처하는 모든 작업을 수행 할 필요가 없습니다.. :)

+0

안녕하세요, eddie_cat, 도와 주셔서 감사합니다. 코드를 변경하여 @와 같은 특정 폴더에 코드를 저장하는 방법 "c : \ temp \ test.png". bitmap.Save (@ "c : \ temp \ test.png");를 사용하고 대신 작동하지 않습니다. –

+0

미안 해요 @Matthew 저는이 프로젝트의 코드를 복사했습니다. 어디로''MemoryStream'에 저장하고 있었는지 확인했습니다. 파일에 저장하면 업데이트 될 것입니다. –

+0

코드 bitmap.Save (@ "c : \ temp \ test.png", ImageFormat.Png)를 사용하지만 여전히 저장하지 않습니다. –