Kenichi Maehashi's Blog

脳内コアダンプ

RSS
Category: Xojo
Xojo の UAC 周りのノウハウです。

ボタンに 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

Leave Yours...
Name:
E-mail / URL (optional):
Comment:
Are You Robot?: