4

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

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

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

4

2 に答える 2

4

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

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

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

    幸運を

于 2009-06-16T15:36:53.153 に答える
4

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

これは、いくつかの役立つ情報と例を含むブログ投稿です

于 2009-06-16T15:27:16.573 に答える