Windowsサービスからの画面キャプチャ
-
05-07-2019 - |
質問
DirectShowベースのスクリーンキャプチャソフトウェアがあります。内部的には、画面を取得するためにCopyScreenToBitmap関数を呼び出します。次に、画像はffdshowによって圧縮されます。 デスクトップアプリケーションとしては正常に動作しますが、ウィンドウサービスとしては、特定のコンピューターでは動作しません(黒い画像)。 「デスクトップとの対話をサービスに許可する」を設定し、現在のユーザーアカウントでそのサービスを実行します。 何が間違っている可能性がありますか?
Windows XPでテストしますが、Vistaおよび7でも動作することが期待されています。
はい、すべてのコンピューターでデスクトップアプリケーションとして機能しますが、一部のコンピューター(大部分)でサービスとして失敗します。
解決
デスクトップへのアクセスを許可することに加えて、これを試してください:
- すべてのウィンドウステーションを列挙する: EnumWindowStations
- ログオンしているユーザーのウィンドウステーションを見つけて、それをプロセスのウィンドウステーションにします。 SetProcessWindowStation -例を参照 このスレッド内
- 次に、現在のスレッドのデスクトップをウィンドウステーションのデフォルトデスクトップに設定します こちら
-
次に、いくつかの方法の1つを使用してデスクトップのDCを取得します。
CreateDC(TEXT(" DISPLAY")、NULL、NULL、NULL)
幸運
他のヒント
理解しているように、Vistaで変更が行われ、コンソールユーザーとは別のデスクトップにサービスが移動しました。 「アクセスを許可する」ボックスにチェックを入れている間、デスクトップに、あなたはまだそのデスクトップを使用するためにあなたのサービスを実用的に切り替える必要があると思います。
デスクトップアプリケーションがサービスとして失敗するのと同じコンピューターで成功することをテストしましたか?
所属していません StackOverflow