'Windows API'에 해당되는 글 124건

Programming/Windows API
SHEmptyRecycleBin 함수는 시스템(System)의 휴지통을 비웁니다.

Private Declare Function SHEmptyRecycleBin Lib "shell32.dll" Alias "SHEmptyRecycleBinA" (ByVal hWnd As Int32, ByVal pszRootPath As String, ByVal dwFlags As Int32) As Int32
▶VB.NET 선언

Private Const SHERB_NOCONFIRMATION = &H1
Private Const SHERB_NOPROGRESSUI = &H2
Private Const SHERB_NOSOUND = &H4

SHEmptyRecycleBin(Me.Handle.ToInt32, vbNullString, SHERB_NOCONFIRMATION + SHERB_NOSOUND)
▶VB.NET 호출

SHEmptyRecycleBin을 호출할때는 첫번째 인수로 호출하는 Process의 Handle을 전달합니다. 휴지통을 비울때 관련 메세지를 표시하지 않도록 하려면 &H1값을 전달하며 휴지통에서 대량의 데이터가 존재하는 경우 휴지통을 비우는 진행상태를 표시하지 않으려면 &H2값을 전달합니다. &H4는 휴지통을 비울때 소리가 나지 않도록 합니다.

그런데 실제 SHEmptyRecycleBin함수를 호출하여 휴지통을 비우면 휴지통이 차있는 아이콘모양에서 휴지통이 비어있는 아이콘모양으로 바뀌지 않는걸 볼 수 있습니다. 이런 아이콘의 모양을 즉시 변경하려면 SHUpdateRecycleBinIcon API함수를 호출해야 합니다.

Private Declare Function SHUpdateRecycleBinIcon Lib "shell32.dll" () As Int32

SHUpdateRecycleBinIcon()
▶VB.NET 선언과 호출
0 0
Programming/Windows API
ReleaseCapture함수는 외부의 특정 객체가 Mouse의 움직임을 추적하고 있는 경우 이를 해제 시키고 본래의 상태로 되돌리는 함수입니다.

Declare Function ReleaseCapture Lib "user32" Alias "ReleaseCapture" () As Integer
▶VB.NET 선언

ReleaseCapture()
▶VB.NET 호출

[DllImport("user32.dll")]
public static extern int ReleaseCapture();
▶C# 선언

ReleaseCapture();
▶C# 호출

이 함수는 실행에 실패하는 경우 0을 반환합니다.
0 0
Programming/Windows API
GetCaretBlinkTime함수는 생성된 Caret이 얼마만큼의 속도로 깜빡임이 반복되는지에 대한 속도값을 정수형태로 반환합니다.

Declare Function GetCaretBlinkTime Lib "user32" Alias "GetCaretBlinkTime" () As Integer
▶VB.NET 선언

GetCaretBlinkTime()
▶VB.NET 호출

[DllImport("user32.dll")]
public static extern int GetCaretBlinkTime();
▶C# 선언

GetCaretBlinkTime();
▶C# 호출

속도를 반환하는 값의 단위는 1/1000초이며 만일 0의 값이 반환되면 Caret이 생성되지 않은등의 이유로 실행에 실패한 경우를 의미합니다.
0 0
Programming/Windows API
Declare Function GetSystemMetrics Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex As Integer) As Integer
▶VB.NET 선언

GetSystemMetrics(X)
▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int GetSystemMetrics(int nIndex);
▶C# 선언

GetSystemMetrics(X).ToString();
▶C# 호출

 인수값  반환값
 0  해상도 가로넓이
 1  해상도 세로높이
 2  수직스크롤바에서의 화살표 넒이
 3  수평스크롤바에서의 화살표 높이
 4  화면타이틀바 높이
 5  크기변경이 불가능한 윈도우 프레임 넓이
 6  크기변경이 불가능한 윈도우 프레임 높이
 7  대화상자 프레임 넓이
 8  대화상자 프레임 높이
 9  수직 스크롤바 스크롤박스 높이
 10  수평 스크롤바 스크롤박스 넓이
 11  아이콘 넒이
 12  아이콘 높이
 13  마우스 포인터 넓이
 14  마우스 포인터 높이
 15  메뉴높이
 16  작업 윈도우의 넓이
 17  작업 윈도우이 높이
 18  -
 19  마우스 장착 여부(0 : 없음, 1 : 있음)
 20  수직스크롤바에서의 화살표 높이
 21  수평스크롤바에서의 화살표 넒이
 22  USER.EXE의 디버깅 버전 설치여부
 23  마우스 왼쪽버튼과 오른쪽버튼의 기능바뀜 여부
 24  -
 25  -
 26  -
 27  -
 28  윈도우 최소 넓이
 29  윈도우 최소 높이
 30  타이틀바의 비트맵이미지 넒이
 31  타이틀바의 비트맵이미지 높이
 32  윈도우 프레임 넒이
 33  윈도우 프레임 높이
 34  타이틀바가 있고 크기조절 가능한 윈도우의 최소 넒이
 35  타이틀바가 있고 크기조절 가능한 윈도우의 최소 높이
 36  더블클릭시 사격영역 넒이
 37  더블클릭시 사격영역 높이
 38  아이콘 배열시 사격형 넒이
 39  아이콘 배열시 사격형 높이
 40  팝업메뉴 표시위치(0 : 오른쪽, 1 : 왼쪽)
 41  펜 구동기능 설치여부(0 : 없음, 1 : 있음)
 42  USER.EXE의 더블바이트 문자셋 설치여부
 43  마우스의 버튼 수
 67  윈도우 부팅형태(0:정상, 1:안전모드, 2:안전모드(네트워크))
