私はこれに対する答えをインターネット全体で探していましたが、直接答えられていないように見えるので、尋ねてみようと思いました。
ケース シナリオ: 現在コンピューターの画面に表示されているもののスクリーンショットを撮りたいです。Windows のログオン画面なら、それでいいと思います。それがアクティブなユーザーのデスクトップなら、それになりたいです。ユーザーがアプリケーションを昇格させ、UAC プロンプトが表示される場合は、それを望んでいます。
多くの読書と試行錯誤によると、私の現在の設定は次のとおりです。
- プログラムは Windows サービスとして実行されます
- アクティブなユーザーのトークンを取得します
- ユーザーのトークンを使用して CreateProcessAsUser を実行し、それ自体の別のインスタンスを生成します
- スクリーンショットを撮り、パイプ経由で送り返します。
現在、これはログオンしているユーザーにとってはうまく機能していますが、UAC プロンプトが有効になっているとスクリーンショットが黒くなります。
また、この方法は明らかにログオン画面の取得には機能しません。
基本的に、TeamViewer はこの種のことをどのように達成するのだろうか? UACプロンプトをキャプチャしながら、ログオン画面とユーザーのセッションを問題なく切り替えることができます。それがどのようにこれを達成するかについて、私は非常に興味があります。
みんな、ありがとう!