728x90
728x170
▶ ScanCode.cs
namespace TestProject
{
/// <summary>
/// 스캔 코드
/// </summary>
public enum ScanCode : short
{
/// <summary>
/// LBUTTON
/// </summary>
LBUTTON = 0,
/// <summary>
/// RBUTTON
/// </summary>
RBUTTON = 0,
/// <summary>
/// CANCEL
/// </summary>
CANCEL = 70,
/// <summary>
/// MBUTTON
/// </summary>
MBUTTON = 0,
/// <summary>
/// XBUTTON1
/// </summary>
XBUTTON1 = 0,
/// <summary>
/// XBUTTON2
/// </summary>
XBUTTON2 = 0,
/// <summary>
/// BACK
/// </summary>
BACK = 14,
/// <summary>
/// TAB
/// </summary>
TAB = 15,
/// <summary>
/// CLEAR
/// </summary>
CLEAR = 76,
/// <summary>
/// RETURN
/// </summary>
RETURN = 28,
/// <summary>
/// SHIFT
/// </summary>
SHIFT = 42,
/// <summary>
/// CONTROL
/// </summary>
CONTROL = 29,
/// <summary>
/// MENU
/// </summary>
MENU = 56,
/// <summary>
/// PAUSE
/// </summary>
PAUSE = 0,
/// <summary>
/// CAPITAL
/// </summary>
CAPITAL = 58,
/// <summary>
/// KANA
/// </summary>
KANA = 0,
/// <summary>
/// HANGUL
/// </summary>
HANGUL = 0,
/// <summary>
/// JUNJA
/// </summary>
JUNJA = 0,
/// <summary>
/// FINAL
/// </summary>
FINAL = 0,
/// <summary>
/// HANJA
/// </summary>
HANJA = 0,
/// <summary>
/// KANJI
/// </summary>
KANJI = 0,
/// <summary>
/// ESCAPE
/// </summary>
ESCAPE = 1,
/// <summary>
/// CONVERT
/// </summary>
CONVERT = 0,
/// <summary>
/// NONCONVERT
/// </summary>
NONCONVERT = 0,
/// <summary>
/// ACCEPT
/// </summary>
ACCEPT = 0,
/// <summary>
/// MODECHANGE
/// </summary>
MODECHANGE = 0,
/// <summary>
/// SPACE
/// </summary>
SPACE = 57,
/// <summary>
/// PRIOR
/// </summary>
PRIOR = 73,
/// <summary>
/// NEXT
/// </summary>
NEXT = 81,
/// <summary>
/// END
/// </summary>
END = 79,
/// <summary>
/// HOME
/// </summary>
HOME = 71,
/// <summary>
/// LEFT
/// </summary>
LEFT = 75,
/// <summary>
/// UP
/// </summary>
UP = 72,
/// <summary>
/// RIGHT
/// </summary>
RIGHT = 77,
/// <summary>
/// DOWN
/// </summary>
DOWN = 80,
/// <summary>
/// SELECT
/// </summary>
SELECT = 0,
/// <summary>
/// PRINT
/// </summary>
PRINT = 0,
/// <summary>
/// EXECUTE
/// </summary>
EXECUTE = 0,
/// <summary>
/// SNAPSHOT
/// </summary>
SNAPSHOT = 84,
/// <summary>
/// INSERT
/// </summary>
INSERT = 82,
/// <summary>
/// DELETE
/// </summary>
DELETE = 83,
/// <summary>
/// HELP
/// </summary>
HELP = 99,
/// <summary>
/// KEY_0
/// </summary>
KEY_0 = 11,
/// <summary>
/// KEY_1
/// </summary>
KEY_1 = 2,
/// <summary>
/// KEY_2
/// </summary>
KEY_2 = 3,
/// <summary>
/// KEY_3
/// </summary>
KEY_3 = 4,
/// <summary>
/// KEY_4
/// </summary>
KEY_4 = 5,
/// <summary>
/// KEY_5
/// </summary>
KEY_5 = 6,
/// <summary>
/// KEY_6
/// </summary>
KEY_6 = 7,
/// <summary>
/// KEY_7
/// </summary>
KEY_7 = 8,
/// <summary>
/// KEY_8
/// </summary>
KEY_8 = 9,
/// <summary>
/// KEY_9
/// </summary>
KEY_9 = 10,
/// <summary>
/// KEY_A
/// </summary>
KEY_A = 30,
/// <summary>
/// KEY_B
/// </summary>
KEY_B = 48,
/// <summary>
/// KEY_C
/// </summary>
KEY_C = 46,
/// <summary>
/// KEY_D
/// </summary>
KEY_D = 32,
/// <summary>
/// KEY_E
/// </summary>
KEY_E = 18,
/// <summary>
/// KEY_F
/// </summary>
KEY_F = 33,
/// <summary>
/// KEY_G
/// </summary>
KEY_G = 34,
/// <summary>
/// KEY_H
/// </summary>
KEY_H = 35,
/// <summary>
/// KEY_I
/// </summary>
KEY_I = 23,
/// <summary>
/// KEY_J
/// </summary>
KEY_J = 36,
/// <summary>
/// KEY_K
/// </summary>
KEY_K = 37,
/// <summary>
/// KEY_L
/// </summary>
KEY_L = 38,
/// <summary>
/// KEY_M
/// </summary>
KEY_M = 50,
/// <summary>
/// KEY_N
/// </summary>
KEY_N = 49,
/// <summary>
/// KEY_O
/// </summary>
KEY_O = 24,
/// <summary>
/// KEY_P
/// </summary>
KEY_P = 25,
/// <summary>
/// KEY_Q
/// </summary>
KEY_Q = 16,
/// <summary>
/// KEY_R
/// </summary>
KEY_R = 19,
/// <summary>
/// KEY_S
/// </summary>
KEY_S = 31,
/// <summary>
/// KEY_T
/// </summary>
KEY_T = 20,
/// <summary>
/// KEY_U
/// </summary>
KEY_U = 22,
/// <summary>
/// KEY_V
/// </summary>
KEY_V = 47,
/// <summary>
/// KEY_W
/// </summary>
KEY_W = 17,
/// <summary>
/// KEY_X
/// </summary>
KEY_X = 45,
/// <summary>
/// KEY_Y
/// </summary>
KEY_Y = 21,
/// <summary>
/// KEY_Z
/// </summary>
KEY_Z = 44,
/// <summary>
/// LWIN
/// </summary>
LWIN = 91,
/// <summary>
/// RWIN
/// </summary>
RWIN = 92,
/// <summary>
/// APPS
/// </summary>
APPS = 93,
/// <summary>
/// SLEEP
/// </summary>
SLEEP = 95,
/// <summary>
/// NUMPAD0
/// </summary>
NUMPAD0 = 82,
/// <summary>
/// NUMPAD1
/// </summary>
NUMPAD1 = 79,
/// <summary>
/// NUMPAD2
/// </summary>
NUMPAD2 = 80,
/// <summary>
/// NUMPAD3
/// </summary>
NUMPAD3 = 81,
/// <summary>
/// NUMPAD4
/// </summary>
NUMPAD4 = 75,
/// <summary>
/// NUMPAD5
/// </summary>
NUMPAD5 = 76,
/// <summary>
/// NUMPAD6
/// </summary>
NUMPAD6 = 77,
/// <summary>
/// NUMPAD7
/// </summary>
NUMPAD7 = 71,
/// <summary>
/// NUMPAD8
/// </summary>
NUMPAD8 = 72,
/// <summary>
/// NUMPAD9
/// </summary>
NUMPAD9 = 73,
/// <summary>
/// MULTIPLY
/// </summary>
MULTIPLY = 55,
/// <summary>
/// ADD
/// </summary>
ADD = 78,
/// <summary>
/// SEPARATOR
/// </summary>
SEPARATOR = 0,
/// <summary>
/// SUBTRACT
/// </summary>
SUBTRACT = 74,
/// <summary>
/// DECIMAL
/// </summary>
DECIMAL = 83,
/// <summary>
/// DIVIDE
/// </summary>
DIVIDE = 53,
/// <summary>
/// F1
/// </summary>
F1 = 59,
/// <summary>
/// F2
/// </summary>
F2 = 60,
/// <summary>
/// F3
/// </summary>
F3 = 61,
/// <summary>
/// F4
/// </summary>
F4 = 62,
/// <summary>
/// F5
/// </summary>
F5 = 63,
/// <summary>
/// F6
/// </summary>
F6 = 64,
/// <summary>
/// F7
/// </summary>
F7 = 65,
/// <summary>
/// F8
/// </summary>
F8 = 66,
/// <summary>
/// F9
/// </summary>
F9 = 67,
/// <summary>
/// F10
/// </summary>
F10 = 68,
/// <summary>
/// F11
/// </summary>
F11 = 87,
/// <summary>
/// F12
/// </summary>
F12 = 88,
/// <summary>
/// F13
/// </summary>
F13 = 100,
/// <summary>
/// F14
/// </summary>
F14 = 101,
/// <summary>
/// F15
/// </summary>
F15 = 102,
/// <summary>
/// F16
/// </summary>
F16 = 103,
/// <summary>
/// F17
/// </summary>
F17 = 104,
/// <summary>
/// F18
/// </summary>
F18 = 105,
/// <summary>
/// F19
/// </summary>
F19 = 106,
/// <summary>
/// F20
/// </summary>
F20 = 107,
/// <summary>
/// F21
/// </summary>
F21 = 108,
/// <summary>
/// F22
/// </summary>
F22 = 109,
/// <summary>
/// F23
/// </summary>
F23 = 110,
/// <summary>
/// F24
/// </summary>
F24 = 118,
/// <summary>
/// NUMLOCK
/// </summary>
NUMLOCK = 69,
/// <summary>
/// SCROLL
/// </summary>
SCROLL = 70,
/// <summary>
/// LSHIFT
/// </summary>
LSHIFT = 42,
/// <summary>
/// RSHIFT
/// </summary>
RSHIFT = 54,
/// <summary>
/// LCONTROL
/// </summary>
LCONTROL = 29,
/// <summary>
/// RCONTROL
/// </summary>
RCONTROL = 29,
/// <summary>
/// LMENU
/// </summary>
LMENU = 56,
/// <summary>
/// RMENU
/// </summary>
RMENU = 56,
/// <summary>
/// BROWSER_BACK
/// </summary>
BROWSER_BACK = 106,
/// <summary>
/// BROWSER_FORWARD
/// </summary>
BROWSER_FORWARD = 105,
/// <summary>
/// BROWSER_REFRESH
/// </summary>
BROWSER_REFRESH = 103,
/// <summary>
/// BROWSER_STOP
/// </summary>
BROWSER_STOP = 104,
/// <summary>
/// BROWSER_SEARCH
/// </summary>
BROWSER_SEARCH = 101,
/// <summary>
/// BROWSER_FAVORITES
/// </summary>
BROWSER_FAVORITES = 102,
/// <summary>
/// BROWSER_HOME
/// </summary>
BROWSER_HOME = 50,
/// <summary>
/// VOLUME_MUTE
/// </summary>
VOLUME_MUTE = 32,
/// <summary>
/// VOLUME_DOWN
/// </summary>
VOLUME_DOWN = 46,
/// <summary>
/// VOLUME_UP
/// </summary>
VOLUME_UP = 48,
/// <summary>
/// MEDIA_NEXT_TRACK
/// </summary>
MEDIA_NEXT_TRACK = 25,
/// <summary>
/// MEDIA_PREV_TRACK
/// </summary>
MEDIA_PREV_TRACK = 16,
/// <summary>
/// MEDIA_STOP
/// </summary>
MEDIA_STOP = 36,
/// <summary>
/// MEDIA_PLAY_PAUSE
/// </summary>
MEDIA_PLAY_PAUSE = 34,
/// <summary>
/// LAUNCH_MAIL
/// </summary>
LAUNCH_MAIL = 108,
/// <summary>
/// LAUNCH_MEDIA_SELECT
/// </summary>
LAUNCH_MEDIA_SELECT = 109,
/// <summary>
/// LAUNCH_APP1
/// </summary>
LAUNCH_APP1 = 107,
/// <summary>
/// LAUNCH_APP2
/// </summary>
LAUNCH_APP2 = 33,
/// <summary>
/// OEM_1
/// </summary>
OEM_1 = 39,
/// <summary>
/// OEM_PLUS
/// </summary>
OEM_PLUS = 13,
/// <summary>
/// OEM_COMMA
/// </summary>
OEM_COMMA = 51,
/// <summary>
/// OEM_MINUS
/// </summary>
OEM_MINUS = 12,
/// <summary>
/// OEM_PERIOD
/// </summary>
OEM_PERIOD = 52,
/// <summary>
/// OEM_2
/// </summary>
OEM_2 = 53,
/// <summary>
/// OEM_3
/// </summary>
OEM_3 = 41,
/// <summary>
/// OEM_4
/// </summary>
OEM_4 = 26,
/// <summary>
/// OEM_5
/// </summary>
OEM_5 = 43,
/// <summary>
/// OEM_6
/// </summary>
OEM_6 = 27,
/// <summary>
/// OEM_7
/// </summary>
OEM_7 = 40,
/// <summary>
/// OEM_8
/// </summary>
OEM_8 = 0,
/// <summary>
/// OEM_102
/// </summary>
OEM_102 = 86,
/// <summary>
/// PROCESSKEY
/// </summary>
PROCESSKEY = 0,
/// <summary>
/// PACKET
/// </summary>
PACKET = 0,
/// <summary>
/// ATTN
/// </summary>
ATTN = 0,
/// <summary>
/// CRSEL
/// </summary>
CRSEL = 0,
/// <summary>
/// EXSEL
/// </summary>
EXSEL = 0,
/// <summary>
/// EREOF
/// </summary>
EREOF = 93,
/// <summary>
/// PLAY
/// </summary>
PLAY = 0,
/// <summary>
/// ZOOM
/// </summary>
ZOOM = 98,
/// <summary>
/// NONAME
/// </summary>
NONAME = 0,
/// <summary>
/// PA1
/// </summary>
PA1 = 0,
/// <summary>
/// OEM_CLEAR
/// </summary>
OEM_CLEAR = 0
}
}
728x90
▶ VirtualKey.cs
namespace TestProject
{
/// <summary>
/// 가상 키
/// </summary>
public enum VirtualKey : short
{
///<summary>
/// Left mouse button
///</summary>
LBUTTON = 0x01,
///<summary>
/// Right mouse button
///</summary>
RBUTTON = 0x02,
///<summary>
/// Control-break processing
///</summary>
CANCEL = 0x03,
///<summary>
/// Middle mouse button (Three-button mouse)
///</summary>
MBUTTON = 0x04,
///<summary>
/// Windows 2000/XP : X1 mouse button
///</summary>
XBUTTON1 = 0x05,
///<summary>
/// Windows 2000/XP : X2 mouse button
///</summary>
XBUTTON2 = 0x06,
///<summary>
/// BACKSPACE key
///</summary>
BACK = 0x08,
///<summary>
/// TAB key
///</summary>
TAB = 0x09,
///<summary>
/// CLEAR key
///</summary>
CLEAR = 0x0C,
///<summary>
/// ENTER key
///</summary>
RETURN = 0x0D,
///<summary>
/// SHIFT key
///</summary>
SHIFT = 0x10,
///<summary>
/// CTRL key
///</summary>
CONTROL = 0x11,
///<summary>
/// ALT key
///</summary>
MENU = 0x12,
///<summary>
/// PAUSE key
///</summary>
PAUSE = 0x13,
///<summary>
/// CAPS LOCK key
///</summary>
CAPITAL = 0x14,
///<summary>
/// Input Method Editor (IME) Kana mode
///</summary>
KANA = 0x15,
///<summary>
/// IME Hangul mode
///</summary>
HANGUL = 0x15,
///<summary>
/// IME Junja mode
///</summary>
JUNJA = 0x17,
///<summary>
/// IME final mode
///</summary>
FINAL = 0x18,
///<summary>
/// IME Hanja mode
///</summary>
HANJA = 0x19,
///<summary>
/// IME Kanji mode
///</summary>
KANJI = 0x19,
///<summary>
/// ESC key
///</summary>
ESCAPE = 0x1B,
///<summary>
/// IME convert
///</summary>
CONVERT = 0x1C,
///<summary>
/// IME nonconvert
///</summary>
NONCONVERT = 0x1D,
///<summary>
/// IME accept
///</summary>
ACCEPT = 0x1E,
///<summary>
/// IME mode change request
///</summary>
MODECHANGE = 0x1F,
///<summary>
/// SPACEBAR
///</summary>
SPACE = 0x20,
///<summary>
/// PAGE UP key
///</summary>
PRIOR = 0x21,
///<summary>
/// PAGE DOWN key
///</summary>
NEXT = 0x22,
///<summary>
/// END key
///</summary>
END = 0x23,
///<summary>
/// HOME key
///</summary>
HOME = 0x24,
///<summary>
/// LEFT ARROW key
///</summary>
LEFT = 0x25,
///<summary>
/// UP ARROW key
///</summary>
UP = 0x26,
///<summary>
/// RIGHT ARROW key
///</summary>
RIGHT = 0x27,
///<summary>
/// DOWN ARROW key
///</summary>
DOWN = 0x28,
///<summary>
/// SELECT key
///</summary>
SELECT = 0x29,
///<summary>
/// PRINT key
///</summary>
PRINT = 0x2A,
///<summary>
/// EXECUTE key
///</summary>
EXECUTE = 0x2B,
///<summary>
/// PRINT SCREEN key
///</summary>
SNAPSHOT = 0x2C,
///<summary>
/// INS key
///</summary>
INSERT = 0x2D,
///<summary>
/// DEL key
///</summary>
DELETE = 0x2E,
///<summary>
/// HELP key
///</summary>
HELP = 0x2F,
///<summary>
/// 0 key
///</summary>
KEY_0 = 0x30,
///<summary>
/// 1 key
///</summary>
KEY_1 = 0x31,
///<summary>
/// 2 key
///</summary>
KEY_2 = 0x32,
///<summary>
/// 3 key
///</summary>
KEY_3 = 0x33,
///<summary>
/// 4 key
///</summary>
KEY_4 = 0x34,
///<summary>
/// 5 key
///</summary>
KEY_5 = 0x35,
///<summary>
/// 6 key
///</summary>
KEY_6 = 0x36,
///<summary>
/// 7 key
///</summary>
KEY_7 = 0x37,
///<summary>
/// 8 key
///</summary>
KEY_8 = 0x38,
///<summary>
/// 9 key
///</summary>
KEY_9 = 0x39,
///<summary>
/// A key
///</summary>
KEY_A = 0x41,
///<summary>
/// B key
///</summary>
KEY_B = 0x42,
///<summary>
/// C key
///</summary>
KEY_C = 0x43,
///<summary>
/// D key
///</summary>
KEY_D = 0x44,
///<summary>
/// E key
///</summary>
KEY_E = 0x45,
///<summary>
/// F key
///</summary>
KEY_F = 0x46,
///<summary>
/// G key
///</summary>
KEY_G = 0x47,
///<summary>
/// H key
///</summary>
KEY_H = 0x48,
///<summary>
/// I key
///</summary>
KEY_I = 0x49,
///<summary>
/// J key
///</summary>
KEY_J = 0x4A,
///<summary>
/// K key
///</summary>
KEY_K = 0x4B,
///<summary>
/// L key
///</summary>
KEY_L = 0x4C,
///<summary>
/// M key
///</summary>
KEY_M = 0x4D,
///<summary>
/// N key
///</summary>
KEY_N = 0x4E,
///<summary>
/// O key
///</summary>
KEY_O = 0x4F,
///<summary>
/// P key
///</summary>
KEY_P = 0x50,
///<summary>
/// Q key
///</summary>
KEY_Q = 0x51,
///<summary>
/// R key
///</summary>
KEY_R = 0x52,
///<summary>
/// S key
///</summary>
KEY_S = 0x53,
///<summary>
/// T key
///</summary>
KEY_T = 0x54,
///<summary>
/// U key
///</summary>
KEY_U = 0x55,
///<summary>
/// V key
///</summary>
KEY_V = 0x56,
///<summary>
/// W key
///</summary>
KEY_W = 0x57,
///<summary>
/// X key
///</summary>
KEY_X = 0x58,
///<summary>
/// Y key
///</summary>
KEY_Y = 0x59,
///<summary>
/// Z key
///</summary>
KEY_Z = 0x5A,
///<summary>
/// Left Windows key (Microsoft Natural keyboard)
///</summary>
LWIN = 0x5B,
///<summary>
/// Right Windows key (Natural keyboard)
///</summary>
RWIN = 0x5C,
///<summary>
/// Applications key (Natural keyboard)
///</summary>
APPS = 0x5D,
///<summary>
/// Computer Sleep key
///</summary>
SLEEP = 0x5F,
///<summary>
/// Numeric keypad 0 key
///</summary>
NUMPAD0 = 0x60,
///<summary>
/// Numeric keypad 1 key
///</summary>
NUMPAD1 = 0x61,
///<summary>
/// Numeric keypad 2 key
///</summary>
NUMPAD2 = 0x62,
///<summary>
/// Numeric keypad 3 key
///</summary>
NUMPAD3 = 0x63,
///<summary>
/// Numeric keypad 4 key
///</summary>
NUMPAD4 = 0x64,
///<summary>
/// Numeric keypad 5 key
///</summary>
NUMPAD5 = 0x65,
///<summary>
/// Numeric keypad 6 key
///</summary>
NUMPAD6 = 0x66,
///<summary>
/// Numeric keypad 7 key
///</summary>
NUMPAD7 = 0x67,
///<summary>
/// Numeric keypad 8 key
///</summary>
NUMPAD8 = 0x68,
///<summary>
/// Numeric keypad 9 key
///</summary>
NUMPAD9 = 0x69,
///<summary>
/// Multiply key
///</summary>
MULTIPLY = 0x6A,
///<summary>
/// Add key
///</summary>
ADD = 0x6B,
///<summary>
/// Separator key
///</summary>
SEPARATOR = 0x6C,
///<summary>
/// Subtract key
///</summary>
SUBTRACT = 0x6D,
///<summary>
/// Decimal key
///</summary>
DECIMAL = 0x6E,
///<summary>
/// Divide key
///</summary>
DIVIDE = 0x6F,
///<summary>
/// F1 key
///</summary>
F1 = 0x70,
///<summary>
/// F2 key
///</summary>
F2 = 0x71,
///<summary>
/// F3 key
///</summary>
F3 = 0x72,
///<summary>
/// F4 key
///</summary>
F4 = 0x73,
///<summary>
/// F5 key
///</summary>
F5 = 0x74,
///<summary>
/// F6 key
///</summary>
F6 = 0x75,
///<summary>
/// F7 key
///</summary>
F7 = 0x76,
///<summary>
/// F8 key
///</summary>
F8 = 0x77,
///<summary>
/// F9 key
///</summary>
F9 = 0x78,
///<summary>
/// F10 key
///</summary>
F10 = 0x79,
///<summary>
/// F11 key
///</summary>
F11 = 0x7A,
///<summary>
/// F12 key
///</summary>
F12 = 0x7B,
///<summary>
/// F13 key
///</summary>
F13 = 0x7C,
///<summary>
/// F14 key
///</summary>
F14 = 0x7D,
///<summary>
/// F15 key
///</summary>
F15 = 0x7E,
///<summary>
/// F16 key
///</summary>
F16 = 0x7F,
///<summary>
/// F17 key
///</summary>
F17 = 0x80,
///<summary>
/// F18 key
///</summary>
F18 = 0x81,
///<summary>
/// F19 key
///</summary>
F19 = 0x82,
///<summary>
/// F20 key
///</summary>
F20 = 0x83,
///<summary>
/// F21 key
///</summary>
F21 = 0x84,
///<summary>
/// F22 key, (PPC only) Key used to lock device.
///</summary>
F22 = 0x85,
///<summary>
/// F23 key
///</summary>
F23 = 0x86,
///<summary>
/// F24 key
///</summary>
F24 = 0x87,
///<summary>
/// NUM LOCK key
///</summary>
NUMLOCK = 0x90,
///<summary>
/// SCROLL LOCK key
///</summary>
SCROLL = 0x91,
///<summary>
/// Left SHIFT key
///</summary>
LSHIFT = 0xA0,
///<summary>
/// Right SHIFT key
///</summary>
RSHIFT = 0xA1,
///<summary>
/// Left CONTROL key
///</summary>
LCONTROL = 0xA2,
///<summary>
/// Right CONTROL key
///</summary>
RCONTROL = 0xA3,
///<summary>
/// Left MENU key
///</summary>
LMENU = 0xA4,
///<summary>
/// Right MENU key
///</summary>
RMENU = 0xA5,
///<summary>
/// Windows 2000/XP : Browser Back key
///</summary>
BROWSER_BACK = 0xA6,
///<summary>
/// Windows 2000/XP : Browser Forward key
///</summary>
BROWSER_FORWARD = 0xA7,
///<summary>
/// Windows 2000/XP : Browser Refresh key
///</summary>
BROWSER_REFRESH = 0xA8,
///<summary>
/// Windows 2000/XP : Browser Stop key
///</summary>
BROWSER_STOP = 0xA9,
///<summary>
/// Windows 2000/XP : Browser Search key
///</summary>
BROWSER_SEARCH = 0xAA,
///<summary>
/// Windows 2000/XP : Browser Favorites key
///</summary>
BROWSER_FAVORITES = 0xAB,
///<summary>
/// Windows 2000/XP : Browser Start and Home key
///</summary>
BROWSER_HOME = 0xAC,
///<summary>
/// Windows 2000/XP : Volume Mute key
///</summary>
VOLUME_MUTE = 0xAD,
///<summary>
/// Windows 2000/XP : Volume Down key
///</summary>
VOLUME_DOWN = 0xAE,
///<summary>
/// Windows 2000/XP : Volume Up key
///</summary>
VOLUME_UP = 0xAF,
///<summary>
/// Windows 2000/XP : Next Track key
///</summary>
MEDIA_NEXT_TRACK = 0xB0,
///<summary>
/// Windows 2000/XP : Previous Track key
///</summary>
MEDIA_PREV_TRACK = 0xB1,
///<summary>
/// Windows 2000/XP : Stop Media key
///</summary>
MEDIA_STOP = 0xB2,
///<summary>
/// Windows 2000/XP : Play/Pause Media key
///</summary>
MEDIA_PLAY_PAUSE = 0xB3,
///<summary>
/// Windows 2000/XP : Start Mail key
///</summary>
LAUNCH_MAIL = 0xB4,
///<summary>
/// Windows 2000/XP : Select Media key
///</summary>
LAUNCH_MEDIA_SELECT = 0xB5,
///<summary>
/// Windows 2000/XP : Start Application 1 key
///</summary>
LAUNCH_APP1 = 0xB6,
///<summary>
/// Windows 2000/XP : Start Application 2 key
///</summary>
LAUNCH_APP2 = 0xB7,
///<summary>
/// Used for miscellaneous characters; it can vary by keyboard.
///</summary>
OEM_1 = 0xBA,
///<summary>
/// Windows 2000/XP : For any country/region, the '+' key
///</summary>
OEM_PLUS = 0xBB,
///<summary>
/// Windows 2000/XP : For any country/region, the ',' key
///</summary>
OEM_COMMA = 0xBC,
///<summary>
/// Windows 2000/XP : For any country/region, the '-' key
///</summary>
OEM_MINUS = 0xBD,
///<summary>
/// Windows 2000/XP : For any country/region, the '.' key
///</summary>
OEM_PERIOD = 0xBE,
///<summary>
/// Used for miscellaneous characters; it can vary by keyboard.
///</summary>
OEM_2 = 0xBF,
///<summary>
/// Used for miscellaneous characters; it can vary by keyboard.
///</summary>
OEM_3 = 0xC0,
///<summary>
/// Used for miscellaneous characters; it can vary by keyboard.
///</summary>
OEM_4 = 0xDB,
///<summary>
/// Used for miscellaneous characters; it can vary by keyboard.
///</summary>
OEM_5 = 0xDC,
///<summary>
/// Used for miscellaneous characters; it can vary by keyboard.
///</summary>
OEM_6 = 0xDD,
///<summary>
/// Used for miscellaneous characters; it can vary by keyboard.
///</summary>
OEM_7 = 0xDE,
///<summary>
/// Used for miscellaneous characters; it can vary by keyboard.
///</summary>
OEM_8 = 0xDF,
///<summary>
/// Windows 2000/XP : Either the angle bracket key or the backslash key on the RT 102-key keyboard
///</summary>
OEM_102 = 0xE2,
///<summary>
/// Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP : IME PROCESS key
///</summary>
PROCESSKEY = 0xE5,
///<summary>
/// Windows 2000/XP : Used to pass Unicode characters as if they were keystrokes.
/// The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods.
/// For more information,
/// see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP
///</summary>
PACKET = 0xE7,
///<summary>
/// Attn key
///</summary>
ATTN = 0xF6,
///<summary>
/// CrSel key
///</summary>
CRSEL = 0xF7,
///<summary>
/// ExSel key
///</summary>
EXSEL = 0xF8,
///<summary>
/// Erase EOF key
///</summary>
EREOF = 0xF9,
///<summary>
/// Play key
///</summary>
PLAY = 0xFA,
///<summary>
/// Zoom key
///</summary>
ZOOM = 0xFB,
///<summary>
/// Reserved
///</summary>
NONAME = 0xFC,
///<summary>
/// PA1 key
///</summary>
PA1 = 0xFD,
///<summary>
/// Clear key
///</summary>
OEM_CLEAR = 0xFE
}
}
300x250
▶ KeyEventFlag.cs
using System;
namespace TestProject
{
/// <summary>
/// 키 이벤트 플래그
/// </summary>
[Flags]
public enum KeyEventFlag : uint
{
/// <summary>
/// 확장 키
/// </summary>
ExtendedKey = 0x0001,
/// <summary>
/// 키 UP
/// </summary>
KeyUp = 0x0002,
/// <summary>
/// 스캔 코드
/// </summary>
ScanCode = 0x0008,
/// <summary>
/// 유니코드
/// </summary>
Unicode = 0x0004
}
}
▶ KeyboardInput.cs
using System;
using System.Runtime.InteropServices;
namespace TestProject
{
[StructLayout(LayoutKind.Sequential)]
public struct KeyboardInput
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 가상 키
/// </summary>
public VirtualKey VirtualKey;
/// <summary>
/// 스캔 코드
/// </summary>
public short ScanCode;
/// <summary>
/// 플래그
/// </summary>
public KeyEventFlag Flag;
/// <summary>
/// 시간
/// </summary>
public int Time;
/// <summary>
/// 부가 정보
/// </summary>
public UIntPtr ExtraInformation;
#endregion
}
}
▶ MouseEventFlag.cs
using System;
namespace TestProject
{
/// <summary>
/// 마우스 이벤트 플래그
/// </summary>
[Flags]
public enum MouseEventFlag : uint
{
/// <summary>
/// DX 및 DY 매개 변수 절대 좌표
/// </summary>
Absolute = 0x8000,
/// <summary>
/// 휠 기울기 여부
/// </summary>
HWheel = 0x01000,
/// <summary>
/// 이동
/// </summary>
Move = 0x0001,
/// <summary>
/// Move No Coalesce
/// </summary>
MoveNoCoalesce = 0x2000,
/// <summary>
/// 왼쪽 버튼 DOWN
/// </summary>
LeftDown = 0x0002,
/// <summary>
/// 왼쪽 버튼 UP
/// </summary>
LeftUp = 0x0004,
/// <summary>
/// 오른쪽 버튼 DOWN
/// </summary>
RightDown = 0x0008,
/// <summary>
/// 오른쪽 버튼 UP
/// </summary>
RightUp = 0x0010,
/// <summary>
/// 가운데 버튼 DOWN
/// </summary>
MiddleDown = 0x0020,
/// <summary>
/// 가운데 버튼 UP
/// </summary>
MiddleUp = 0x0040,
/// <summary>
/// 가상 데스크
/// </summary>
VirtualDesk = 0x4000,
/// <summary>
/// 마우스 휠
/// </summary>
Wheel = 0x0800,
/// <summary>
/// X 버튼 DOWN
/// </summary>
XDown = 0x0080,
/// <summary>
/// X 버튼 UP
/// </summary>
XUp = 0x0100
}
}
▶ MouseInput.cs
using System;
using System.Runtime.InteropServices;
namespace TestProject
{
/// <summary>
/// 마우스 입력
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct MouseInput
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 델타 X
/// </summary>
public int DeltaX;
/// <summary>
/// 델타 Y
/// </summary>
public int DeltaY;
/// <summary>
/// 마우스 데이터
/// </summary>
public int MouseData;
/// <summary>
/// 플래그
/// </summary>
public MouseEventFlag Flag;
/// <summary>
/// 시간
/// </summary>
public uint Time;
/// <summary>
/// 부가 정보
/// </summary>
public UIntPtr ExtraInformation;
#endregion
}
}
▶ HardwareInput.cs
using System.Runtime.InteropServices;
namespace TestProject
{
/// <summary>
/// 하드웨어 입력
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct HardwareInput
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 메시지
/// </summary>
public int Message;
/// <summary>
/// WORD 매개 변수 LOW
/// </summary>
public short WordParameterLow;
/// <summary>
/// WORD 매개 변수 HIGH
/// </summary>
public short WordParameterHigh;
#endregion
}
}
▶ InputUnion.cs
using System.Runtime.InteropServices;
namespace TestProject
{
/// <summary>
/// 입력 유니온
/// </summary>
[StructLayout(LayoutKind.Explicit)]
public struct InputUnion
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 마우스 입력
/// </summary>
[FieldOffset(0)]
public MouseInput MouseInput;
/// <summary>
/// 키보드 입력
/// </summary>
[FieldOffset(0)]
public KeyboardInput KeyboardInput;
/// <summary>
/// 하드웨어 입력
/// </summary>
[FieldOffset(0)]
public HardwareInput HardwareInput;
#endregion
}
}
▶ InputType.cs
namespace TestProject
{
/// <summary>
/// 입력 타입
/// </summary>
public enum InputType : uint
{
/// <summary>
/// 마우스
/// </summary>
Mouse = 0,
/// <summary>
/// 키보드
/// </summary>
Keyboard = 1,
/// <summary>
/// 하드웨어
/// </summary>
Hardware = 2,
}
}
▶ Input.cs
using System.Runtime.InteropServices;
namespace TestProject
{
/// <summary>
/// 입력
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct Input
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Public
#region Field
/// <summary>
/// 입력 타입
/// </summary>
public InputType InputType;
/// <summary>
/// 입력 유니온
/// </summary>
public InputUnion InputUnion;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 크기 - Size
/// <summary>
/// 크기
/// </summary>
public static int Size
{
get
{
return Marshal.SizeOf(typeof(Input));
}
}
#endregion
}
}
▶ WIN32Helper.cs
using System;
using System.Runtime.InteropServices;
namespace TestProject
{
/// <summary>
/// WIN32 헬퍼
/// </summary>
public static class WIN32Helper
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 입력 보내기 - SendInput(inputArrayLength, inputArray, size)
/// <summary>
/// 입력 보내기
/// </summary>
/// <param name="inputArrayLength">입력 배열 길이</param>
/// <param name="inputArray">입력 배열</param>
/// <param name="size">크기</param>
/// <returns>처리 결과</returns>
[DllImport("user32.dll", SetLastError = true)]
public static extern uint SendInput
(
uint inputArrayLength,
[MarshalAs(UnmanagedType.LPArray), In] Input[] inputArray,
int size
);
#endregion
#region 메시지 부가 정보 구하기 - GetMessageExtraInfo()
/// <summary>
/// 메시지 부가 정보 구하기
/// </summary>
/// <returns>메시지 부가 정보 핸들</returns>
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern UIntPtr GetMessageExtraInfo();
#endregion
#region 윈도우 찾기 - FindWindow(className, windowName)
/// <summary>
/// 윈도우 찾기
/// </summary>
/// <param name="className">클래스명</param>
/// <param name="windowName">윈도우명</param>
/// <returns>윈도우 핸들</returns>
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr FindWindow(string className, string windowName);
#endregion
#region 윈도우 찾기 (확장) - FindWindowEx(parentWindowHandle, childAfterWindowHandle, className, windowText)
/// <summary>
/// 윈도우 찾기 (확장)
/// </summary>
/// <param name="parentWindowHandle">부모 윈도우 핸들</param>
/// <param name="childAfterWindowHandle">찾기 이후 자식 윈도우 핸들</param>
/// <param name="className">클래스명</param>
/// <param name="windowText">윈도우 텍스트</param>
/// <returns>윈도우 핸들</returns>
[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx
(
IntPtr parentWindowHandle,
IntPtr childAfterWindowHandle,
string className,
string windowText
);
#endregion
#region 전경 윈도우 설정하기 - SetForegroundWindow(windowHandle)
/// <summary>
/// 전경 윈도우 설정하기
/// </summary>
/// <param name="windowHandle">윈도우 핸들</param>
/// <returns>처리 결과</returns>
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetForegroundWindow(IntPtr windowHandle);
#endregion
#region 활성 윈도우 구하기 - GetActiveWindow()
/// <summary>
/// 활성 윈도우 구하기
/// </summary>
/// <returns>활성 윈도우 핸들</returns>
[DllImport("user32.dll")]
public static extern IntPtr GetActiveWindow();
#endregion
}
}
▶ MessageHelper.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace TestProject
{
/// <summary>
/// 메시지 헬퍼
/// </summary>
public static class MessageHelper
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 문자열 보내기 - SendString(windowHandle, message)
/// <summary>
/// 문자열 보내기
/// </summary>
/// <param name="windowHandle">윈도우 핸들</param>
/// <param name="message">메시지</param>
/// <returns>처리 결과</returns>
public static bool SendString(IntPtr windowHandle, string message)
{
if(string.IsNullOrEmpty(message))
{
return false;
}
WIN32Helper.SetForegroundWindow(windowHandle);
List<Input> inputList = new List<Input>(message.Length);
char? previousCharacter = null;
for(int i = 0; i < message.Length; i++)
{
char currentCharacter = message[i];
if(currentCharacter == previousCharacter)
{
Input dummyInput = new Input();
dummyInput.InputType = InputType.Keyboard;
dummyInput.InputUnion.KeyboardInput.Flag = KeyEventFlag.Unicode;
dummyInput.InputUnion.KeyboardInput.VirtualKey = 0;
unchecked
{
dummyInput.InputUnion.KeyboardInput.ScanCode = (short)0;
}
inputList.Add(dummyInput);
}
Input input = new Input();
input.InputType = InputType.Keyboard;
input.InputUnion.KeyboardInput.Flag = KeyEventFlag.Unicode;
input.InputUnion.KeyboardInput.VirtualKey = 0;
unchecked
{
input.InputUnion.KeyboardInput.ScanCode = (short)message[i];
}
inputList.Add(input);
previousCharacter = currentCharacter;
}
Debug.WriteLine($"MessageHelper.SendString({windowHandle}, {message})");
uint result = WIN32Helper.SendInput((uint)inputList.Count, inputList.ToArray(), Input.Size);
if(result <= 0)
{
int errorCode = Marshal.GetLastWin32Error();
Debug.WriteLine
(
string.Format
(
" Messaging.SendCharacter({0}, {1}) : Error {2} : {3}",
windowHandle,
message,
errorCode,
new Win32Exception(errorCode).Message
)
);
}
return result > 0;
}
#endregion
#region 문자열 보내기 - SendString(processName, message)
/// <summary>
/// 문자열 보내기
/// </summary>
/// <param name="processName">프로세스명</param>
/// <param name="message">메시지</param>
/// <returns>처리 결과</returns>
public static bool SendString(string processName, string message)
{
if(string.IsNullOrEmpty(message))
{
return false;
}
IntPtr windowHandle;
if(string.IsNullOrEmpty(processName))
{
windowHandle = WIN32Helper.GetActiveWindow();
}
else
{
windowHandle = WIN32Helper.FindWindow(processName, null);
}
if(windowHandle == IntPtr.Zero)
{
return false;
}
bool anySent = false;
anySent = SendString(windowHandle, message);
return anySent;
}
#endregion
#region 문자열 보내기 - SendString(message)
/// <summary>
/// 문자열 보내기
/// </summary>
/// <param name="message">메시지</param>
/// <returns>처리 결과</returns>
public static bool SendString(string message)
{
return SendString(null, message);
}
#endregion
}
}
▶ Program.cs
using System;
using System.Diagnostics;
namespace TestProject
{
/// <summary>
/// 프로그램
/// </summary>
class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 프로그램 시작하기 - Main()
/// <summary>
/// 프로그램 시작하기
/// </summary>
private static void Main()
{
Process process = new Process();
process.StartInfo.FileName = "notepad.exe";
process.StartInfo.Arguments = null;
process.Start();
process.WaitForInputIdle(100);
IntPtr mainWindowHandle = process.MainWindowHandle;
IntPtr editWindowHandle = WIN32Helper.FindWindowEx(mainWindowHandle, IntPtr.Zero, "EDIT", null);
MessageHelper.SendString(editWindowHandle, "테스트 문자열 입니다.");
}
#endregion
}
}
728x90
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON] GuidAttribute 클래스 : 프로젝트의 COM 노출 GUID 구하기 (0) | 2021.01.22 |
---|---|
[C#/COMMON] Process 클래스 : 지정 프로세스의 IME 모드(한글/영문 모드) 구하기 (0) | 2021.01.22 |
[C#/COMMON] NetworkChange 클래스 : NetworkAddressChanged 정적 이벤트를 사용해 네트워크 주소 변경시 처리하기 (0) | 2021.01.22 |
[C#/COMMON] NetworkChange 클래스 : NetworkAvailabilityChanged 정적 이벤트를 사용해 네트워크 가용 여부 변경시 처리하기 (0) | 2021.01.22 |
[C#/COMMON] MIME 타입 딕셔너리 구하기 (0) | 2021.01.21 |
[C#/COMMON] Process 클래스 : 메모장 EDIT 윈도우 핸들 구하기 (0) | 2021.01.21 |
[C#/COMMON] 액티브 디렉토리 사용자 계정 여부 구하기 (0) | 2021.01.19 |
[C#/COMMON] 모니터명 구하기 (0) | 2021.01.19 |
[C#/COMMON] 윈도우즈 서비스에서 현재 사용자 계정으로 프로세스 실행하기 (0) | 2021.01.18 |
[C#/COMMON] 실행 프로세스 여부 구하기 (0) | 2021.01.18 |