2011-10-18 10 views
2

UACプロンプトの表示方法など、一時的なセッションでウィンドウを起動することに興味があります。このコンセプトには何人かの関心が寄せられていますので、私はここで質問しました。基本的には、UACのような昇格されたウィンドウです。 "あなたは確信していますか?< ...>"というメッセージが表示されますが、任意のウィンドウが表示されます。最終目標は、ウィンドウイベントフックやパスワード入力時に発生する可能性のあるその他の問題を防止することです。UACスタイルの昇格プロンプト

私はUAC APIと他のいくつかの場所を簡単に見てきましたが、そこには特に有用なものはありません。明らかに、UACのプロンプトは自分自身のデスクトップセッション何とかに昇格するので、そのような方法でウィンドウを作成する方法が必要です。

+0

私はこの複雑さを理解しているとは思わない...マイクロソフトはUACプロンプトを作成して、再作成するのが非常に難しいようにしました。ここに根底にある問題は何ですか?誰かがUACプロンプトを再作成するよりも優れたものを提案するかもしれません。 – qJake

+0

私が知っている限り、彼らは他のアプリケーションがUACプロンプト自体を妨げないように設計しました。同様の方法で(つまり、一時的なデスクトップセッションで)あなた自身のプロンプトを表示することは、防止しようとしていたものではありません。 – Polynomial

+0

既存のデスクトップセッションの上に新しい*デスクトップセッション*を作成することは非常に複雑で、おそらくC#に適したものではありません(Win32/C++と思われます)。その代わりに、一番上にある全画面、境界線のない透明なフォームを表示し、その上に別のウィンドウ/プロンプトを表示するだけではいかがですか? – qJake

答えて

4

CreateDesktopを使用してデスクトップを作成できます。 SwitchDesktopを使用して、新しいデスクトップに切り替えることができます。その後、メインスレッドでSetThreadDesktopと呼んでウィンドウを描画することができます。 "Default"をlpszDesktopとし、このハンドルでSwitchDesktopを使用して、OpenDesktopを呼び出して、デフォルトのデスクトップのハンドルを取得します。また、特定のデスクトップでプロセスを実行することもできます。これを行うには、STARTUPINFO構造体のlpDesktopメンバを、プロセスを実行するデスクトップの名前に設定する必要があります。それらを使用した後にデスクトップへのハンドルを閉じます(CloseDesktop)。

この方法で独自のウィンドウを自分のデスクトップに表示することができます。

UACとログオンUIで使用されるセキュリティ保護されたデスクトップは、「Winlogon」と呼ばれます。それにアクセスするにはシステム権限が必要です。ルークはone of his answersに例を示しました。

ブライアン・R・ボンダイは、読む価値があるblog entry on desktops and window stationsを書きました。

関連する問題