Category:
Xojo
Xojo の UAC 周りのノウハウです。
上記のように、他の Windows アプリと同様のアイコンが描画できます。
例えば、ここでは DNS キャッシュを flush する操作を行っています。SW_HIDE などはお好みで。
ボタンに UAC ロゴを描画する
ボタンに UAC のロゴを描画するには、SendMessage Win32 API を使ってボタンに BCM_SETSHIELD メッセージを送信します。ボタンの Open イベントハンドラに以下のように記述します。Sub Open()
#If TargetWin32
Soft Declare Function SendMessage Lib "User32" Alias "SendMessageW" _
(hWnd As Integer, Msg As UInt32, wParam As Integer, lParam As Integer) As Integer
Const BCM_SETSHIELD = &h0000160C
Call SendMessage(Me.Handle, BCM_SETSHIELD, 0, 1)
#EndIf
End Sub
上記のように、他の Windows アプリと同様のアイコンが描画できます。
UAC を使って外部プロセスを起動する
UAC を使って外部プロセスを昇格させて起動するには、ShellExecute 関数を使います。その際、Verb として runas を指定します。例えば、ここでは DNS キャッシュを flush する操作を行っています。SW_HIDE などはお好みで。
Sub Action()
#If TargetWin32
Soft Declare Function ShellExecute Lib "Shell32" Alias "ShellExecuteW" _
(HWND As Integer, verb As WString, file As WString, params As WString, directory As WString, cmd As Integer) As Integer
Const SW_HIDE = 0
Dim result As Integer = _
ShellExecute(0, "runas", SpecialFolder.System.Child("ipconfig.exe").ShellPath, "/flushdns", SpecialFolder.System.ShellPath, SW_HIDE)
If result <= 32 Then // 32 より大きい値であれば成功
MsgBox "failed: " + str(result)
End If
#Endif
End Sub
Comments