2009-06-16 6 views
4

Ich habe DirectShow-basierte Bildschirm-Capture-Software. Intern ruft es die CopyScreenToBitmap-Funktion zum Aufrufen des Bildschirms auf. Dann wird das Bild von ffdshow komprimiert. Es funktioniert gut als Desktop-Anwendung, aber als Fenster-Service, auf bestimmten Computern funktioniert es nicht (schwarzes Bild). Ich habe 'Dienst mit dem Desktop interagieren' aktiviert und diesen Dienst auf dem aktuellen Benutzerkonto ausgeführt. Irgendwelche Ideen, was könnte falsch sein?Bildschirmaufnahme von Windows-Dienst

Ich teste es auf Windows XP, aber es wird erwartet, dass auch auf Vista und 7 arbeiten.

Ja, es funktioniert als Desktop-Anwendung auf allen Computern, aber auf einigen von ihnen (auf der Mehrheit von ihnen) es als Dienst versagt.

+0

Welche Betriebssysteme ausgeführt wird auf der Computer, auf denen Ihr Dienst nicht ordnungsgemäß funktioniert? –

+0

@bezieur: "Es wird erwartet, dass es funktioniert"! = "Wird funktionieren" oder sogar "hat eine geringe Chance zu arbeiten". Sie sollten nicht mit "es wird erwartet, dass es funktioniert" arbeiten, Sie sollten es testen. Das Win32-Servicemodell hat sich in Vista und höher erheblich geändert. –

+0

@Mihai: Sicher, du hast Recht! Ich meinte nur, dass es im Moment auf XP funktionieren muss, aber in einer Zukunft (eine kurze) werden die Anforderungen sein, auf neueren ms os-Systemen zu arbeiten :-). – bezieur

Antwort

3

Versuchen Sie dies zusätzlich Zugriff auf den Desktop zu ermöglichen:

  1. Aufzählen alle Fenster Stationen: EnumWindowStations
  2. Finden Sie die Fensterstation für den angemeldeten Benutzer, und es Ihr Prozess Fenster Station machen: SetProcessWindowStation siehe Beispiel in this thread
  3. Stellen Sie dann den Desktop für den aktuellen Thread zu dem Standard-Desktop der Arbeitsstation also here
  4. Dann erhält die D - C des Desktop eines der wenigen Methoden, einschließlich

    CreateDC (TEXT ("DISPLAY"), NULL, NULL, NULL)

    Viel Glück

+0

Das ist der Punkt! Vielen Dank für die Hilfe. Zusätzlich habe ich den Artikel gefunden: http://www.codeproject.com/KB/system/SystemTrayIconInSvc.aspx, der dieses Problem ebenfalls abdeckt. – bezieur

0

Haben Sie getestet, dass die Desktop-Anwendung auf denselben Computern erfolgreich ist, die als Dienst fehlschlagen?

3

Wie ich es verstehe, wurde in Vista eine Änderung vorgenommen, die Dienste vom Konsolenbenutzer auf einen separaten Desktop verschoben hat. Während Sie das Kontrollkästchen "Zugriff auf den Desktop zulassen" aktiviert haben, müssen Sie Ihren Dienst pragmatisch dennoch pragmatisch auf diesen Desktop umstellen.

Here is a blog post with some useful info and examples.

+0

+1 Jon hat wahrscheinlich Recht. Ich erkenne dieses Problem. – ralphtheninja

+0

Das ist auch eine gute Antwort, aber es war zu kurz um über meine Wissenslücke zu springen :-). – bezieur