▶GetSystemMetrics함수의 인수값에 따른 반환값
1 0
Programming/Windows API
MCI(Media Control Interface)는 Computer에 정착된 Multimedia장치를 의미하는 것으로 mciSendString함수는 이 장치에 특정 명령어를 전송하여 구동시키는 함수입니다.

Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommnad As String, ByVal lpstrReturnString As String, ByVal uReturnValue As Integer, ByVal hwndCallback As Integer) As Integer
▶VB.NET 선언

[DllImport("winmm.dll")]
public static extern int mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnValue, int hwndCallback);
▶C# 선언

mciSendString함수의 첫번째 인수로는 작동할 명령어를 전달하고 두번째 인수는 결과정보를 받을 문자열변수를 지정합니다. 만일 정보가 필요하지 않다면 이 부분을 공백으로 처리할 수 있습니다.

세번째 인수는 두번째 인수에서 지정한 변수에 정보가 들어갈 최대 크기를 기술합니다. 두번째 인수가 공백으로 처리된 경우에는 이 인수를 0으로 지정합니다.

마지막 네번째 인수는 함수가 처리완료후 해당 처리를 받을 Callback함수의 Window Handle을 기술합니다. 만일 이 인수가 필요치 않은 경우에는 인수값을 0으로 지정하면 됩니다.

이 인수들을 토대로 mdi File을 열고, 재생시킨 후 닫는 처리를 수행하려면 mciSendString함수는 다음과 같이 호출될 수 있습니다.

mciSendString("OPEN 경로 TYPE SEQUENCER ALIAS MIDFile", "", 0, 0) '경로에 MDI File이 존재하는 위치를 기술
mciSendString("PLAY MDIFile", "", 0, 0) '열린 File을 재생
mciSendString("Close MIDFile", "", 0, 0) '열린 File을 닫음
▶VB.NET 호출

mciSendString(@"OPEN 경로 TYPE SEQUENCER ALIAS MIDFile", "", 0, 0); //경로에 MDI File이 존재하는 위치를 기술
mciSendString("PLAY MDIFile", "", 0, 0); //열린 File을 재생
mciSendString("Close MIDFile", "", 0, 0); //열린 File을 닫음
▶C# 호출

이 함수가 정상적으로 처리되면 0값을 반환합니다.
0 0
Programming/Windows API
GetCaretPos 함수는 Caret이 표시되는 위치값을 반환합니다.

Declare Function GetCaretPos Lib "user32" Alias "GetCaretPos" (ByRef lpPoint As POINTAPI) As Integer
▶VB.NET 선언

Public Structure POINTCRT
        Public x As Integer
        Public y As Integer
End Structure

Dim pt As POINTCRT
GetCaretPos(pt)
pt.x
pt.y

▶VB.NET 호출

[DllImport("user32.dll")]
public static extern int GetCaretPos(ref POINTCRT hwnd);
▶C# 선언

public struct POINTCRT{
            public int x;
            public int y;
};

POINTCRT pt = new POINTCRT();
GetCaretPos(ref pt);
pt.x
pt.y

▶C# 호출

GetCaretPos 함수는 실행에 실패할 경우 0값을 반환합니다.
0 0
Programming/Windows API
HideCaret 함수는 Caret을 보이지 않도록 합니다.

Declare Function HideCaret Lib "user32" (ByVal hwnd As Integer) As Integer
▶VB.NET 선언

HideCaret(handle)
▶VB.NET 호출

[DllImport("user32.dll")]
public static extern int HideCaret(int hwnd);
▶C# 선언

HideCaret(handle);
▶C# 호출

HideCaret함수 호출시 인수로는 Caret이 표시되고 있는 개체의 Handle을 지정합니다.
0 0
Programming/Windows API

ShowCaret함수는 CreateCaret함수에 의해 생성된 Caret를 화면에 표시하도록 합니다.

Declare Function ShowCaret Lib "user32" (ByVal hwnd As Integer) As Integer
▶VB.NET 선언

ShowCaret(Handle)
▶VB.NET 호출

[DllImport("user32.dll")]
public static extern int ShowCaret(int hwnd);
▶C# 선언

ShowCaret(Handle);
▶C# 호출

ShowCaret의 인수로는 Caret이 생성된 Form이나 Control의 Handle값을 넘겨주면 됩니다.

0 0
Programming/Windows API
CreateCaret함수는 새로운 Caret를 생성하는 함수입니다. Caret은 Textbox등에서 깜빡이는 일종의 Keyboard Cursor모양정도로 생각하시면 되겠습니다.

Declare Function CreateCaret Lib "user32" Alias "CreateCaret" (ByVal hwnd As Integer, ByVal hBitmap As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer) As Integer
▶VB.NET 선언

