2

スクリーンショットを取得する Windows サービスがあります。しかし、黒い画面しか作成しません。これは、セッション 0 の分離が原因で発生することを知っています。私はインターネットで検索しましたが、この問題に対して承認された解決策を見つけることができませんでした。

1- Windows サービスのセッションを変更し、セッション 1、セッション 2 のような別のユーザーのセッションのデスクトップ画面を取得する方法はありますか?

2- Windows サービスからセッション 0 以外の別のセッションで実行されるコンソール アプリケーションを開始する方法はありますか?

4

2 に答える 2

5

Windowsサービスは、ユーザーが接続されていないときにも実行されるように設計されており、サーバープロセスが常に起動してリッスンしている、または起動して何かを実行している、またはアイドル状態のように機能します。

必要なのは、ログに記録されたすべてのユーザーのセッション内で実行され、最終的にジョブを実行し、必要に応じてサービスと通信して実行されたジョブを実行するクライアントアプリケーションだと思います。

ここで言っているのは、Windowsサービスを0以外のセッションで実行する代わりに、ユーザーがログインするたびにすべてのユーザーのスタートアップフォルダーから起動する小さな実行可能ファイル(おそらくUIがまったくない)を作成できるということです。このようなアプリケーションは、適切なセッション内で実行され、それにアクセスできます。スクリーンショットを取得して、それ自体のどこかに保存するか、Windowsサービスのエンドポイントを呼び出し(常にセッション0で実行)、サービスでスクリーンショットを作成します。それのクライアントアプリケーションから取得。

これは私が行う方法であり、Vistaと7に、システムの起動時にまだログインしていないユーザーのセッション内でサービスを開始するように指示する「魔法」を試みません。

于 2011-09-17T10:51:21.813 に答える
2

Windows サービスのセッションを変更し、セッション 1、セッション 2 のような別のユーザーのセッションのデスクトップ画面を取得する方法はありますか?

いいえ。

セッション 0 以外の別のセッションで実行されるコンソール アプリケーションを Windows サービスから開始する方法はありますか?

これは実行できますが、面倒です。これには、ログオンしているユーザーの偽装、ユーザー トークンの操作、および を使用した別のセッションへのプロセスの起動が含まれますCreateProcessAsUser()。この記事では、必要なものについて説明します。

余談ですが、スクリーンショットにコンソール ウィンドウが表示されるため、コンソール アプリケーションは必要ありません。標準の Windows アプリ (GUI サブシステムを使用) だけが必要ですが、表示されるウィンドウは表示されません。

于 2011-09-17T10:55:20.353 に答える