'kernel32'에 해당되는 글 20건

Programming/Windows API
Computer의 Network이름을 알아내는 API입니다. 이 API대신 다음 .NET Class Library를 사용하십시오.

이 Code는 Computer의 이름을 반환합니다.

System.Windows.Forms.SystemInformation.ComputerName
▶VB.NET/C#
0 0
Programming/Windows API
GetVersionEx는 운영체제의 Main Version및 Sub Version전, FlatForm정보등을 알아내는 API함수입니다.

이 함수대신 같은 기능을 수행하는 다음의 .NET Classes Library를 사용하십시오.

System.Environment.OSVersion

System.Environment.OSVersion.Platform '플렛폼명
System.Environment.OSVersion.Version.Major '주버전
System.Environment.OSVersion.Version.Minor '부버전
System.Environment.OSVersion.Version.Revision '수정버전
System.Environment.OSVersion.Version.Build '빌드번호

▶VB.NET / C#
0 0
Programming/Windows API
1. API

API는 Application Programming Interface의 약자로 Software개발시에 특정기능을 구현하려고 처음부터 새로 Program을 작성하는 것이 아니라 다른 Library에 의해 이미 구현되어 있는 기능을 개발하고자 하는 Software에 손쉽게 추가할 수 있는 것을 말합니다.

예를 들어 영어사전이나 국어사전 Program을 구현하고자 하는 경우 Naver나 Google등에서 제공하는 API를 끌어다 쓰면 단 몇줄 만으로도 훌륭한 사전 Program을 개발할 수 있게 되는 것입니다.

여기서 Windows API는 System에 대한 각종 정보를 알아내거나 운영체제(OS : 여기서는 Windows)의 특정 기능을 Program안에서 구현하고자 할때마다 편리하고도 간단하게 작업할 수 있는 OS Library입니다.

2. API 구현을 위한 Windows Library종류및 역활

 Library 파일  역활
 Advapi32.dll  Registry및 보안 관련
 Comdlg32.dll  대화상자 관련
 Gdi32.dll  GDI및 Graphic 관련
 Kernel32.dll  Windows Kernel 관련
 Shell32.dll  명령어 해석 관련
 User32.dll  사용자 Interface 관련
 Lz32.dll  압축 관련
 Netapi32.dll  Network 관련
 Winmm.dll  Multimedia 관련
 Winspool.drv  Print spoller 관련

위 File명에서 뒤의 32는 32bit를 의미합니다. 윈도우 3.1이하에서는 16bit였다가 95부터 32bit로 바뀌기 시작해 File명뒤에 32라는 숫자가 붙게 된것입니다.

3. API 선언및 사용

Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Integer, ByVal Y1 As Integer, ByVal X2 As Integer, ByVal Y2 As Integer, ByVal X3 As Integer, ByVal Y3 As Integer) As Integer

<DllImport("user32.dll")> _
Friend Shared Function GetKeyState(ByVal keyCode As Integer) As Short
End Function

Private Declare Sub ReleaseCapture Lib "user32" ()

▶VB.NET 선언

[System.Runtime.InteropServices.DllImport("gdi32.dll")]
private static extern int CreateRoundRectRgn(int X1, int Y1, int X2, int Y2, int X3, int Y3);

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern void ReleaseCapture();

▶C# 선언

VB.net과 C#에서 gid32와 user32 Library를 통해 CreateRoundRectRgn및 ReleaseCapture함수를 호출하고 있습니다. 이때 API선언부분에서 Function(VB.net)과 int(C#)은 해당 함수가 수행되고 난 후 특정값을 반환하다는 것을 의미하고 있으며 반면 Sub(VB.net)와 void(C#)은 반환하는 값이 없음을 의미합니다.

보시는 바와 같이 VB.NET에서나 C#에서나 Import를 쓰게 되면 호출하는 방식은 거의 비슷합니다. 하지만 명확한 구분을 위해서 나중에 API함수를 설명할때는 VB.NET부분에 Lib 형식으로 호출하는 방법을 기술할 것입니다.

예제에서 처럼 API함수를 정의한 후 해당 API의 함수 수행을 위해 각각의 Library File(예제에서는 gid32.dll 및 user32.dll)을 찾아야 하는데 이때 File을 찾는 순서는 다음과 같습니다.