CreateCaret(Handle, Bitmap, 가로크기, 세로크기)
▶VB.NET 호출

[DllImport("user32.dll")]
public static extern int CreateCaret(int hwnd, int hBitmap, int nWidth, int nHeight);
▶C# 선언

CreateCaret(Handle, Bitmap, 가로크기, 세로크기);
▶C# 호출

함수의 인수중 Handle은 Form이나 Control의 Handle값을 의미합니다. CreateCaret함수의 두번째 인수는 Bitmap Graphic을 지정하는 것으로 0이면 흑색, 1이면 회색으로 표시됩니다.

그리고 세번째와 네번째에서는 표시할 Caret의 가로와 세로의 크기를 지정해 줍니다.

참고로 Caret이 생성 되었다고 해서 바로 화면에 표시되지는 않습니다. 직접 눈으로 확인하기 위해서는 ShowCaret함수를 사용해야 합니다.
0 0
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
SetFocus함수는 Window Form또는 특정 Control에 Focus가 위치하도록 합니다.

Declare Function SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Integer) As Integer
▶VB.NET 선언

SetFocus(Handle)
▶VB.NET 호출

[DllImport("user32.dll")]
private static extern int SetFocus(int hwnd);
▶C# 선언

SetFocus((int)Handle);
▶C# 호출

SetFocus함수 호출시 인수로 전달하는 값은 Focus를 줄 Window Form의 handle이나 Control의 handle값을 넘겨 주면 됩니다.

만일 함수의 인수로 정수가 아닌 nothing(VB)이나 null(C#)을 전달하면 화면에 표시되어 있는 모든 Window Form과 Control이 Focus를 일제히 잃게 됩니다. 이렇게 되면 사용자가 임의로 Focus를 주지 않는한 Keyboard입력은 어디에도 전달되지 않습니다.

함수가 수행되면 기본적으로 이전에 Focus를 갖고 있던 Window Form의 Handle을 반환하는데 만일 반환값이 Null이면 함수 실행에 실패한 경우로 판단하면 될것입니다.
0 0
Programming/Windows API
RegisterHotKey함수는 특정 Key의 조합으로 Hotkey를 설정하여 특정 Process나 Software에 설정한 Hotkey를 활용할 수 있도록 합니다.

Declare Function RegisterHotKey Lib "user32" Alias "RegisterHotKey" (ByVal hwnd As Integer, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer
▶VB.NET 선언

RegisterHotKey(handle, id, mod_key, key)
▶VB.NET 호출

[DllImport("user32.dll")]
private static extern int RegisterHotKey(int hwnd, int id, int fsModifiers, int vk);
▶C# 선언

RegisterHotKey(handle, id, mod_key, key);
▶C# 호출

함수를 호출할때 전달하는 인수중 Handle은 설정한 Hotkey가 눌려졌을때 Key의 Message를 받을 Form이나 기타 Object의  Handle값을 전달하면 됩니다.

id는 설정한 Hotkey를 구분할 수 있는 고유의 값으로 임의의 정수값을 설정합니다. 이 값은 설정한 Hotkey를 해제할때 사용됩니다.

mod_key는 설정하고자 하는 Hotkey와 같이 사용될 Key를 지정하는 것으로 다음 값을 사용할 수 있습니다.

 상수명  값(VB.NET / C# / 정수)  Key
 MOD_ALT  &H1 / 0x1 / 1  Alt
 MOD_CONTROL  &H2 / 0x2 / 2  Ctrl
 MOD_SHIFT  &H3 / 0x3 / 3  Shift

마지막으로 vk는 가상키를 의미합니다. 이 Key의 설정은 .NET의 Keys 상수를 이용하여 설정하시면 됩니다.

위 설정값대로 함수를 호출하면 다음과 같이 기술될 수 있습니다.

RegisterHotKey(Me.Handle, 1122, MOD_CONTROL, Keys.A)
▶VB.NET

RegisterHotKey((int)this.Handle, 1122, MOD_CONTROL, (int)Keys.A);
▶C#

함수호출 내용은 Ctrl(Control) Key와 A Key가 같이 눌려졌을때의 Hotkey를 설정하는 예제입니다.

설정한 Hotkey가 눌려지면 Windows는 해당 Hotkey가 눌려 졌다는 특정 Message를 발생시키게 됩니다. 이때 이 함수가 어떤 WinForm에서 작성되는 경우라면 설정한 Hotkey가 눌려졌을때 Hotkey가 눌려졌다는 Event Message를 해당 Program이 운영체제로부터 받아야 할 필요가 있습니다.

Hotkey Message를 Program이 받을 수 있도록 처리하려면 다음과 같이 WndProc함수를 사용하여 Form이 받는 Message를 별도로 처리할 수 있도록 해야 합니다.

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        MyBase.WndProc(m)
End Sub
▶VB.NET

protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);
}
▶C#

Hotkey가 눌려지면 Program은 Windows로 부터 312 정수값을 받게 됩니다. 따라서 위 함수내에 다음과 같이 작성하여 Hotkey가 눌려졌을때 특정 동작을 수행하도록 하면 됩니다.

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
        MyBase.WndProc(m)
        If (m.Msg = CInt(&H312)) Then
            MessageBox.Show("Hotkey가 눌려짐")
        End If
End Sub
▶VB.NET

protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);
          
    if (m.Msg == (int)0x312){
        MessageBox.Show("Hotkey가 눌려짐");
    }
}
▶C#

