void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) { switch (connectionId) { case 1: this.exit = ((UsingKeyboard.KeyButton)(target)); return; } this._contentLoaded = true; }
//////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Protected #region 키 업데이트하기 - UpdateKeys(panel) /// <summary> /// 키 업데이트하기 /// </summary> /// <param name="panel">패널</param> protected void UpdateKeys(Panel panel) { foreach (UIElement child in panel.Children) { if (child is Panel) { Panel content = child as Panel; UpdateKeys(content); } else if (child is KeyButton) { KeyButton keyButton = child as KeyButton; keyButton.UpdateKey(IsPressedShift, IsPressedCapsLock, IsPressedHangul); } } }
/// <summary> /// 후킹 마우스 클릭시 처리하기 /// </summary> /// <param name="point">포인트</param> /// <param name="message">메시지</param> private void Hook_MouseClick(POINT point, MouseMessage message) { Point screenPoint = PointFromScreen(new Point(point.X, point.Y)); KeyButton keyButton = VisualElementHelper.TryFindFromPoint <KeyButton>(this, screenPoint); if (keyButton == null) { return; } VirtualKeyCode keyCode = keyButton.KeyCode; if (message == MouseMessage.WM_LBUTTONDOWN) { this.previusKeyButton = keyButton; keyButton.IsPressed = true; if (keyButton.ClickMode == ClickMode.Press) { keyButton.RaiseEvent(new RoutedEventArgs(KeyButton.ClickEvent)); } } else if (message == MouseMessage.WM_LBUTTONUP) { if (keyCode != VirtualKeyCode.CAPITAL && keyCode != VirtualKeyCode.SHIFT) { if (this.previusKeyButton != null) { this.previusKeyButton.IsPressed = false; this.previusKeyButton = null; } keyButton.IsPressed = false; } if (keyButton.ClickMode == ClickMode.Release) { keyButton.RaiseEvent(new RoutedEventArgs(KeyButton.ClickEvent)); } } }
/// <summary> /// 키 버튼 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void KeyButton_Click(object sender, RoutedEventArgs e) { KeyButton keyButton = e.OriginalSource as KeyButton; if (keyButton == null || (IsEnableHook && keyButton.IsStylusCaptured)) { return; } this.keyPressed = true; if (keyButton.KeyCode == VirtualKeyCode.CAPITAL) { IsPressedCapsLock = !IsPressedCapsLock; //Simulator.Keyboard.KeyPress(keyButton.KeyCode); } else if (keyButton.KeyCode == VirtualKeyCode.SHIFT) { IsPressedShift = !IsPressedShift; if (IsPressedShift) { Simulator.Keyboard.KeyDown(keyButton.KeyCode); keyButton.Background = new SolidColorBrush(Color.FromArgb(0xFF, 91, 165, 37)); } else { Simulator.Keyboard.KeyUp(keyButton.KeyCode); keyButton.Background = Brushes.RoyalBlue; } } else if (keyButton.KeyCode == VirtualKeyCode.HANGUL) { IsPressedHangul = !IsPressedHangul; Simulator.Keyboard.KeyPress(keyButton.KeyCode); } else if (keyButton.KeyCode == VirtualKeyCode.CLEAR) { if (Keyboard.FocusedElement is TextBox) { TextBox textBox = Keyboard.FocusedElement as TextBox; textBox.Text = string.Empty; } } else if (keyButton.Name == "exit") { TextBox textBox = Keyboard.FocusedElement as TextBox; textBox.Text = string.Empty; Window.GetWindow(this).Close(); } else if (keyButton.KeyCode == VirtualKeyCode.RETURN) { if (Keyboard.FocusedElement is TextBox) { //ReturnString(); Window.GetWindow(this).Close(); //TextBox textBox = Keyboard.FocusedElement as TextBox; //InputString = textBox.Text; //if (!InputString.Equals(string.Empty)) //{ // BindingExpression expression = textBox.GetBindingExpression(TextBox.TextProperty); // expression?.UpdateSource(); // Window.GetWindow(this).Close(); //} } } else { Simulator.Keyboard.KeyPress(keyButton.KeyCode); //if (IsPressedShift) //{ // IsPressedShift = false; // Simulator.Keyboard.KeyPress(keyButton.KeyCode); // Simulator.Keyboard.KeyUp(VirtualKeyCode.SHIFT); //} //else //{ // Simulator.Keyboard.KeyPress(keyButton.KeyCode); //} } UpdateKeys(); RaiseEvent(new RoutedEventArgs(VirtualKeyDownEvent, keyButton.KeyCode)); this.keyPressed = false; }