[C#] WinAPI(Kernel32 dll) 사용하기
2019. 8. 12. 10:29ㆍ언어/C#. JAVA
반응형
Kernel32.dll에서 GetSystemTime / SetSystemTime 호출해서 사용하기
C# / .NET 에서 Native DLL (Unmanaged DLL)에 있는 함수를 호출하는 P/Inovoke(Platform Invoke) 방식을 사용하여
C#에서 WinAPI를 호출하거나 C/C++로 작성된 Native DLL 함수를 호출한다.
1. DllImport 키워드를 사용해서 함수 호출하기
using System.Runtime.InteropServices;
namespace TEST.APIs
{
public static class Kernel32
{
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool GetSystemTime(ref SYSTEMTIME st);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool SetSystemTime(ref SYSTEMTIME st);
}
}
2. Struct SYSTEMTIME
using System.Runtime.InteropServices;
namespace TEST.APIs
{
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEMTIME
{
public short Year;
public short Month;
public short DayOfWeek;
public short Day;
public short Hour;
public short Minute;
public short Second;
public short Milliseconds;
}
}
3. 호출해서 사용하기
//GetSystemTime
SYSTEMTIME getDate = new SYSTEMTIME();
GetSystemTime(ref getDate);
Console.Write("getSystemtime year: {0}", getDate.Year);
//SetSystemTime
public void SetSystemTimeFromDbServer()
{
using (var db = MasterContext.CreateDatabase())
{
var dbDate = db.ScalarQuery("SELECT GETDATE()").ExToDateTime(DateTime.Now).ToUniversalTime();
//
//
//
APIs.SYSTEMTIME setDate = new APIs.SYSTEMTIME();
setDate.Year = (short)dbDate.Year;
setDate.Month = (short)dbDate.Month;
setDate.Day = (short)dbDate.Day;
setDate.Hour = (short)dbDate.Hour;
setDate.Minute = (short)dbDate.Minute;
setDate.Second = (short)dbDate.Second;
//
//
//
APIs.Kernel32.SetSystemTime(ref setDate);
}
}
반응형
'언어 > C#. JAVA' 카테고리의 다른 글
[.NET] IExtenderProvider Interface (feat.ToolTip) (0) | 2021.04.05 |
---|---|
[JAVA] StringTokenizer 사용법 (0) | 2021.01.05 |
[C# 스터디 - Day1] DBHelper 작성하기 (0) | 2020.12.24 |
[C#] txt 파일에 로그 기록하기 (StreamWriter 메서드) (0) | 2020.12.18 |
[C#] 크리티컬 섹션, 뮤텍스, 세마포어 (0) | 2020.06.04 |