Hotkey의 설정을 해제하는 방법에 대해서는 다음 글을 참고해 주십시오.

[Develop/Windows API] - UnregisterHotKey - 설정한 Hotkey의 해제
0 0
Programming/Windows API
UnregisterHotKey함수는 RegisterHotKey함수로 설정한 Hotkey를 더이상 사용하지 않도록 해제하는 함수입니다.

Declare Function UnregisterHotKey Lib "user32" Alias "UnregisterHotKey" (ByVal hwnd As Integer, ByVal id As Integer) As Integer
▶VB.NET 선언

UnregisterHotKey(handle, id)
▶VB.NET 호출

[DllImport("user32.dll")]
private static extern int UnregisterHotKey(int hwnd, int id);
▶C# 선언

UnregisterHotKey(handle, id);
▶C# 호출

함수의 인수중 handle은 Hotkey를 해제하고자 하는 Form의 handle을 그리고 id는 Hotkey를 설정할때의 id값을 그대로 전달하면 됩니다.
0 0
Programming/Windows API
SetActiveWindow함수는 인수로 전달한 Handle의 Windows Form을 최상위로 이동시켜 활성화 합니다.

Declare Function SetActiveWindow Lib "user32" Alias "SetActiveWindow" (ByVal hwnd As Integer) As Integer
▶VB.NET 선언

SetActiveWIndow(Handle)
▶VB.NET 호출

[DllImport("user32.dll")]
private static extern int SetActiveWindow(int hwnd);
▶C# 선언

SetActiveWindow((int)handle);
▶C# 호출

SetActiveWindow함수의 인수로는 활성화하고자 하는 Form의 handle을 기술하시면 됩니다.
0 0
Programming/Windows API
OemKeyScan함수는 0 ~ 255까지 OEM Ascii code를 기준으로 해당 값을 Scan code로 변환합니다.

Declare Function OemKeyScan Lib "user32" Alias "OemKeyScan" (ByVal wOemChar As Integer) As Integer
▶VB.NET 선언

OemKeyScan(x)
▶VB.NET 호출

[DllImport("user32.dll")]
private static extern int OemKeyScan(int wOemChar);
▶C# 선언

OemKeyScan(x);
▶C# 호출

x 에 0 ~ 255 까지의 OEM Ascii Code를 기술하면 해당 값을 OEM Scan Code로 변환합니다. OEM Scan Code는 Keyboard가 발생하는 Hardware적인 Code로서 OemKeyScan함수의 반환값에 16진수 FF를 And 연산하면 정수화된 값을 얻을 수 있습니다.

OemKeyScan(65) And &HFF
▶VB.NET

OemKeyScan(65) & 0xFF;
▶C#
0 0
Programming/Windows API
MapViraualKey함수는 Virtual Keycode를 Scan Code로 변환하거나 Scan Code를 Virtual Keycode로 변환하도록 합니다.

Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Integer, ByVal wMapType As Integer) As Integer
▶VB.NET 선언

MapVirtualKey(code, type)
▶VB.NET 호출

[DllImport("user32.dll")]
private static extern int MapVirtualKey(int wCode, int wMapType);
▶C# 선언

MapVirtualKey(code, type);
▶C# 호출

Code의 인수는 Virtual Keycode가 올 수 도 있고 Scan Code가 올 수 도 있으며 Type은 0~3까지의 값을 인수로 가질 수 있습니다.

Type에서 지정한 값에 따라 처리하는 방식은 다음과 같습니다.

   동작
 0  virtual keycode를 scan code로 변환합니다.
 1  scan code를 virtual keycode로 변환합니다.(이때 좌우측 key구분을 하지 않습니다.)
 2  virtual keycode를 문자값(대부분의 경우 ascii code값)으로 변환합니다.
 3  scan code를 virtual keycode로 변환합니다.(이때 좌우측 key를 구분합니다.)

Virtual Keycode는 Keys의 상수로 불러들일 수 있는데 이를 활용하여 Virtual Keycode를 Scan Code로 변환하는 경우 MapVirtualKey함수는 다음과 같이 호출할 수 있습니다.

MapVirtualKey(Keys.A, 0)
▶VB.NET (A Virtual Keycode를 Scan Code로 변환)

MapVirtualKey((int)Keys.A, 0);
▶C# (A Virtual Keycode를 Scan Code로 변환합니다.)

여기서 말하는 Virtual Keycode는 Windows에서 처리하는 Key처리의 단위입니다. 반면 Keyboard입장에서는 Windows와 다른(모든 Keyboard가 Windows OS에서만 작동하는 것은 아니므로) Code방식으로 처리하는데 그것이 바로 Scan Code인 것입니다.

