そんな特殊なものを書くのは稀ですから。
でも、昇格が必須のもの(ボタン / プロセス)を書いたら、例の 盾アイコン も必要ですし。
そして、Form での遣り方は WPF では通らない見たいですねぇ。
全般論として、
自分で書くプログラムで、管理者昇格が必須のものって、少ない筈です。
無論、プログラムそのものが全て管理者モードで!、等と言うものは、私には、無縁です。
ある条件下でのみ、管理者特権を行使する、
これは、稀ですが、無い訳ではありません。
当然、プロセスを Verb = runas で立ち上げるケースでは、
管理者昇格を明示する 盾アイコン Sheild Icon を付けるのが お決まり でしたね。
Form の時代には書いた事があったのですが、
WPF で、同じ様に書き進めると、壁に突き当たります。
別の書き方をしないと通らないのですね。
難儀しました。
備忘録的に書き残して置きましょう。
Sheild Icon が必要な WPF を書く方は、
それなりに、習得なさっている方だと思いますので、
コードの詳細には触れません。
基本的な事のみです。
xaml
Button に Shield Icon を表示する Control を定義
命名例は ImageShield で以下をお読み下さい。
( StackPanel 等を使用 )
Win32API を使って、Shield Icon データを取得
'Imports System.Runtime.InteropServices
Const SHGSI_ICON As UInt32 = &H100
Const SHGSI_SMALLICON As UInt32 = &H1
Const SIID_SHIELD As UInt32 = &H4D
<StructLayoutAttribute(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Structure SHSTOCKICONINFO
Public cbSize As Int32
Public hIcon As IntPtr
Public iSysImageIndex As Int32
Public iIcon As Int32
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)>
Public szPath As String
End Structure
<DllImport("shell32.dll", CharSet:=CharSet.Unicode)>
Shared Sub SHGetStockIconInfo(ByVal siid As UInt32, ByVal uFlags As UInt32, ByRef sii As SHSTOCKICONINFO)
End Sub
Dim shieldSource As BitmapSource = Nothing
Private Sub GetShield()
'Dim shieldSource As BitmapSource = Nothing
Dim sii As New SHSTOCKICONINFO()
sii.cbSize = Marshal.SizeOf(sii)
SHGetStockIconInfo(SIID_SHIELD, SHGSI_ICON Or SHGSI_SMALLICON, sii)
If sii.hIcon <> IntPtr.Zero Then
'Dim t = sii.hIcon
shieldSource = Interop.Imaging.CreateBitmapSourceFromHIcon(sii.hIcon,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions())
End If
End Sub
これに対して、 ImageShield.Source = shieldSource と割り当ててやれば OK !です
Control 例えば ImageShield の Visibility で ON / OFF を切り替えます。
0 件のコメント:
コメントを投稿