2009-06-16 21 views
4

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

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

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

+0

どのオペレーティング・システムは、上で実行されていますあなたのサービスが正常に動作しないコンピュータ? –

+0

@bezieur: "うまくいく"と期待されます!= "うまくいく"、あるいは "遠く離れて働く可能性があります"。あなたは "それが動作することが期待されて"動作しないでください、あなたはそれをテストする必要があります。 Win32のサービスモデルは、Vista以降で大きく変化しました。 –

+0

@ミハイ:確かに、あなたは正しいです!私はちょうどそれが現時点でXP上で動作する必要があることを意味しましたが、将来(短いもの)には、新しいms osシステムで動作するようにする必要があります:-)。 – bezieur

答えて

3

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

  1. 列挙すべてのウィンドウステーション:EnumWindowStations
  2. ログオンしているユーザーのウィンドウステーションを見つけて、それあなたのプロセスのウィンドウステーションますSetProcessWindowStation - その後、Dを取得し、ウィンドウステーションのデフォルトのデスクトップにあなたの現在のスレッドのalso here
  3. をデスクトップを設定する例in this thread

  4. を見ます(NULL、NULL、NULL、TEXT( "DISPLAY"))

    CreateDCを含むいくつかの方法のいずれかを使用して、デスクトップのC、

    幸運

+0

それがポイントです!皆さんありがとうございました。さらに、私はその問題をカバーしている記事http://www.codeproject.com/KB/system/SystemTrayIconInSvc.aspxを見つけました。 – bezieur

0

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

3

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

Here is a blog post with some useful info and examples

+0

+1 Jonはおそらく正しいでしょう。私はこの問題を認識しています。 – ralphtheninja

+0

それは良い答えですが、それは私の知識ギャップを飛び越えるのには短すぎました:-)。 – bezieur

関連する問題