728x90
728x170
■ Button 클래스에서 권한 상승 필요 표시 버튼을 사용하는 방법을 보여준다.
▶ CustomButton.cs
using System;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 커스텀 버튼
/// </summary>
public class CustomButton : Button
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Import
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 메시지 보내기 - SendMessage(windowHandle, message, wordParameter, longParameter)
/// <summary>
/// 메시지 보내기
/// </summary>
/// <param name="windowHandleRef">윈도우 핸들 참조</param>
/// <param name="message">메시지</param>
/// <param name="wordParameter">WORD 매개 변수</param>
/// <param name="longParameter">LONG 매개 변수</param>
/// <returns>처리 결과</returns>
[DllImport("user32")]
private static extern IntPtr SendMessage(HandleRef windowHandleRef, uint message, IntPtr wordParameter, IntPtr longParameter);
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// BCM_SETSHIELD
/// </summary>
private uint BCM_SETSHIELD = 0x0000160c;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - CustomButton()
/// <summary>
/// 생성자
/// </summary>
public CustomButton()
{
FlatStyle = FlatStyle.System;
if(!IsAdministratorRole())
{
ShowShield();
}
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 관리자 역할 여부 구하기 - IsAdministratorRole()
/// <summary>
/// 관리자 역할 여부 구하기
/// </summary>
/// <returns>관리자 역할 여부</returns>
private bool IsAdministratorRole()
{
WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
WindowsPrincipal windowsPrincipal = new WindowsPrincipal(windowsIdentity);
return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
}
#endregion
#region 방패 표시하기 - ShowShield()
/// <summary>
/// 방패 표시하기
/// </summary>
private void ShowShield()
{
IntPtr wordParameter = new IntPtr(0);
IntPtr longParamerer = new IntPtr(1);
SendMessage(new HandleRef(this, Handle), BCM_SETSHIELD, wordParameter, longParamerer);
}
#endregion
}
}
▶ MainForm.cs
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
}
#endregion
}
}
728x90
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM] Control 클래스 : IsKeyLocked 정적 메소드를 사용해 CAPS LOCK 키 눌림 여부 구하기 (0) | 2021.08.27 |
---|---|
[C#/WINFORM] 볼륨 제어하기 (0) | 2021.08.27 |
[C#/WINFORM] 사용자 비활성 감지하기 (0) | 2021.08.27 |
[C#/WINFORM] SystemInformation 클래스 : BootMode 정적 속성을 사용해 Windows 안전 모드 여부 구하기 (0) | 2021.08.26 |
[C#/WINFORM] 숫자를 단어로 변환하기 (0) | 2021.08.26 |
[C#/WINFORM] Screen 클래스 : PrimaryScreen 정적 속성을 사용해 기본 디스플레이 해상도 구하기 (0) | 2021.08.26 |
[C#/WINFORM] Color 구조체 : 혼합 색상 구하기 (0) | 2021.08.23 |
[C#/WINFORM] Panel 클래스 : 둥근 패널 사용하기 (0) | 2021.08.22 |
[C#/WINFORM] Point 구조체 : 직선에 포함된 포인트 배열 구하기 (0) | 2021.08.22 |
[C#/WINFORM] PrivateFontCollection 클래스 : AddMemoryFont 메소드를 사용해 바이트 배열에서 폰트 패밀리 추가하기 (0) | 2021.08.21 |