(1) 현재 program이 실행중인 Folder에서 찾는다.
(2) C:\Windows\System32 Folder에서 찾는다.
(3) C:\Windows\System Folder에서 찾는다.
(4) C:\Windows Folder에서 찾는다.

만일 File이 특정위치에 있다는것을 알리려면 다음처럼 경로명까지 포함하여 선언하면 됩니다.

Private Declare Function CreateRoundRectRgn Lib "C:\Windows\System32\gdi32" (ByVal X1 As Integer, ByVal Y1 As Integer, ByVal X2 As Integer, ByVal Y2 As Integer, ByVal X3 As Integer, ByVal Y3 As Integer) As Integer
▶VB.NET

[System.Runtime.InteropServices.DllImport(@"C:\Windows\System32\gdi32.dll")]
private static extern int CreateRoundRectRgn(int X1, int Y1, int X2, int Y2, int X3, int Y3);
▶C#
0 0
Programming/Windows API

Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Char, ByRef Source As Char, ByVal Length As Integer)
▶VB.NET 선언

Dim a As Char = "X"
Dim B As Char

CopyMemory(B, a, 1)
B

▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern void CopyMemory(ref char Destination, ref char Source, int Length);
▶C# 선언

char a = 'X';
char B = ' ';

CopyMemory(ref B, ref a, 1);
B

▶C# 호출

CopyMemory는 특정한 Memory영역을 복사하는 함수입니다.

CopyMemory에서 첫번째 인수는 복사할 메모리영역의 첫주소값을 전달하고 두번째 인수는 복사될 Memory Block의 첫주소값을 전달합니다. 마지막으로 세번째 인수는 복사될 Memory Block에서 얼마만큼(Byte단위)을 복사할지 지정하면 됩니다.

위 예제는 단순한 CHAR형으로 1Byte의 메모리영역을 복사하는 경우를 보여주고 있습니다. 즉 a변수에 해당하는 Memory Block에서 1Byte만큼을 B영역의 메모리 주소에 복사하는 것입니다.

CopyMemory의 첫번째와 두번째 인수의 Data형식은 복사하고자 하는 Memory Block의 Data형식에 따라 다양하게 변할 수 있으며 또한 주소값을 전달받아야 하므로 인자는 ref형식(주소값 전달형식)이 되어야 합니다.

0 0
Programming/Windows API
Declare Function SetComputerName Lib "Kernel32" Alias "SetComputerNameA" (ByVal IpComputerName As String) As Integer
▶C# 선언

If SetComputerName("OpenLab") = 0 Then
    MessageBox.Show("Computer 이름 바꾸기 실패")
Else
    MessageBox.Show("Computer 이름 바꾸기 성공")
End If
▶C# 호출

[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
private static extern int SetComputerName(string IpComputerName);
▶VB.NET 선언

if (SetComputerName("OpenLab") == 0){
    MessageBox.Show("Computer 이름 바꾸기 실패");
}
else{
    MessageBox.Show("Computer 이름 바꾸기 성공");
}
▶VB.NET 호출

SetComputerName는 해당 Computer의 이름을 바꾸지만 바뀐이름은 Computer가 재부팅된 이후부터 적용됩니다.
0 0
Programming/Windows API
Declare Function GetWindowsDirectory Lib "Kernel32" Alias "GetWindowsDirectoryA" (ByVal Name As String, ByVal Size As Integer) As Integer
▶VB.NET 선언

Dim sName As String = Space(10)
GetWindowsDirectory(sName, 11)

sName

▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
private static extern int GetWindowsDirectory(StringBuilder Name, int Size);
▶C# 선언

StringBuilder sName = new StringBuilder(10);
GetWindowsDirectory(sName, 11);

sName

▶C# 호출

GetWindowsDirectory의 첫번째 인수로는 운영체제 설치경로의 문자열이 들어갈 변수를 두번째 인수는 가져올 길이를 지정합니다.
0 0
Programming/Windows API
GetLocaleInfo함수는 현재 Windows에 설정되어 있는 국가/지역에 대한 다양한 정보를 확인할 수 있는 함수입니다.

Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Integer, ByVal LCType As Integer, ByVal lpLCDate As String, ByVal cchData As Integer) As Integer
▶VB.NET 선언

Dim sbuff As String = Space(10)
GetLocaleInfo(locale, type, sbuff, data)
▶VB.NET 호출

[DllImport("kernel32.dll")]
public static extern int GetLocaleInfo(int Locale, int LCType, StringBuilder lpLCDate, int cchData);
▶C# 선언

StringBuilder sbuff = new StringBuilder(10);
GetLocaleInfo(locale, type, str, data);
▶C# 호출

GetLocaleInfo함수의 첫번째 인수는 어떤 국가/지역정보를 기준으로 정보를 조회할지를 지정합니다. 보통 이 인수에는 System설정인가 또는 User설정인가를 지정하는 것으로 해당 상수값은 다음과 같습니다.

 상수  값(VB.NET/C#)16진수  설명
 LOCAL_SYSTEM_DEFAULT  &H800 / 0x800  system 설정을 따름
 LOCAL_USER_DEFAULT  &H400 / 0x400  user 설정을 따름

GetLocaleInfo함수의 두번째 인수는 어떤 정보를 조회할지를 나타냅니다. 이때 사용할 수 있는 상수값은 다음과 같습니다.

 상수  값(16진수)  설명
 LOCALE_ILANGUALE  &H1 / 0x1  언어
 LOCALE_SLANGUAGE  &H2 / 0x2  언어명(설정위치의 언어)
 LOCALE_SENGLANGUAGE  &H1001 / 0x1001  언어명(영어)
 LOCALE_SABBREVLANGNAME  &H3 / 0x3  언어명(짧은이름)
 LOCALE_SNATIVELANGNAME  &H4 / 0x4  언어명(전체이름)
 LOCALE_ICOUNTRY  &H5 / 0x5  국가코드
 LOCALE_SCOUNTRY  &H6 / 0x6  국가명(설정위치의 언어)
 LOCALE_SENGCOUNTRY  &H1002 / 0x1002  국가명(영어)
 LOCALE_SABBREVCTRYNAME  &H7 / 0x7  국가명(짧은이름)
 LOCALE_SNATIVECTRYNAME  &H8 / 0x8  국가명(전체이름)
 LOCALE_IDEFAULTLANGUAGE  &H9 / 0x9  언어명(기본값)
 LOCALE_IDEFAULTCOUNTRY  &HA / 0xA  국가명(기본값)
 LOCALE_IDEFAULTCODEPAGE  &HB / 0xB  코드페이지
 LOCALE_SLIST  &HC / 0xC  리스트구분자
 LOCALE_IMEASURE  &HD / 0xD  IME설정(0:metric/1:US)
 LOCALE_SDECIMAL  &HE / 0xE  소수점 구분
 LOCALE_STHOUSAND  &HF / 0xF  천단위 구분
 LOCALE_SGROUPING  &H10 / 0x10  자리수 그룹핑
 LOCALE_IDIGITS  &H11 / 0x11  통화표시의 소수점 자리수
 LOCALE_ILZERO  &H12 / 0x12  10진법 시작표시
 LOCALE_SNATIVEDIGITS  &H13 / 0x13  0~9의 음수가능 표시
 LOCALE_SCURRENCY  &H14 / 0x14  설정국가통화표시기호
 LOCALE_SINTLSYMBOL  &H15 / 0x15  국제통화표시기호
 LOCALE_SMONDECIMALSEP  &H16 / 0x16  통화소수점이하구분자
 LOCALE_SMOMTHOUSANDSEP  &H17 / 0x17  통화천단위이하구분자
 LOCALE_SMONGROUPING  &H18 / 0x18  통화그룹핑
 LOCALE_ICURRDIGITS  &H19 / 0x19  설정국가소수점자리수
 LOCALE_IINTLCURRDIGITS  &H1A / 0x1A  표준소수점자리수
 LOCALE_ICURRENCY  &H1B / 0x1B  통화표시 양수설정
 LOCALE_INEGCURR  &H1C / 0x1C  통화표시 음수설정

값의 구분은 VB.NET / C# 순입니다.

세번째 인수에는 조회한 정보의 결과값을 담을 문자열변수를 지정하는데 이때 지정한 변수안에 함수의 수행결과가 들어가게 됩니다.

마지막으로 네번째 인수는 버퍼로 지정한 변수의 길이를 지정하는 것입니다. 이 인수에는 문자열변수에 확보된 크기값을 넘겨주도록 합니다.
0 0
Programming/Windows API
GetLocalTime함수는 현재 Windows System상에 설정된 지역에 따른 날짜및 시간을 반환하는 함수입니다.

Declare Sub GetLocalTime Lib "kernel32" Alias "GetLocalTime" (ByRef lpSystemTime As SYSTEMTIME)
▶VB.NET 선언

[DllImport("kernel32")]
public static extern void GetLocalTime(ref SYSTEMTIME lpSystemTime);
▶C# 선언

SYSTEMTIME는 반환되는 날짜및 시간을 저장할 구조체를 의미합니다.

이 구조체는 8개의 Member로 다음과 같이 선언되어야 합니다.

Public Structure SYSTEMTIME
    Public wYear As Short '년도
    Public wMonth As Short '월
    Public wDayOfWeek As Short '요일
    Public wDay As Short '일
    Public wHour As Short '시
    Public wMinute As Short '분
    Public wSecond As Short '초
    Public wMilliseconds As Short '1/100 초
End Structure
▶VB.NET

public struct SYSTEMTIME
{
    public short wYear; //년도
    public short wMonth; //월
    public short wDayOfWeek; //요일
    public short wDay; //일
    public short wHour; //시간
    public short wMinute; //분
    public short wSecond; //초
    public short wMilliseconds; //1/00초
}
▶C#

해당 구조체의 각 Member 이름만 봐도 각각의 Member가 어떤 Data를 담는지 알 수 있을 것입니다.

위 구조체를 토대로 실제 함수를 선언하려면 다음과 같이 기술할 수 있습니다.

Dim sTime As SYSTEMTIME
Call GetLocalTime(sTime)
▶VB.NET 호출

SYSTEMTIME sTime = default(SYSTEMTIME);
GetLocalTime(ref sTime);
▶C# 호출

참고로 시간은 오전9시부터, 요일은 일요일부터 0으로 시작하며 함수를 선언하고 실행시킨뒤에는 해당 구조체의 각 값을 확인함으로서 원하는 결과를 얻을 수 있습니다.

sTime.wDay.ToString() '날짜 확인
sTime.wDay.ToString(); '날짜 확인
0 0
Programming/Windows API
DeleteFile함수는 지정한 File을 삭제하는 함수입니다.

Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Integer
▶VB.NET 선언

[DllImport("kernel32")]
public static extern int DeleteFile(string lpFileName);
▶C# 선언

DeleteFile함수는 삭제할 File의 이름과 경로를 인수로 지정하면 됩니다. 예를 들어 C Dirve의 aaa.txt File을 삭제하려면 함수를 다음과 같이 호출할 수 있습니다.

DeleteFile("C:\aaa.txt")
▶VB.NET 호출

DeleteFile("C:\\aaa.txt");
▶C# 호출

이 함수는 실행에 실패하면 0값을 반환합니다.
0 0
Programming/Windows API
RemoveDirectory함수는 특정 Folder를 삭제합니다.

Declare Function RemoveDirectory Lib "kernel32" Alias "RemoveDirectoryA" (ByVal lpPathName As String) As Integer
▶VB.NET 선언

[DllImport("kernel32")]
public static extern int RemoveDirectory(string lpPathName);
▶C# 선언

함수의 인수로는 삭제할 Folder의 위치만 건네주면 됩니다. 예를 들어 'C:\'의 'AAA' Folder를 삭제하려면 RemoveDirectory 함수를 다음과 같이 선언합니다.

RemoveDirectory("C:\aaa")
▶VB.NET 호출

RemoveDirectory("C:\\aaa");
▶C# 호출

함수가 정상적으로 동작하지 않으면 0을 반환합니다.
0 0
Programming/Windows API
GetSystemDirectory함수는 Windows System Directory경로명을 반환합니다. 이 API대신 다음 .NET Class Library를 사용하십시오.

Imports System.Environment
SystemDirectory
▶VB.NET

using System;
Environment.SystemDirectory
▶C#
0 0
Programming/Windows API
GetSystemInfo함수는 Computer System의 각종 정보를 알아내는 API함수입니다.

Declare Sub GetSystemInfo Lib "kernel32" Alias "GetSystemInfo" (ByRef SystemInfo As _SYSTEMINFO)
Structure _SYSTEMINFO
    Public iOem As Integer
    Public iPgSize As Integer
    Public iApp_min_addr As Integer
    Public iApp_max_addr As Integer
    Public iActive_prs_mak As Integer
    Public iPrs_number As Integer
    Public iPrs_type As Integer
    Public iGranularity As Integer
    Public iRsed As Integer
End Structure

Dim GetInfo As _SYSTEMINFO
Call GetSystemInfo(GetInfo)

GetInfo.iOem.ToString.Trim()
GetInfo.iPgSize.ToString.Trim()
GetInfo.iApp_min_addr.ToString.Trim()
GetInfo.iApp_max_addr.ToString.Trim()
GetInfo.iActive_prs_mak.ToString.Trim()
GetInfo.iPrs_number.ToString.Trim()
GetInfo.iPrs_type.ToString.Trim()
GetInfo.iGranularity.ToString.Trim()
GetInfo.iRsed.ToString.Trim()

▶VB.NET

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern void GetSystemInfo(ref _SYSTEMINFO SystemInfo);

struct _SYSTEMINFO{
    public int iOem;
    public int iPgSize;
    public int iApp_min_addr;
    public int iApp_max_addr;
    public int iActive_prs_mak;
    public int iPrs_number;
    public int iPrs_type;
    public int iGranularity;
    public int iRsed;
};

_SYSTEMINFO GetInfo = default(_SYSTEMINFO);
GetSystemInfo(ref GetInfo);

GetInfo.iOem.ToString().Trim();
GetInfo.iPgSize.ToString().Trim();
GetInfo.iApp_min_addr.ToString().Trim();
GetInfo.iApp_max_addr.ToString().Trim();
GetInfo.iActive_prs_mak.ToString().Trim();
GetInfo.iPrs_number.ToString().Trim();
GetInfo.iPrs_type.ToString().Trim();
GetInfo.iGranularity.ToString().Trim();
GetInfo.iRsed.ToString().Trim();

▶C#

GetSystemInfo함수는 인수로 주어지는 구조체에 값을 저장합니다.
0 0
Programming/Windows API
SetSystemTime함수는 System의 날짜및 시간을 설정하는 함수입니다.

Declare Function SetSystemTime Lib "kernel32" Alias "SetSystemTime" (ByRef lpSystemTime As SYSTEMTIME) As Integer
▶VB.NET 선언

[DllImport("kernel32")]
public static extern int SetSystemTime(ref SYSTEMTIME lpSystemTime);
▶C# 선언

함수의 인수로는 변경할 시간이 저장된 SYSTEMTIME구조체를 기술하면 되는데 이 구조체는 다음과 같이 선언될 수 있습니다.

Public Structure SYSTEMTIME
    Public wYear As Short '년도
    Public wMonth As Short '월
    Public wDayOfWeek As Short '요일
    Public wDay As Short '일
    Public wHour As Short '시
    Public wMinute As Short '분
    Public wSecond As Short '초
    Public wMilliseconds As Short '1/100 초
End Structure
▶VB.NET

public struct SYSTEMTIME
{
    public short wYear; //년도
    public short wMonth; //월
    public short wDayOfWeek; //요일
    public short wDay; //일
    public short wHour; //시
    public short wMinute; //분
    public short wSecond; //초
    public short wMilliseconds; //1/100초
}
▶C#

SYSTEMTIME구조체를 선언하였으면 변경할 시간을 지정해야 합니다. 예를 들어 2009년 8월 18일 오전 10시 50분 30초로 지정하려면 구조체 Member를 다음과 같이 설정합니다.

Dim sTime As SYSTEMTIME
sTime.wYear = 2009
sTime.wMonth = 8
sTime.wDayOfWeek = 1
sTime.wDay = 18
sTime.wHour = 1
sTime.wMinute = 50
sTime.wSecond = 30
sTime.wMilliseconds = 0
▶VB.NET

SYSTEMTIME sTime = default(SYSTEMTIME);
sTime.wYear = 2009;
sTime.wMonth = 8;
sTime.wDayOfWeek = 1;
sTime.wDay = 18;
sTime.wHour = 0;
sTime.wMinute = 50;
sTime.wSecond = 30;
sTime.wMilliseconds = 0;
▶C#

참고로 시는 오전9시부터, 요일은 일요일부터 0으로 시작합니다. 구조체 설정이 완료되면 SetSystemTime함수를 호출하여 설정한 시간으로 변경합니다.

Call SetSystemTime(sTime)
▶VB.NET 호출

SetSystemTime(ref sTime);
▶C# 호출

이 함수는 실행에 실패하면 0을 반환합니다.
0 0
Programming/Windows API
CopyFile함수는 인수로 지정한 File을 복사하는 함수입니다.

Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Boolean) As Integer
▶VB.NET 선언

[DllImport("kernel32")]
public static extern int CopyFile(string lpExistingFileName, string lpNewFileName, bool bFailExists);
▶C# 선언

CopyFile함수의 첫번째 인수는 복사할 File의 위치및 이름을, 두번째 인수에는 복사해 놓을 File의 위치와 이름을 지정합니다.

세번째 인수를 true로 설정하면 File을 복사할때 같은 이름의 File이 존재할 경우 복사를 취소하고 false로 설정하면 같은 이름의 File이 존재하면 해당 File을 덮어 쓰도록 합니다.

위 인수를 토대로 C drive의 aaa.txt File을 D drive의 aaa.txt로 복사하려면 CopyFile함수는 다음과 같이 호출될 수 있습니다.

CopyFile("C:\aaa.txt", "Z:\aaa.txt", True)
▶VB.NET 호출

CopyFile(@"C:\aaa.txt", @"Z:\aaa.txt", true);
▶C# 호출

함수가 제대로 수행되지 못했을 경우에는 0을 반환합니다.
0 0
Programming/Windows API
SetFileAttributes함수는 File의 속성을 설정합니다.

Declare Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesA" (ByVal lpFileName As String, ByVal dwFileAttributes As Integer) As Integer
▶VB.NET 선언

[DllImport("kernel32")]
public static extern int SetFileAttributes(string lpFileName, int dwFileAttributes);
▶C# 선언