MapVirtualKey함수는 동작에 실패하는 경우 0의 값을 반환힙니다.
0 0
Programming/Windows API
MapVirtualKeyEx는 Virtual Keycode를 Scan Code로 또는 Scan Code를 Virtual Keycode로 상호 변환하여 주는 함수 입니다. 이 함수는 MapVirtualKey함수와는 달리 Keycode값을 변환해 주는 동작방식은 같지만 마지막 인수에 Keyboard배열을 지정하여 해당 Keyboard의 Scan Code및 언어설정에 따라 Code를 변환하여 준다는 차이점이 있습니다.

Declare Function MapVirtualKeyEx Lib "user32" Alias "MapVirtualKeyExA" (ByVal uCode As Integer, ByVal uMapType As Integer, ByVal dwhkl As Integer) As Integer
▶VB.NET 선언

MapVirtualKeyEx(code, type, keyboard)
▶VB.NET 호출

[DllImport("user32.dll")]
private static extern int MapVirtualKeyEx(int uCode, int uMapType, int dwhkl);
▶C# 선언

MapVirtualKeyEx(code, type, keyboard)
▶C# 호출

함수의 인수중 Code와 Type은 MapVirtualKey함수의 호출과 동일합니다. 자세한 내용은 아래 글을 참고하여 주십시오.

[Develop/Windows API] - MapVirtualKey - Virtual Keycode와 Scan Code의 상호 변환

마지막 인수로는 변환하고자 하는 Keyboard의 Layout배열을 지정해 주면 됩니다. 이 값은 GetKeyboardLayout함수를 통해서 알 수 있으며 자세한 내용은 아래 글을 참고하여 주시기 바랍니다.

[Develop/Windows API] - GetKeyboardLayout - Keyboard배열및 언어확인
0 0
Programming/Windows API
GetKeyboardLayoutList는 Windows System에 설치된 모든 Keyboard의 Layout목록을 반환합니다.

Declare Function GetKeyboardLayoutList Lib "user32" Alias "GetKeyboardLayoutList" (ByVal nBuff As Integer, ByRef lpList As Integer) As Integer
▶VB.NET 선언

Dim kbl(255) As Integer

GetKeyboardLayoutList(254, kbl(0))

▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int GetKeyboardLayoutList(int nBuff, ref int lpList);
▶C# 선언

int[] kbl = new int[255];

GetKeyboardLayoutList(254, ref kbl[0])

▶C# 호출

GetKeyboardLayoutList함수를 수행시키면 두번째 인수로 건네진 배열에 첫번째 인수에서 정한 크기만큼의 Layoutlist를 담게됩니다.

따라서 실제 Keyboard의 Layoutlist를 확인해 보려면 배열의 값을 확인해야 합니다.

Hex(Val((kbl(0))))
▶VB.NET 에서의 배열 확인

Convert.ToString(kbl[0], 16);
▶C#에서의 배열 확인

이 외에도 GetKeyboardLayoutList함수는 자체적으로 Layoutlist의 크기를 반환합니다.(첫번째 인수에 0을 주는 경우)

GetKeyboardLayoutList(0, kbl(0))
▶VB.NET List수 반환

GetKeyboardLayoutList(0, ref kbl[0]);
▶C# List수 반환
0 0
Programming/Windows API
GetKeyNameText함수는 인수로 전달한 값에서 Scan Code에 해당하는 Bit와 맞는 key값을 토대로 Key의 명칭을 반환합니다.

Declare Function GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Integer, ByVal lpBuffer As String, ByVal nSize As Integer) As Integer
▶VB.NET 선언

Dim iKey As Integer
Dim sName As String = Space(10)

iKey = 30 * 65536

GetKeyNameText(iKey, sName, 10)
sName

▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int GetKeyNameText(int lParam, StringBuilder lpBuffer, int nSize);
▶C# 선언

int iKey;
StringBuilder sName = new StringBuilder(10);

iKey = 30 * 65536;

GetKeyNameText(iKey, sName, 10);
sName

▶C# 호출

위 예제내용중 30 * 65536에서 30은 찾고자 하는 해당 Key의 Scan Code로서 'A' Key에 해당합니다.

각 Key의 Scan Code가 무엇인지 알아 보시려면 또 다른 API 함수인 MapVirtualKey함수를 사용합니다.

MapVirtualKey(65, 0) * 65536

65 는 'A'의 Ascii Code입니다.

자세한 것은 MapVirtualKey함수를 설명하는 글에서 설명드리도록 하겠습니다.

위에서는 Scan Code와 함께 65536를 곱하여 처리하고 있는데 이는 GetKeyNameText 함수에 전달할 인수의 Bit를 맞추기 위해서 입니다. bit를 구성하고 있는 각 부분 중에서 0~15자리는 사용하지 않는 Bit이며 16~23자리는 해당 Key의 Scan Code가 들어가고 24자리는 확장 Key(Keyboard에 표준 Key가 아닌 별도의 기능을 갖춘 특수한 Key에 대한 부분)에 대한 부분입니다. 마지막 25자리는 왼쪽과 오른쪽에 있는 Ctrl, Alt, Shift Key를 구분할지에 대한 Flag에 해당합니다.

GetKeyNameText 함수는 함수 실행에 실패할 경우 0 값을 반환합니다.
0 0
Programming/Windows API
IsWindowEnabled 함수는 인수로 지정한 handle의 Window나 특정 Control이 Mouse또는 Keyboard의 입력을 받을 수 있는지에 대한 여부를 반환합니다.

