void hook_HookInvoked(object sender, WindowsAPI.HookEventArgs e) { KBDLLHOOKSTRUCT keyboardHook = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(e.lParam, typeof(KBDLLHOOKSTRUCT)); KeyBoardType type = (KeyBoardType)e.wParam; if (e.HookCode >= 0) { int vkCode = keyboardHook.vkCode; switch (type) { case KeyBoardType.WM_KEYDOWN: DoKeyDown(vkCode); break; case KeyBoardType.WM_KEYUP: DoPress(vkCode); DoKeyUp(vkCode); break; case KeyBoardType.WM_SYSKEYDOWN: DoKeyDown(vkCode); break; case KeyBoardType.WM_SYSKEYUP: DoKeyUp(vkCode); break; default: break; } } }
// 한/영 키 public void KorEngChange(KeyBoardType type) { kor.SetActive(false); eng.SetActive(false); spe.SetActive(false); switch (type) { case KeyBoardType.Kor1: kor.SetActive(true); foreach (Key item in KorbuttonList) { item.Change(); } this.type = type; break; case KeyBoardType.LowerEng: eng.SetActive(true); foreach (Key item in EngbuttonList) { item.Change(); } this.type = type; break; case KeyBoardType.Special1: spe.SetActive(true); preType = this.type; this.type = type; break; } }
// 특문 1~2페이지로 넘어가는 함수 public void SpecialShift() { if (type == KeyBoardType.Special1) { type = KeyBoardType.Special2; } else { type = KeyBoardType.Special1; } string[] str; int count = 0; switch (type) { case KeyBoardType.Special1: str = special1.Split('|'); for (int i = 0; i < SpecialbuttonList.Count; i++) { if (SpecialbuttonList[i].keyType == Key.Type.SPECIAL && SpecialbuttonList[i].keyname.Length == 1) { SpecialbuttonList[i].text.text = str[count]; SpecialbuttonList[i].keyname = str[count++].ToCharArray(); SpecialbuttonList[i].keyvalue = SpecialbuttonList[i].keyname[0]; if (count == str.Length) { break; } } } break; case KeyBoardType.Special2: str = special2.Split('^'); for (int i = 0; i < SpecialbuttonList.Count; i++) { if (SpecialbuttonList[i].keyType == Key.Type.SPECIAL && SpecialbuttonList[i].keyname.Length == 1) { SpecialbuttonList[i].text.text = str[count]; SpecialbuttonList[i].keyname = str[count++].ToCharArray(); SpecialbuttonList[i].keyvalue = SpecialbuttonList[i].keyname[0]; if (count == str.Length) { break; } } } break; } }
/// <summary> /// 按键是否被按下 /// </summary> /// <param name="type"></param> /// <returns></returns> public bool KeyIsPress(KeyBoardType type) { if (KeySetList == null || !KeySetList.ContainsKey(type) || KeySetList[type].KeyList.Count == 0) { return(false); } else { return(KeySetList[type].isPress); } }
/// <summary> /// 获取某个按键信息 /// </summary> /// <param name="type"></param> /// <returns></returns> public KeyInfo GetKeyInfo(KeyBoardType type) { if (KeySetList.ContainsKey(type)) { return(KeySetList[type]); } else { return(null); } }
/// <summary> /// 设定按键 /// </summary> /// <param name="type"></param> /// <param name="keylist"></param> public void SetKey(KeyBoardType type, List <KeyCode> keylist) { if (KeySetList.ContainsKey(type)) { KeySetList[type].KeyList.Clear(); for (int i = 0; i < keylist.Count; i++) { KeySetList[type].KeyList.Add(keylist[i]); } } }
// shift 키 public void ShiftKeyBoard() { if (type == KeyBoardType.UpperEng) { type = KeyBoardType.LowerEng; foreach (Key item in EngbuttonList) { item.Change(); } } else if (type == KeyBoardType.LowerEng) { type = KeyBoardType.UpperEng; foreach (Key item in EngbuttonList) { item.Change(); } } else if (type == KeyBoardType.Kor1) { type = KeyBoardType.Kor2; foreach (Key item in KorbuttonList) { item.Change(); } } else if (type == KeyBoardType.Kor2) { type = KeyBoardType.Kor1; foreach (Key item in KorbuttonList) { item.Change(); } } }
/// <summary> /// �����¼� /// </summary> /// <param name="type"></param> /// <param name="keyCode"></param> public KeyBoardEvent(KeyBoardType type, System.Windows.Forms.Keys keyCode) { this.type = type; this.keyCode = keyCode; }
// 영문 키보드 or 한글 키보드 제작 게임 오브젝트 생성 및 정렬 GameObject MakeKeyBoard(KeyBoardType type, bool set) { // 패널 생성 GameObject panel = new GameObject(type.ToString()); panel.layer = LayerMask.NameToLayer("UI"); panel.AddComponent <CanvasRenderer>(); Image image = panel.AddComponent <Image>(); image.color = Color.white; image.sprite = AssetDatabase.GetBuiltinExtraResource <Sprite>("UI/Skin/Background.psd"); image.type = Image.Type.Sliced; //image.sprite = Resources.GetBuiltinResource(typeof(Sprite), "Background.psd") as Sprite; //i.sprite = Resources.Load("Assets/Background") as Sprite; panel.transform.SetParent(mainCanvasObj.transform, false); panelRect = panel.GetComponent <RectTransform>(); panelRect.sizeDelta = new Vector3(resolution.x * 1.05f, resolution.x * 0.4f); panelRect.anchoredPosition3D = new Vector3(0, resolution.x * 1.5f, resolution.x); panelRect.localRotation = Quaternion.Euler(35f, 0f, 0f); // 세로로 정렬할 부모 오브젝트 생성 GameObject vertical = new GameObject("VerticalLayer"); vertical.transform.SetParent(panel.transform); VerticalLayoutGroup vV = vertical.AddComponent <VerticalLayoutGroup>(); vV.spacing = 30f; RectTransform vR = vertical.GetComponent <RectTransform>(); vR.localScale = new Vector3(1, 1, 1); vR.sizeDelta = new Vector3(resolution.x, resolution.x * 0.3f); vR.localRotation = Quaternion.Euler(Vector3.zero); vR.anchoredPosition3D = Vector3.zero; // 버튼 오브젝트 GameObject buttonObj = Resources.Load("Button") as GameObject; // 버튼 리스트 List <Key> buttonList; string[] parse; if (type == KeyBoardType.LowerEng) { parse = EngkeyOrder.Split('|'); buttonList = EngbuttonList; } else if (type == KeyBoardType.Special1) { parse = special1Order.Split('|'); buttonList = SpecialbuttonList; } else { parse = KorKeyOrder.Split('|'); buttonList = KorbuttonList; } int c = 0; // 수평으로 정렬할 빈 오브젝트 5개 생성 GameObject[] a = new GameObject[5]; // 1줄에 버튼 여러개 생성 for (int i = 0; i < 5; i++) { a[i] = new GameObject("HorizotalLayer"); HorizontalLayoutGroup aH = a[i].AddComponent <HorizontalLayoutGroup>(); a[i].transform.SetParent(vertical.transform); RectTransform aR = a[i].GetComponent <RectTransform>(); aR.localScale = new Vector3(1, 1, 1); aR.localRotation = Quaternion.Euler(Vector3.zero); aR.anchoredPosition3D = Vector3.zero; switch (i) { case 0: case 1: for (int j = 0; j < 10; j++) { GameObject button = Instantiate(buttonObj, a[i].transform); button.transform.GetChild(0).GetComponent <Text>().text = parse[c++]; button.transform.GetChild(0).GetComponent <Text>().fontSize = 50; Key k = button.AddComponent <Key>(); button.layer = LayerMask.NameToLayer("UI"); buttonList.Add(k); } aH.spacing = 40f; break; case 2: case 3: int index = 9; if (type == KeyBoardType.Special1 && i == 2) { index = 10; } for (int j = 0; j < index; j++) { GameObject button = Instantiate(buttonObj, a[i].transform); if (parse[c] == "shift") { LayoutElement layout = button.AddComponent <LayoutElement>(); layout.preferredWidth = shiftSize; } else if (parse[c] == "backspace") { LayoutElement layout = button.AddComponent <LayoutElement>(); layout.preferredWidth = backspaceSize; } button.transform.GetChild(0).GetComponent <Text>().text = parse[c++]; button.transform.GetChild(0).GetComponent <Text>().fontSize = 50; Key k = button.AddComponent <Key>(); button.layer = LayerMask.NameToLayer("UI"); buttonList.Add(k); } aH.spacing = 40f; break; case 4: for (int j = 0; j < 6; j++) { GameObject button = Instantiate(buttonObj, a[i].transform); if (parse[c] == "space") { LayoutElement layout = button.AddComponent <LayoutElement>(); layout.preferredWidth = spacebarSize; } else if (parse[c] == "Enter") { LayoutElement layout = button.AddComponent <LayoutElement>(); layout.preferredWidth = enterSize; } button.transform.GetChild(0).GetComponent <Text>().text = parse[c++]; button.transform.GetChild(0).GetComponent <Text>().fontSize = 50; Key k = button.AddComponent <Key>(); button.layer = LayerMask.NameToLayer("UI"); buttonList.Add(k); } aH.spacing = 40f; break; } } panel.SetActive(set); return(panel); }
/// <summary> /// 键盘事件 /// </summary> /// <param name="type"></param> /// <param name="keyCode"></param> public KeyBoardEvent(KeyBoardType type, System.Windows.Forms.Keys keyCode) { this.type = type; this.keyCode = keyCode; }