SetFileAttributes함수의 첫번째 인수는 속성을 설정할 File이 있는 경로와 이름을 지정하고 두번째 인수에서는 File에 설정할 속성을 지정합니다.

이 속성에 대해서는 다음표를 참고해 주시기 바랍니다.

 상수  값  설명
 FILE_ATTRIBUTE_ARCHIVE  20  일반문서 File
 FILE_ATTRIBUTE_ENCRYPTED  4000  암호화된 File
 FILE_ATTRIBUTE_HIDDEN  2  숨김 File
 FILE_ATTRIBUTE_NORMAL  80  일반 File
 FILE_ATTRIBUTE_OFFLINE  1000  Offline File
 FILE_ATTRIBUTE_READONLY  1  읽기전용 File
 FILE_ATTRIBUTE_NOT_CONTENT_INDEXED  200  Indexing 하지 않음
 FILE_ATTRIBUTE_SYSTEM  4  System File
 FILE_ATTRIBUTE_TEMPORARY  100  임시 File

값은 16진수 기준으로 VB.NET에서는 &H, C#에서는 0x로 구분합니다.

설정하고자 하는 File의 속성을 일반 txt문서 File로 할것이라면 설정 값을 32(16진수 20)로 하면 됩니다. 만일 이에 더해 숨김속성도 같이 설정하려면 34(32(16진수 20) + 2(16진수 2))로 해야 합니다.