Declare Function IsWindowEnabled Lib "user32" Alias "IsWindowEnabled" (ByVal hwnd As Integer) As Integer
▶VB.NET 선언

IsWindowEnabled(Me.Handle)
▶VB.NET 호출

[DllImport("user32.dll")]
private static extern int IsWindowEnabled(IntPtr hwnd);
▶C# 선언

IsWindowEnabled(this.Handle);
▶C# 호출

인수로 전달한 Window나 Control이 입력가능한 상황일때는 0이외의 값을, 값을 입력받지 못하는 상황일때는 0을 반환합니다.

위에서는 함수 호출시 사용한 인수로 Me.Handle 또는 this.Handle를 사용하였습니다. 이는 자기자신 즉, 현재 실행되고 있는 Program의 Windows Handle값을 넘겨주는 것입니다.

이 인수 대신에 컨트롤명.handle이나 다른 Window의 Handle값을 전달하면 해당 Handle의 결과를 반환할 것입니다.
0 0
Programming/Windows API
GetAsyncKeyState() 함수는 함수가 호출될때 함수의 인수에 지정한 Key가 눌려진 상태인지 혹은 눌려진 상태가 아닌지에 대한 값을 반환합니다. 또한 처음 GetAsyncKeyState()함수가 호출된 이 후 다시 GetAsyncKeyState()함수가 호출될때까지 해당 Key가 눌려진 상태에서 단 한번도 떨어지지 않았는가에 대한 여부도 판단할 수 있습니다.

Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Integer) As Integer
▶VB.NET 선언

GetAsyncKeyState(16) '16인수는 Shift Key Code
▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int GetAsyncKeyState(int vKey);
▶C# 선언

GetAsyncKeyState(16) //16인수는 Shift Key Code
▶C# 호출

처음 GetAsyncKeyState(16) 함수를 호출할때 만일 Keyboard에서 Shift(16) Key가 눌려진 상태라면 -32767을 눌려지지 않은 상태라면 0값을 반환합니다.

만일 첫번째 GetAsyncKeyState(16)함수를 호출할때 Shift Key가 눌려져 있었다면 두번째 GetAsyncKeyState(16)함수 호출할때 여전히 Shift Key의 눌려져 있는 상태가 지속되고 있으면 -32768 값을 반환합니다.

GetAsyncKeyState(16)함수 호출시 양수값을 얻고자 하신다면 다음과 같이 0x8000이나 0x8001을 And 연산하면 됩니다. 이는 함수가 해당 Key의 상황에 따라 0x8000 Bit 또는 0x8001 Bit를 0으로 하는가 1로 하는가의 차이에서 기인합니다.

GetAsyncKeyState(16) And &H8000 'Key가 눌려진 상태인가?
GetAsyncKeyState(16) And &H8001 'Key가 여전히 눌려진 상태인가?
▶VB.NET And 연산

GetAsyncKeyState(16) & 0x8000; //Key가 눌려진 상태인가?
GetAsyncKeyState(16) & 0x8001; //Key가 여전히 눌려진 상태인가?
▶C# And 연산

만일 확인해 보고자 하는 Key가 Shift Key가 아닌 다른 Key일 경우 해당 Key에 맞는 Code만 함수의 인수로 건네주면 될것입니다.
0 0
Programming/Windows API
GetKeyState 함수는 인수로 전달된 값에 해당하는 Key가 눌려졌는지의 여부를 Toggle 유형의 값으로 반환합니다.

Declare Function GetKeyState Lib "user32" Alias "GetKeyState" (ByVal keyCode As Integer) As Short
▶VB.NET 선언

GetKeyState(65)
▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern short GetKeyState(int keyCode);
▶C# 선언

GetKeyState(65);
▶C# 호출

위 예제에서 함수를 호출할때 인수로 전달한 65는 'A' Key에 해당하는 Ascii Code값입니다.

결과에서 1이면 눌려졌음을 의미하고 0이면 처음부터 눌려진적이 없거나 1상태에서 다시 한번 눌려졌음을 의미합니다. 만일 확인하고자 하는 key의 Ascii Code값을 모르는 상태라면 다음과 같은 방식으로 함수를 호출할 수 도 있습니다.

GetKeyState(Keys.CapsLock)

Keys.다음에 오는 CapsLock Key에 해당하는 Ascii Code값을 불러와 GetKeyState함수에 인수로 전달하고 있습니다.
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
GetKeyboardState() 함수는 Keyboard의 Key입력이나 Mouse Button의 누름상태를 반환합니다.

Private Declare Function GetKeyboardState Lib "user32" Alias "GetKeyboardState" (ByVal pbKeyState() As Byte) As Integer
▶VB.NET 선언

Private VirKey(256) As Byte
GetKeyboardState(VirKey)

VirKey(X)

▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int GetKeyboardState(byte[] pbKeyState);
▶C# 선언

private byte[] VirKey = new byte[256];
GetKeyboardState(VirKey);

VirKey[X]

▶C# 호출

위 함수호출에서 배열부분에 X는 상태를 알고자 하는 Key의 배열번호를 의미합니다.

