質問

DirectShowベースのスクリーンキャプチャソフトウェアがあります。内部的には、画面を取得するためにCopyScreenToBitmap関数を呼び出します。次に、画像はffdshowによって圧縮されます。 デスクトップアプリケーションとしては正常に動作しますが、ウィンドウサービスとしては、特定のコンピューターでは動作しません(黒い画像)。 「デスクトップとの対話をサービスに許可する」を設定し、現在のユーザーアカウントでそのサービスを実行します。 何が間違っている可能性がありますか?

Windows XPでテストしますが、Vistaおよび7でも動作することが期待されています。

はい、すべてのコンピューターでデスクトップアプリケーションとして機能しますが、一部のコンピューター(大部分)でサービスとして失敗します。

役に立ちましたか?

解決

デスクトップへのアクセスを許可することに加えて、これを試してください:

  1. すべてのウィンドウステーションを列挙する: EnumWindowStations
  2. ログオンしているユーザーのウィンドウステーションを見つけて、それをプロセスのウィンドウステーションにします。 SetProcessWindowStation -例を参照 このスレッド内
  3. 次に、現在のスレッドのデスクトップをウィンドウステーションのデフォルトデスクトップに設定します こちら
  4. 次に、いくつかの方法の1つを使用してデスクトップのDCを取得します。

    CreateDC(TEXT(" DISPLAY")、NULL、NULL、NULL)

    幸運

他のヒント

理解しているように、Vistaで変更が行われ、コンソールユーザーとは別のデスクトップにサービスが移動しました。 「アクセスを許可する」ボックスにチェックを入れている間、デスクトップに、あなたはまだそのデスクトップを使用するためにあなたのサービスを実用的に切り替える必要があると思います。

こちらは有用な情報と例を含むブログ投稿

デスクトップアプリケーションがサービスとして失敗するのと同じコンピューターで成功することをテストしましたか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top