Windows サービスからプロセスを実行し、スクリーンショットを取得する必要があります。
BitBlt と PrintWindow の Win32 呼び出しを試しましたが、どちらも空白 (黒) のビットマップを返します。
通常のユーザー プロセスからコードを実行すると、問題なく動作します。
これは可能なことですか?または、別の方法を試すことができますか?
私たちが試したこと:
- ローカル システムとして実行されている Windows サービス、ローカル システムとしてプロセスを実行 -> スクリーンショットが失敗する
- 管理者として実行されている Windows サービスは、管理者としてプロセスを実行します -> スクリーンショットが失敗します。
- ユーザー XYZ として実行されている Windows アプリケーションは、XYZ としてプロセスを実行します -> スクリーンショットは BitBlt または PrintWindow の両方で動作します。
- ローカルシステムから「サービスがデスクトップと対話することを許可する」にチェックを入れてみました
ウィンドウが別のウィンドウの背後にある場合に、PrintWindow がうまく機能することにも気付きました。
その他の要件については、親プロセスと子プロセスの両方が同じユーザーの下にある必要があります。あるプロセスから別のプロセスへの偽装を実際に使用することはできません。