배열로 건네진 인수는 Byte배열인데 이 배열이 GetKeyboardState함수의 인수로 건네지게 되면 함수는 각 Byte에 해당하는 Key의 상태를 배열에 담게 되고 다시 이 배열의 값을 확인하게 되면 해당 key의 상태를 알 수 있게 되는 것입니다.(배열을 통하여 모든 Key의 상태를 한꺼번에 확인)

함수를 수행하고 난 후 배열의 값을 확인하면 0, 1, 128, 129의 값이 있을 수 있는데 1의 경우 해당 key가 한번 눌려졌음을 의미하며 이 상태에서 다시 key를 누르면 0으로 바뀌게 됩니다.(Toggle 상태)

128은 0상태일때 해당 Key가 계속눌려진채로 떨어지지 않은 상태를, 129는 1상태일때 해당 Key가 계속눌려진채로 떨어지지 않은 상태를 의미합니다.

Byte는 VB.NET일 경우 '&H01'부터, C#일 경우 '0x000'부터 시작하며 이 값들은 Key의 Windows(또는 기타 다른 운영체제) Ascii Code값과 일치하게 됩니다.

다음은 인수로 정해진 배열의 순서에 따라(Byte값) 자주쓰이는 Key의 종류를 나타낸 표입니다.(건너뛴 부분은 알수없거나 특수한 key의 용도로 사용되는데 자세한 부분은 Microsoft Homepage를 참조하시기 바랍니다.)

 배열  key
 1  mouse 왼쪽 button
 2  mouse 오른쪽 button
 4  mouse 가운데 button
 7  미 정의
 8  삭제
 9  tab
 10  enter
 11  미 정의
 12  미 정의
 13  shift
 14  ctrl
 15  alt
 16  pause
 17  caps lock
 18  IME Kana
 20  IME 한글
 21  미 정의
 22  IME junja
 23  IME final
 24  IME hanja
 25  IME kanji
 26  미 정의
 27  ESC
 28  IME 전환
 32  space bar
 33  page up
 34  page down
 35  end
 36  home
 37  left arrow
 38  up arrow
 39  right arrow
 40  down arrow
 44  print screen
 45  ins
 46  del
 48  0
 49  1
 50  2
 51  3
 52  4
 53  5
 54  6
 55  7
 56  8
 57  9
 58  미 정의
 64  미 정의
 65  A
 66  B
 67  C
 68  D
 69  E
 70  F
 71  G
 72  H
 73  I
 74  J
 75  K
 76  L
 77  M
 78  N
 79  O
 80  P
 81  Q
 82  R
 83  S
 84  T
 85  U
 86  V
 87  W
 88  X
 89  Y
 90  Z
 91  keyboard의 mouse제어시 왼쪽 button
 92  keyboard의 mouse제어시 오른쪽 button
 94  예약
 96  숫자 pad의 0
 97  숫자 pad의 1
 98  숫자 pad의 2
 99  숫자 pad의 3
 100  숫자 pad의 4
 101  숫자 pad의 5
 102  숫자 pad의 6
 103  숫자 pad의 7
 104  숫자 pad의 8
 105  숫자 pad의 9
 106  *
 107  +
 109  -
 111  /
 112  F1
 113  F2
 114  F3
 115  F4
 116  F5
 117  F6
 118  F7
 119  F8
 120  F9
 121  F10
 122  F11
 123  F12
 144  num lock
 145  scroll lock
 160  왼쪽 shift
 161  오른쪽 shift
 162  왼쪽 control
 163  오른쪽 control
 184  예약
 185  예약
 186  ;, :
 191  /, ?
 192  ~, `
 193  예약
 194  예약
 195  예약
 196  예약
 197  예약
 198  예약
 199  예약
 200  예약
 201  예약
 202  예약
 203  예약
 204  예약
 205  예약
 206  예약
 207  예약
 208  예약
 209  예약
 210  예약
 211  예약
 212  예약
 213  예약
 214  예약
 215  예약
 216  미 지정
 217  미 지정
 218  미 지정
 224  예약
 232  미 지정
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

GetFocus는 현재 Focus상태에 있는 Control이나 Form의 handle값을 반환하는 함수 입니다.

Declare Function GetFocus Lib "user32" Alias "GetFocus" () As Integer
▶VB.NET 선언

GetFocus()
▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int GetFocus();
▶C# 선언

GetFocus()
▶C# 호출

참고로 이 함수는 Form이나 Control의 handle method의 반환값과 같습니다.

0 0
Programming/Windows API
Declare Function GetActiveWindow Lib "user32" Alias "GetActiveWindow" () As Integer
▶VB.NET 선언

GetActiveWindow()
▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern int GetActiveWindow();
▶C# 선언

GetActiveWindow()
▶C# 호출

GetActiveWIndow는 현재 함수를 호출하고 있는 Program(Thread)과 관련된 Windows의 handle값을 반환합니다.

만일 관련된 Windows화면이 존재하지 않는 경우에는 null을 반환합니다.
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
SystemParameterInfo API함수는 제어판이나 기타 다른방식등을 통해 설정가능한 Windows OS의 여러가지 환경을 제어할 수 있는 함수입니다.

1. 배경화면 변경

Declare Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoA" (ByVal uAction As Integer, ByVal uParam As Integer, ByVal lpvParam As String, ByVal fuWinIni As Integer) As Integer
▶VB.NET 선언

Declare Auto Function SystemParametersInfo Lib "user32.dll" (ByVal uAction As Integer, ByVal uParam As Integer, ByVal lpvParam As String, ByVal fuWinIni As Integer) As Integer
▶VB.NET 선언(auto의 사용 : Alias 구문을 생략가능)

Private Const SPI_SETDESKWALLPAPER As Integer = 20
Private Const SPIF_UPDATEINIFILE As Integer = 1
Private Const SPIF_SENDWININICHANGE As Integer = 2

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "C:\Documents and Settings\Administrator\My Documents\My Pictures\MANHATTANXP.bmp", SPIF_UPDATEINIFILE Or SPIF_SENDWININICHANGE)

▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);
▶C# 선언

private const int SPI_SETDESKWALLPAPER = 20;
private const int SPIF_UPDATEINIFILE = 1;
private const int SPIF_SENDWININICHANGE = 2;

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, @"C:\Documents and Settings\Administrator\My Documents\My Pictures\MANHATTANXP.bmp", SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);

▶C# 호출

2. 키보드 설정값 가져오기

Declare Function SystemParametersInfo Lib "user32.dll" Alias "SystemParametersInfoA" (ByVal uAction As Integer, ByVal uParam As Integer, ByRef lpvParam As Integer, ByVal fuWinIni As Integer) As Integer
▶VB.NET 선언

Private Const SPI_GETKEYBOARDSPEED = 10
Private Const SPI_GETKEYBOARDDELAY = 22

Dim idelay As Integer
Dim ispeed As Integer

SystemParametersInfo(SPI_GETKEYBOARDDELAY, 0, idelay, 0) SystemParametersInfo(SPI_GETKEYBOARDSPEED, 0, ispeed, 0)

idelay
ispeed

▶VB.NET 호출

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SystemParametersInfo(int uAction, int uParam, ref int lpvParam, int fuWinIni);
▶C# 선언

private const int SPI_GETKEYBOARDSPEED = 10;
private const int SPI_GETKEYBOARDDELAY = 22;

int idelay = 0;
int ispeed = 0;

SystemParametersInfo(SPI_GETKEYBOARDDELAY, 0, ref idelay, 0);
SystemParametersInfo(SPI_GETKEYBOARDSPEED, 0, ref ispeed, 0);

idelay
ispeed

▶C# 호출

SystemParameterInfo함수에서 첫번째 인수는 설정또는 조회하고나 하는 시스템 설정환경의 Type을 건네주며 두번째와 세번째인수에 인수에서 정한 시스템 환경의 종류에 따라 실제 그에 해당하는 값을 건네줍니다. 그리고 세번째 인수로 사용자의 프로파일저장및 바로적용여부를 지정합니다.

첫번째 인수는 첫번째 인수에서 정한 Type에 따라 정확히 해당 Type의 어떤 부분을 설정할 것인지에 대한 인수로서 정수형태의 데이터형식을 건네주게 되는데 세번째 인수는 설정하고자 하는 값에 따라 문자열형(String)이 될 수 도 있고 정수형(Integer)형이 될 수 도 있는등 전달Data형과 전달방식이 달라질 수 있으니 참고하시기 바랍니다.

위 예제는 SPI_SETDESKWALLPAPER(20) 인수를 써서 윈도우의 배경화면을 바꾸기 위한 것과 SPI_GETKEYBOARDSPEED(10) / SPI_GETKEYBOARDDELAY(22) 인수를 통한 Keyboard의 Delay및 속도설정값을 가져옵니다.

배경화면 설정 부분에서 Code를 실제 적용하기 위해서는 Image가 Bmp형식이여야 합니다.(확장자와는 무관하게 저장형식 자체가 Bmp여야하며 Vistal 또는 그 이상의 계열에서는 다른 형식의 Image도 인식이 가능합니다.)

만일 jpg나 기타 다른 형식의 이미지를 Bmp로 바꾸어 Test하고자 하신다면 그림판으로 해당 Image를 불러들여 Bmp형식으로 다시 저장하시거나 아래 코드를 참고하여 변환하는 Program을 직접 만드셔도 됩니다. 

Image.FromFile("원본이미지경로").Save("저장경로", System.Drawing.Imaging.ImageFormat.Bmp)
▶VB.NET

Image.FromFile(@"원본이미지경로").Save(@"저장경로", System.Drawing.Imaging.ImageFormat.Bmp);
▶C#

해당 경로에 지정한 Image를 저장경로의 위치에 Bmp형식으로 저장합니다.

SPI_SETDESKWALLPAPER에서 SET은 대부분 설정을 의미하고 반면 GET으로 시작하는것은 설정이 아닌 조회를 의미합니다. SystemParameterInfo함수에서는 이러한 인수에 따라 설정하거나 조회할 수 있는 환경설정부분이 대략 100여가지 정도 됩니다.

나머지 설정이나 조회부분은 MSDN을 참고하여 주십시오.
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
1 2 3 4 5
블로그 이미지

클리엘