Домой Process Устанавливаем иконку UAC Shield на кнопку: Справочник по C#

Устанавливаем иконку UAC Shield на кнопку: Справочник по C#

481
0


      Каждый, кто использует Windows Vista или Windows 7 видел такую вот иконку на различных элементах управления. Щит на элементе управления означает, что после взаимодействия с ним, у пользователя будут запрошены повышенные права доступа. Чаще всего так выглядят кнопки, хотя встречаются и другие элементы управления. Также, эта иконка указывает, что в системе включена UAC.

      Что нужно сделать, чтобы добавить такую иконку на кнопку в своем приложении? В принципе ничего сложного в этом нет. Достаточно четырех строк кода. Принцип работы следующий:
вы, используя функцию SendMessage (из библиотеки WinAPI), отправляете кнопке сообщение BCM_SETSHIELD. Вот и все.
Смотрите код:

[DllImport("user32")]
public static extern UInt32 SendMessage(IntPtr hWnd, UInt32 msg, UInt32 wParam, UInt32 lParam);

const int BCM_SETSHIELD = 0x160C; //Для отображения кнопки со щитом

//....где-то в коде
SendMessage(имя_кнопки.Handle, BCM_SETSHIELD, 0, 0xFFFFFFFF);

Описали функцию SendMessage, задали константу BCM_SETSHIELD и отправили сообщение используя указатель (Handle) на элемент управления.
Для тестирования я написал небольшое приложение, которое демонстрирует вышеописанный способ. В приложении я добавил пару методов:
1-й IsAdmin проверяет права текущего пользователя
2-й btnShield_Click запускает приложение с повышенными привилегиями.
Для запуска внешнего приложения с правами администратора достаточно в объекте ProcessStartInfo задать полю Verb значение «runas».
В принципе больше ничего сложного и необычного я не вижу.
Вот как это выглядит:

[DllImport("user32")]
public static extern UInt32 SendMessage
(IntPtr hWnd, UInt32 msg, UInt32 wParam, UInt32 lParam);

const int BCM_SETSHIELD = 0x160C; //Для отображения кнопки со щитом

public Form1()
{
InitializeComponent();
}

/// 
/// Проверить, является ли пользователь администратором
/// 
/// 
static internal bool IsAdmin()
{
WindowsIdentity id = WindowsIdentity.GetCurrent();
WindowsPrincipal p = new WindowsPrincipal(id);
return p.IsInRole(WindowsBuiltInRole.Administrator);
}

private void Form1_Load(object sender, EventArgs e)
{
if (!IsAdmin())
{
btnShield.FlatStyle = FlatStyle.System;
SendMessage(btnShield.Handle, BCM_SETSHIELD, 0, 0xFFFFFFFF);
}
}

private void btnShield_Click(object sender, EventArgs e)
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.WorkingDirectory = Environment.CurrentDirectory;
startInfo.FileName = Application.ExecutablePath;
startInfo.Verb = "runas";
try
{
Process p = Process.Start(startInfo);
}
catch (System.ComponentModel.Win32Exception ex)
{
return;
}

Application.Exit();
}

Источник krez0n.org.ua

ЧИТАТЬ ТАКЖЕ:  Удаление файла или папки в корзину: Справочник по C#

Устанавливаем иконку UAC Shield на кнопку: Справочник по C#

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь