[PYTHON/COMMON] uuid4 함수 : UUID(GUID) 문자열 구하기
■ uuid4 함수를 사용해 UUID(GUID) 문자열을 구하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 |
import uuid uuid1 = uuid.uuid4() uuidString = str(uuid1).upper() print(uuidString) |
■ uuid4 함수를 사용해 UUID(GUID) 문자열을 구하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 |
import uuid uuid1 = uuid.uuid4() uuidString = str(uuid1).upper() print(uuidString) |
■ ManagementObjectSearcher 클래스를 사용해 NVIDIA GPU 설치 여부를 구하는 방법을 보여준다. ▶ Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
using System; using System.Management; namespace TestProject; /// <summary> /// 프로그램 /// </summary> class Program { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region NVIDIA GPU 설치 여부 구하기 - IsInstalledNvidiaGPU() /// <summary> /// NVIDIA GPU 설치 여부 구하기 /// </summary> /// <returns>NVIDIA GPU 설치 여부</returns> private static bool IsInstalledNvidiaGPU() { using ManagementObjectSearcher managementObjectSearcher = new("SELECT * FROM Win32_VideoController"); foreach(ManagementObject managementObject in managementObjectSearcher.Get()) { string name = managementObject["Name"] as string; if(!string.IsNullOrEmpty(name) && name.ToLower().Contains("nvidia")) { return true; } } return false; } #endregion #region 프로그램 시작하기 - Main() /// <summary> /// 프로그램 시작하기 /// </summary> private static void Main() { bool isInstalledNvidiaGPU = IsInstalledNvidiaGPU(); Console.WriteLine(isInstalledNvidiaGPU ? "NVIDIA GPU가 설치되어 있습니다." : "NVIDIA GPU가 설치되어 있지 않습니다."); } #endregion } |
TestProject.zip
■ RuntimeInformation 클래스의 IsOSPlatform 정적 메소드를 사용해 윈도우즈 운영 체제가 아닌 경우 실행을 중단하는 방법을 보여준다. ▶ Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
using System; using System.Runtime.InteropServices; namespace TestProject; /// <summary> /// 프로그램 /// </summary> class Program { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region 프로그램 시작하기 - Main() /// <summary> /// 프로그램 시작하기 /// </summary> private static void Main() { if(!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { Console.WriteLine("이 프로그램은 Windows에서만 실행할 수 있습니다."); return; } } #endregion } |
TestProject.zip
■ 키보드 후킹을 사용해 WIN + C 키를 누를 경우 메모장을 실행하는 방법을 보여준다. ※ 윈도우즈 10 버전에서 코타나 실행도 방지한다. ▶
■ ManagementObjectSearcher 클래스를 사용해 시스템 정보를 구하는 방법을 보여준다. ▶ Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
#pragma warning disable CA1416 using System.Management; namespace TestProject; /// <summary> /// 프로그램 /// </summary> class Program { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region 프로그램 시작하기 - Main() /// <summary> /// 프로그램 시작하기 /// </summary> private static void Main() { try { ManagementObjectSearcher searcher; // PC 모델 및 제조업체 정보 searcher = new ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem"); foreach(ManagementObject mo in searcher.Get()) { Console.WriteLine($"PC 모델 : {mo["Model" ]}"); Console.WriteLine($"제조업체 : {mo["Manufacturer"]}"); } // 제조번호(시리얼 넘버) 정보 searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS"); foreach(ManagementObject mo in searcher.Get()) { Console.WriteLine($"제조번호(시리얼 넘버) : {mo["SerialNumber"]}"); } // CPU 정보 searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor"); foreach(ManagementObject mo in searcher.Get()) { Console.WriteLine($"CPU : {mo["Name"]}"); } // 메인보드 정보 searcher = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard"); foreach(ManagementObject mo in searcher.Get()) { Console.WriteLine($"메인보드 제조사 : {mo["Manufacturer"]}"); Console.WriteLine($"메인보드 제품 ID : {mo["Product" ]}"); Console.WriteLine($"메인보드 시리얼 번호 : {mo["SerialNumber"]}"); } // 메모리 용량 정보 searcher = new ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem"); foreach(ManagementObject mo in searcher.Get()) { ulong totalPhysicalMemory = Convert.ToUInt64(mo["TotalPhysicalMemory"]); Console.WriteLine($"메모리 용량 : {(totalPhysicalMemory / (1024 * 1024 * 1024))} GB"); } } catch (Exception exception) { Console.WriteLine("오류 발생 : " + exception.Message); } Console.WriteLine("아무 키나 누르면 종료됩니다..."); Console.ReadKey(false); } #endregion } |
TestProject.zip
■ ApiInformation 클래스의 IsApiContractPresent 정적 메소드를 사용해 Windows.Foundation.UniversalApiContract 버전 8 이상 여부를 구하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 |
using Windows.Foundation.Metadata; if(ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 8)) { // 작업을 처리한다. } |
■ Assembly 클래스의 GetExecutingAssembly 정적 메소드를 사용해 프로그램 버전을 구하는 방법을 보여준다. (UNPACKAGED) ▶ 예제 코드 (C#)
1 2 3 4 5 6 |
using System; using System.Reflection; Version version = Assembly.GetExecutingAssembly().GetName().Version; |
■ Package 클래스의 Id 속성을 사용해 프로그램 버전을 구하는 방법을 보여준다. (PACKAGED) ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 |
using System; using Windows.ApplicationModel; PackageVersion packageVersion = Package.Current.Id.Version; Version version = new(packageVersion.Major, packageVersion.Minor, packageVersion.Build, packageVersion.Revision); |
■ PackageId 클래스의 FullName 속성을 사용해 패키지 ID를 구하는 방법을 보여준다. (PACKAGED) ▶ PackageId 클래스 : FullName 속성을 사용해 패키지 ID 구하기
■ Package 클래스의 Current 정적 속성을 사용해 현재 Package 객체를 구하는 방법을 보여준다. (PACKAGED) ※ OPENAI_API_KEY 환경 변수 값은 .env 파일에 정의한다.
■ Process 클래스의 GetCurrentProcess 정적 메소드를 사용해 애플리케이션의 실행 디렉토리 경로를 구하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System.Diagnostics; #region 애플리케이션 실행 디렉토리 경로 구하기 - GetApplicationExecutableDirectoryPath() /// <summary> /// 애플리케이션 실행 디렉토리 경로 구하기 /// </summary> /// <returns>애플리케이션 실행 디렉토리 경로</returns> private string GetApplicationExecutableDirectoryPath() { string directoryPath = Process.GetCurrentProcess().MainModule.FileName; return directoryPath; } #endregion |
■ 언패키지드(Unpackaged) 모드에서 로컬 설정 값을 저장하거나 구하는 방법을 보여준다. ※ 언패키지드(UnPackaged) 모드에서는 ApplicationData 클래스의 Current 정적 속성을 사용해 로컬 설정을 처리할
■ ApplicationDataContainer 클래스의 Values 속성을 사용해 로컬 설정 값을 저장하거나 구하는 방법을 보여준다. (PACKAGED) ▶ 예제 코드 (C#)
1 2 3 4 5 |
LocalSettingHelper.SaveLocalSettingItem("exampleSetting", "Hello, World!"); string value = LocalSettingHelper.ReadLocalSettingItem("exampleSetting"); |
▶ LocalSettingHelper.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
using Windows.Storage; /// <summary> /// 로컬 설정 헬퍼 /// </summary> public static class LocalSettingHelper { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region Field /// <summary> /// 애플리케이션 데이터 컨테이너 /// </summary> private static ApplicationDataContainer _applicationDataContainer; #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Static #region 생성자 - LocalSettingHelper() /// <summary> /// 생성자 /// </summary> static LocalSettingHelper() { _applicationDataContainer = ApplicationData.Current.LocalSettings; } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Public #region 로컬 설정 항목 저장하기 - SaveLocalSettingItem(key, value) /// <summary> /// 로컬 설정 항목 저장하기 /// </summary> /// <param name="key">키</param> /// <param name="value">값</param> public static void SaveLocalSettingItem(string key, string value) { _applicationDataContainer.Values[key] = value; } #endregion #region 로컬 설정 항목 읽기 - ReadLocalSettingItem(key) /// <summary> /// 로컬 설정 항목 읽기 /// </summary> /// <param name="key">키</param> /// <returns>설정 값</returns> public static string ReadLocalSettingItem(string key) { if(_applicationDataContainer.Values.TryGetValue(key, out object value)) { return value as string; } else { return null; } } #endregion } |
■ ApplicationDataContainer 클래스의 Values 속성을 사용해 로컬 설정 값을 구하는 방법을 보여준다. (PACKAGED) ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using Windows.Storage; ApplicationDataContainer applicationDataContainer = ApplicationData.Current.LocalSettings; if(applicationDataContainer.Values.TryGetValue("exampleSetting", out object value)) { string exampleSettingValue = value as string; // 다음 작업을 처리한다. } else { // exampleSetting 값이 없는 경우 처리한다. } |
■ ApplicationDataContainer 클래스의 Values 속성을 사용해 로컬 설정 값을 추가하는 방법을 보여준다. (PACKAGED) ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 |
using Windows.Storage; ApplicationDataContainer applicationDataContainer = ApplicationData.Current.LocalSettings; applicationDataContainer.Values["exampleSetting"] = "Hello, World!"; |
■ ApplicationData 클래스의 LocalSettings 속성을 사용해 로컬 설정의 ApplicationDataContainer 객체를 구하는 방법을 보여준다. (PACKAGED) ▶ 예제 코드 (C#)
1 2 3 4 5 |
using Windows.Storage; ApplicationDataContainer applicationDataContainer = ApplicationData.Current.LocalSettings; |
■ ApplicationData 클래스의 Current 정적 속성을 사용해 현재 ApplicationData 객체를 구하는 방법을 보여준다. (PACKAGED) ▶ 예제 코드 (C#)
1 2 3 4 5 |
using Windows.Storage; ApplicationData applicationData = ApplicationData.Current; |
■ ApplicationData 클래스의 RoamingSettings 속성을 사용해 로밍 저장소 이용 가능 여부를 구하는 방법을 보여준다. ※ 패지키(Package) 모드에서 true, 언패키지드(Unpackaged) 모드에서 false가 반환된다.
■ 패키지(PACKAGE)/언패키지드(UNPACKAGED) 모드 여부를 구하는 방법을 보여준다. ▶ RuntimeHelper.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
using System.Runtime.InteropServices; using System.Text; namespace TestProject; /// <summary> /// 런타임 헬퍼 /// </summary> public class RuntimeHelper { //////////////////////////////////////////////////////////////////////////////////////////////////// Import ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region 현재 패키지 전체 명칭 구하기 - GetCurrentPackageFullName(packageFullNameLength, packageFullNameStringBuilder) /// <summary> /// 현재 패키지 전체 명칭 구하기 /// </summary> /// <param name="packageFullNameLength">패키지 전체 명칭 길이</param> /// <param name="packageFullNameStringBuilder">패키지 전체 명칭 문자열 빌더</param> /// <returns>처리 결과</returns> [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)] private static extern int GetCurrentPackageFullName(ref int packageFullNameLength, StringBuilder packageFullNameStringBuilder); #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Property ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Public #region MSIX 여부 - IsMSIX /// <summary> /// MSIX 여부 /// </summary> /// <remarks> /// true : Package /// false : Unpackaged /// </remarks> public static bool IsMSIX { get { var length = 0; return GetCurrentPackageFullName(ref length, null) != 15700L; } } #endregion } |
▶ MainPage.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?xml version="1.0" encoding="utf-8"?> <Page x:Class="TestProject.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" FontFamily="나눔고딕코딩" FontSize="16"> <TextBlock Name="textBlock" HorizontalAlignment="Center" VerticalAlignment="Center" /> </Page> |
▶ MainPage.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using Microsoft.UI.Xaml.Controls; namespace TestProject; /// <summary> /// 메인 페이지 /// </summary> public sealed partial class MainPage : Page { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - MainPage() /// <summary> /// 생성자 /// </summary> public MainPage() { InitializeComponent(); this.textBlock.Text = RuntimeHelper.IsMSIX.ToString(); } #endregion } |
TestProject.zip
■ CommunityToolkit.WinUI.DeveloperTools 누겟을 설치하는 방법을 보여준다. 1. Visual Studio를 실행한다. 2. [도구] / [NuGet 패키지 관리자] / [패키지 관리자 콘솔] 메뉴를 실행한다.
■ DesignTimeHelpers 클래스의 IsRunningInLegacyDesignerMode/IsRunningInEnhancedDesignerMode 정적 속성을 사용해 디자인 타임 모드 여부를 구하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 |
using CommunityToolkit.WinUI.Helpers; if(DesignTimeHelpers.IsRunningInLegacyDesignerMode || DesignTimeHelpers.IsRunningInEnhancedDesignerMode) { // 디자인 타임 모드 } |
■ OnDevice 태그 확장의 Default/Desktop/Xbox 속성을 사용해 장치별 텍스트를 설정하는 방법을 보여준다. ※ 비주얼 스튜디오에서 TestProject(Unpackaged) 모드로 빌드한다. ※ TestProject.csproj 프로젝트 파일에서
■ schedule 패키지를 설치하는 방법을 보여준다. 1. 명령 프롬프트를 실행한다. 2. 명령 프롬프트에서 아래 명령을 실행한다. ▶ 실행 명령
1 2 3 |
pip install schedule |
■ load_dotenv 함수를 사용해 .env 파일에서 환경 변수를 로드하는 방법을 보여준다. ▶ .env
1 2 3 4 |
KEY1=VALUE1 KEY2=VALUE2 |
▶ main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import os from dotenv import load_dotenv load_dotenv() # load_dotenv("./.env") print(os.environ["KEY1"]) print(os.environ["KEY2"]) """ VALUE1 VALUE2 """ |
▶ requirements.txt
1 2 3 |
python-dotenv==1.0.1 |
※ pip
■ python-dotenv 패키지를 설치하는 방법을 보여준다. 1. 명령 프롬프트를 실행한다. 2. 명령 프롬프트에서 아래 명령을 실행한다. ▶ 실행 명령
1 2 3 |
pip install python-dotenv |