예를 들어 C Drive에 있는 aaa.txt File을 일반문서 File과 숨김속성을 같이 설정하려면 SetFileAttributes함수는 다음과 같이 호출할 수 있습니다.

SetFileAttributes("C:\aaa.txt", 34)
▶VB.NET 호출

SetFileAttributes("C:\\aaa.txt", 34);
▶C# 호출

이 함수는 실행에 실패할 경우 0을 반환합니다.
0 0
Programming/Windows API
GetShortPathName함수는 지정된 Full Path에서 Short Path를 가져오는 함수입니다.

Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszIntegerPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Integer) As Integer
▶VB.NET 선언

[DllImport("kernel32")]
public static extern int GetShortPathName(string lpszIntegerPath, StringBuilder lpszShortPath, int cchBuffer);
▶C# 선언

GetShortPathName함수의 첫번째 인수는 Short Path를 가져올 Full Path를 지정하며 이때 가져온 Short Paht를 저장할 변수를 두번째 인수에서 지정합니다. 세번째 인수는 두번째 인수에서 지정한 변수가 몇 Byte까지 저장할 수 있는지를 나타내면 됩니다.

예를 들어 'C:\Program Files\Windows Media Player\setup_wm.exe'의 단축 Path명을 가져오고자 한다면 GetShortPathName함수는 다음과 같이 호출될 수 있습니다.

Dim sPath As String = Space(256)
Dim iPath As Integer = 255

Call GetShortPathName("C:\Program Files\Windows Media Player\setup_wm.exe", sPath, iPath)

▶VB.NET 호출

StringBuilder sPath = new StringBuilder(256);
int iPath = 255;

GetShortPathName(@"C:\Program Files\Windows Media Player\setup_wm.exe", sPath, iPath);

▶C# 호출

이렇게 함수를 호출하고 나면 sPath변수에 단축 Path명이 들어가게 됩니다.

함수가 정상적으로 실행되었을때는 sPath에 저장한 단축 Path의 길이가 반환되고는 정상적으로 실행되지 못하였을 때는 0값 반환합니다.
0 0
Programming/Windows API
GetTempPath함수는 현재 임시 Folder로 사용중인 위치경로를 반환합니다.

Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBuffLength As Integer, ByVal lpBuffer As String) As Integer
▶VB.NET 선언

[DllImport("kernel32")]
public static extern int GetTempPath(int nBuffLength, StringBuilder lpBuffer);
▶C# 선언

GetTempPath 함수의 첫번째 인수로는 임시 Folder가 저장될 크기를 지정하고 두번째 인수에서 임시 Folder의 위치가 저장될 변수를 지정합니다.

Dim sBuffer As String = Space(256)
Dim iBuffer As Integer = 255

Call GetTempPath(iBuffer, sBuffer)

▶VB.NET 호출

StringBuilder sBuffer = new StringBuilder(256);
int iBuffer = 255;

GetTempPath(iBuffer, sBuffer);

▶C# 호출

함수를 수행하고 나면 sBuffer변수에 해당 임시 Folder의 경로가 저장되고 함수는 경로의 크기값을 반환합니다.
0 0
Programming/Windows API
GetDiskFreeSpace함수는 원하는 Disk의 총용량과 사용량을 구하는 함수입니다.

Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, ByRef lpSectorsPerCluster As Integer, ByRef lpBytesPerSector As Integer, ByRef lpNumberOfFreeClusters As Integer, ByRef lpTotalNumberOfClusters As Integer) As Integer
▶VB.NET 선언

[DllImport("kernel32")]
public static extern int GetDiskFreeSpace(string lpRootPathName, ref int lpSectorsPerCluster, ref int lpBytesPerSector, ref int lpNumberOfFreeClusters, ref int lpTotalNumberOfClusters);
▶C# 선언

GetDiskFreeSpace함수의 첫번째 인수는 용량을 확인할 Drive의 Root경로를 지정합니다. 그리고 두번째 인수는 Cluster당 Sector, 세번째 인수는 Sector당 Byte, 네번째 인수는 사용하지 않는 Cluster수 그리고 마지막 다섯번째 인수는 전체 Cluster가 저장될 수 있는 변수를 지정합니다.

Dim iSector_Clustor As Integer = 0
Dim iByte_Sector As Integer = 0
Dim iFree_Clustor As Integer = 0
Dim iTotal_Clustor As Integer = 0
▶VB.NET

int iSector_Clustor = 0;
int iByte_Sector = 0;
int iFree_Clustor = 0;
int iTotal_Clustor = 0;
▶C#

위 인수를 토대로 C Drive의 용량정보를 확인하려면 GetDiskFreeSpace함수는 다음과 같이 호출될 수 있습니다.

GetDiskFreeSpace("C:\", iSector_Clustor, iByte_Sector, iFree_Clustor, iTotal_Clustor)
▶VB.NET 선언

GetDiskFreeSpace("C:\\",ref iSector_Clustor,ref iByte_Sector,ref iFree_Clustor,ref iTotal_Clustor);
▶C# 선언

이제 변수에 전달된 값을 토대로 C Drive에서 사용하지 않는 용량을 확인해 보려면 다음과 같이 계산합니다.

iSpace = iFree_Clustor * iSector_Clustor
iSpace *= iByte_Sector
iSpace / (1024 * 1024)
▶VB.NET

iSpace = iFree_Clustor * iSector_Clustor;
iSpace *= iByte_Sector;
iSpace / (1024 * 1024);
▶C#

위 계산대로라면 iSpace변수에는 현재 C Drive에서 사용가능한 용량을 MB(Mega Byte)단위로 가지게 됩니다. 초기 용량에 해당하는 각 변수의 값은 Byte단위이므로 이것은 Kilo Byte단위로 바꾸려면 1024를 곱해야 하고 Mega Byte단위로 바꾸려면 1024를 한번더 곱해야 하는 것입니다. 단연히 GB단위로 바꾸려면 1024를 다시 한번 더 곱하면 됩니다.

만일 현재 Drive의 총용량을 계산하려면 iFree_Clustor대신 ITotal_Clustor변수로만 바꿔서 다시 계산합니다.

iSpace = iTotal_Clustor * iSector_Clustor
▶VB.NET

iSpace = iFree_Clustor * iSector_Clustor;
▶C#
0 0
Programming/Windows API
GetTickCount함수는 Windows OS가 처음 Booting된 이후 현재까지 작동된 시간을 1/00초단위로 반환합니다.

Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Integer
▶VB.NET 선언

[DllImport("kernel32")]
public static extern int GetTickCount();
▶C# 선언

다음은 MessageBox를 통해 GetTickCount함수의 반환값을 확인하는 예제입니다.

MessageBox.Show(GetTickCount())
▶VB.NET 호출

MessageBox.Show(GetTickCount().ToString());
▶C# 호출
0 0
Programming/Windows API
GetFileAttributes함수는 지정한 File이나 Folder의 속성을 확인하는 함수입니다.

Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Integer
▶VB.NET 선언

[DllImport("kernel32")]
public static extern int GetFileAttributes(string lpFileName);
▶C# 선언

함수의 인수로는 속성을 확인할 File이나 Folder를 지정해 주기만 하면 됩니다. 예를 들어 'C:\WINDOWS'의 'abc.txt' File을 확인해 보려면 함수를 다음과 같이 선언합니다.

GetFileAttributes("C:\WINDOWS\abc.txt")
▶VB.NET 호출

GetFileAttributes("C:\\WINDOWS\\abc.txt")
▶C# 호출

함수가 실행되고 나면 특정값을 반환하게 되는데 이 값을 통해 속성을 구분해야 합니다. 각 값에 따른 속성은 아래 표를 참고하여 주십시오.

 상수  값  설명
 FILE_ATTRIBUTE_ARCHIVE  20  일반문서 File
 FILE_ATTRIBUTE_COMPRESSED  800  압축File
 FILE_ATTRIBUTE_DIRECTORY  10  Folder
 FILE_ATTRIBUTE_ENCRYPTED  4000  암호화된 File
 FILE_ATTRIBUTE_HIDDEN  2  숨김 File
 FILE_ATTRIBUTE_NORMAL  80  일반 File
 FILE_ATTRIBUTE_OFFLINE  1000  Offline File
 FILE_ATTRIBUTE_READONLY  1  읽기전용 File
 FILE_ATTRIBUTE_REPARSE_POINT  400  조합된 재구문분석 위치 File
 FILE_ATTRIBUTE_SPARSE_FILE  200  (설명1) 참고
 FILE_ATTRIBUTE_SYSTEM  4  System File
 FILE_ATTRIBUTE_TEMPORARY  100  임시 File

값은 16진수 기준으로 VB.NET에서는 &H, C#에서는 0x로 구분합니다.

(설명1)
실제 File크기와 Disk할당영역이 다른 File로서 File용량은 크다하더라도 실제적인 Disk 할당 영역은 그보다 훨씬 작은 File을 의미합니다.(Torrent로 File을 내려받을때 이런 현상을 볼 수 있습니다.)

확인하고자 하는 File이 일반 TEXT문서 File이라면 GetFileAttributes함수는 32(16진수 20)값을 반환하며 만일 이 TEXT File이 숨김으로 설정되어 있다면 결과값으로 34(32(16진수 20) + 2(16진수 2))를 반환합니다.
0 0
1
블로그 이미지

클리엘