WPF 虚拟键盘

原文:WPF 虚拟键盘

之前做了一款WPF虚拟键盘,调用Win32的API,可以模拟键盘事件。

现将代码分享如下:

按键布局如下:

   <Button Name="CmdTlide" Focusable="False" Click="Button_Click"  Style="{StaticResource InformButton}"  VerticalContentAlignment="Top" HorizontalContentAlignment="Left"  Width="60" Height="60">
                                    <StackPanel Orientation="Vertical" HorizontalAlignment="Left" VerticalAlignment="Top" >
                                        <TextBlock    HorizontalAlignment="Left" VerticalAlignment="Top"   ><Run Text="~"/></TextBlock>
                                        <TextBlock HorizontalAlignment="Left" VerticalAlignment="Bottom"   ><Run Text="'"/></TextBlock>
                                    </StackPanel>
                                </Button>

点击事件:

 private void Button_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Controls.Button keybtn = sender as System.Windows.Controls.Button;
            #region//First Row
            if (keybtn.Name == "CmdTlide")
            {
                addNumkeyINput(0xc0);
            }
            else if (keybtn.Name == "cmd1")
            {
                addNumkeyINput(0x31);
            }
            else if (keybtn.Name == "cmd2")
            {
                addNumkeyINput(0x32);
            }
            else if (keybtn.Name == "cmd3")
            {
                addNumkeyINput(0x33);
            }
            else if (keybtn.Name == "cmd4")
            {
                addNumkeyINput(0x34);
            }
            else if (keybtn.Name == "cmd5")
            {
                addNumkeyINput(0x35);
            }
            else if (keybtn.Name == "cmd6")
            {
                addNumkeyINput(0x36);

            }
            else if (keybtn.Name == "cmd7")
            {
                addNumkeyINput(0x37);
            }
            else if (keybtn.Name == "cmd8")
            {
                addNumkeyINput(0x38);
            }
            else if (keybtn.Name == "cmd9")
            {
                addNumkeyINput(0x39);
            }
            else if (keybtn.Name == "cmd0")
            {
                addNumkeyINput(0x30);

            }
            else if (keybtn.Name == "cmdminus")//-_
            {
                addNumkeyINput(0xbd);
            }
            else if (keybtn.Name == "cmd1")//+=
            {
                addNumkeyINput(0xbb);
            }
            else if (keybtn.Name == "cmdBackspace")//backspace
            {
                AddKeyBoardINput(0x08);
            }
            #endregion
            #region//Second Row
            else if (keybtn.Name == "CmdTab")
            {
                AddKeyBoardINput(0x09);
            }
            else if (keybtn.Name == "CmdQ")
            {
                AddKeyBoardINput(0x51);
            }
            else if (keybtn.Name == "Cmdw")
            {
                AddKeyBoardINput(0x57);

            }
            else if (keybtn.Name == "CmdE")
            {
                AddKeyBoardINput(0X45);

            }
            else if (keybtn.Name == "CmdR")
            {
                AddKeyBoardINput(0X52);

            }
            else if (keybtn.Name == "CmdT")
            {
                AddKeyBoardINput(0X54);

            }
            else if (keybtn.Name == "CmdY")
            {
                AddKeyBoardINput(0X59);

            }
            else if (keybtn.Name == "CmdU")
            {
                AddKeyBoardINput(0X55);

            }
            else if (keybtn.Name == "CmdI")
            {
                AddKeyBoardINput(0X49);

            }
            else if (keybtn.Name == "CmdO")
            {
                AddKeyBoardINput(0X4F);
            }
            else if (keybtn.Name == "CmdP")
            {
                AddKeyBoardINput(0X50);
            }
            else if (keybtn.Name == "CmdOpenCrulyBrace")
            {
                addNumkeyINput(0xdb);
            }
            else if (keybtn.Name == "CmdEndCrultBrace")
            {
                addNumkeyINput(0xdd);
            }
            else if (keybtn.Name == "CmdOR")
            {
                addNumkeyINput(0xdc);
            }
            #endregion
            #region///Third ROw

            else if (keybtn.Name == "CmdCapsLock")//caps lock
            {
                AddKeyBoardINput(0x14);
                if (checkImage.Visibility != Visibility.Visible)
                {
                    checkImage.Visibility = Visibility.Visible;
                }
                else
                {
                    checkImage.Visibility = Visibility.Hidden;
                }
            }
            else if (keybtn.Name == "CmdA")
            {
                AddKeyBoardINput(0x41);
            }
            else if (keybtn.Name == "CmdS")
            {
                AddKeyBoardINput(0x53);
            }
            else if (keybtn.Name == "CmdD")
            {
                AddKeyBoardINput(0x44);
            }
            else if (keybtn.Name == "CmdF")
            {
                AddKeyBoardINput(0x46);
            }
            else if (keybtn.Name == "CmdG")
            {
                AddKeyBoardINput(0x47);
            }
            else if (keybtn.Name == "CmdH")
            {
                AddKeyBoardINput(0x48);
            }
            else if (keybtn.Name == "CmdJ")
            {
                AddKeyBoardINput(0x4A);
            }
            else if (keybtn.Name == "CmdK")
            {
                AddKeyBoardINput(0X4B);
            }
            else if (keybtn.Name == "CmdL")
            {
                AddKeyBoardINput(0X4C);

            }
            else if (keybtn.Name == "CmdColon")//;:
            {
                addNumkeyINput(0xba);
            }
            else if (keybtn.Name == "CmdDoubleInvertedComma")//'"
            {
                addNumkeyINput(0xde);
            }
            else if (keybtn.Name == "CmdEnter")
            {
                AddKeyBoardINput(0x0d);
            }
            #endregion
            #region//Fourth Row
            else if (keybtn.Name == "CmdShift" || keybtn.Name == "CmdlShift")
            {
                if (CtrlFlag)
                {
                    CtrlFlag = false;
                    ShiftFlag = false;
                    changeInput();
                }
                else
                {
                    ShiftFlag = true;
                }
            }
            else if (keybtn.Name == "CmdZ")
            {

                AddKeyBoardINput(0X5A);

            }
            else if (keybtn.Name == "CmdX")
            {
                AddKeyBoardINput(0X58);

            }
            else if (keybtn.Name == "CmdC")
            {
                AddKeyBoardINput(0X43);

            }
            else if (keybtn.Name == "CmdV")
            {
                AddKeyBoardINput(0X56);

            }
            else if (keybtn.Name == "CmdB")
            {
                AddKeyBoardINput(0X42);

            }
            else if (keybtn.Name == "CmdN")
            {
                AddKeyBoardINput(0x4E);

            }
            else if (keybtn.Name == "CmdM")
            {
                AddKeyBoardINput(0x4D);
            }
            else if (keybtn.Name == "CmdLessThan")//<,
            {
                addNumkeyINput(0xbc);
            }
            else if (keybtn.Name == "CmdGreaterThan")//>.
            {
                addNumkeyINput(0xbe);
            }
            else if (keybtn.Name == "CmdQuestion")//?/
            {
                addNumkeyINput(0xbf);
            }

            else if (keybtn.Name == "CmdSpaceBar")
            {
                AddKeyBoardINput(0x20);
            }
            #endregion
            #region//Last row
            else if (keybtn.Name == "CmdCtrl" || keybtn.Name == "CmdlCtrl")//ctrl
            {
                if (ShiftFlag)
                {
                    ShiftFlag = false;
                    CtrlFlag = false;
                }
                else
                {
                    CtrlFlag = true;
                }
                //AddKeyBoardINput(0x11);
            }
            else if (keybtn.Name == "CmdpageUp")
            {
                AddKeyBoardINput(0x21);
            }
            else if (keybtn.Name == "CmdpageDown")
            {
                AddKeyBoardINput(0x22);
            }
            else if (keybtn.Name == "CmdClose")//关闭键盘
            {
                //this.Opacity = 0;
                // this.Close();
                //  this.keyboard.Visibility = Visibility.Hidden;
                //this.keyboard.Focusable = false;

                System.Windows.Application.Current.Shutdown();
            }
            #endregion
        }

触发键盘事件:

  private static void addNumkeyINput(byte input)
        {
            if (CtrlFlag)
            {
                CtrlFlag = false;
                ShiftFlag = false;
                keybd_event(input, 0, 0, 0);
                keybd_event(input, 0, 0x02, 0);
            }
            else
            {
                if (!ShiftFlag)
                {
                    keybd_event(input, 0, 0, 0);
                    keybd_event(input, 0, 0x02, 0);
                }
                else
                {
                    keybd_event(0x10, 0, 0, 0);//shift
                    keybd_event(input, 0, 0, 0);
                    keybd_event(input, 0, 0x02, 0);
                    keybd_event(0x10, 0, 0x02, 0);

                    ShiftFlag = false;
                }
            }
        }

源码下载

 

时间: 2024-10-23 12:58:56

WPF 虚拟键盘的相关文章

win7系统中打开虚拟键盘的两种方法

  Windows 7系统自带有一个可以用鼠标点击的虚拟键盘,这个功能不是很常用,但如果键盘出了点小故障,又急着要打点文字什么的,它完全可以取代实体键盘. 第一种方法:.在"轻松访问中心"直接运行 1. 点击"控制面板". 2. 切换查看方式中的"类别",选"小图标"或者"大图标"都行. 3. 到了这块区域之后,找到"轻松访问中心",点进去. 4. 然后就可以"启动屏幕键盘&q

win10 虚拟键盘-win 10 找开虚拟键盘 焦点在输入框内

问题描述 win 10 找开虚拟键盘 焦点在输入框内 我用的是winfrom技术,在win 10 系统下如何打开虚拟键盘.能不能手工调用系统的是虚拟键盘

Chrome OS增加虚拟键盘和Docked模式

最新的Chrome OS Dev增加了两个新功能,首先是可触摸输入的虚拟键盘.虽然Chromebook Pixel有了触控屏幕,但只能点点网页里的按钮,现在它也可以直接输入字符了.当然对于一个有键盘而束之高阁不用缺在屏幕上戳来戳去的人来说确实很奇怪,这应该是为未来平板Chrome Pad准备的吧? 最新的Chrome OS Dev增加了两个新功能,首先是可触摸输入的虚拟键盘.虽然Chromebook Pixel有了触控屏幕,但只能点点网页里的按钮,现在它也可以直接输入字符了.当然对于一个有键盘而

Word 2003如何调用虚拟键盘编写特殊符号

  Word 2003如何调用虚拟键盘编写特殊符号           举例来说,当我们使用Word 2003编辑文档,想输入特殊字符m2 时,那就按下键盘上的"Ctrl+/(即问号键)"组合键,看到了什么?一个满含特殊符号的虚拟键盘出现在桌面上.上面可以看到¥.‰.◎.□等常用的特殊符号.而想输入m2 这个符号时,在键盘上按下与之对应的键位--大键盘区的数字键0即可完成,同时虚拟键盘消失不见,简单吧(如图1).   假如想知道某个特殊字符所对应的按键是什么,可以按一下空格键,虚拟键盘

QQ输入法手机版支持哪些虚拟键盘

  手机QQ输入法在PPC/Android/S60 V5平台支持"九宫格"和"全键盘"两种虚拟键盘.点击右下角的切换键即可完成九宫格键盘与全键盘之间的切换.键盘界面清爽简洁,占用屏幕面积小但功能强大.PPC平台还支持经典键盘方案,其全键盘采用PC键盘的布局风格,按键全面,功能强大.

win8系统怎样开启虚拟键盘功能?

  win8系统怎样开启虚拟键盘功能? 1.首先,鼠标移动到桌面最下方的工具栏,右键弹出菜单; 2.选择工具栏-虚拟键盘,选择虚拟键盘; 3.勾选虚拟键盘后,工具栏位置会出现一个键盘模样的图标,如图所示,点开它; 4.打开之后,就出现了虚拟键盘,如图所示,随意输入几个字试试; 5.如果觉得宽度不够,可以点虚拟键盘右上角的放大,如图所示,键盘变成宽屏了. windows7教程 windows8教程 windows10教程

防止盗号 使用Win7自带虚拟键盘

防止盗号 使用Win7自带虚拟键盘 很多盗号木马的原理是监控键盘鼠标的操作来记录输入的账号和密码,所以很多软件和网站都带了虚拟键盘的功能,其实win7就自带了虚拟键盘,而且外观很漂亮.大家在一些涉及到自己隐私的网页或软件登陆的时候尽量使用win7屏幕软键盘,很大程度上减少自己被盗号的几率. 打开屏幕键盘的方法: 点击开始菜单--输入"OSK",运行即可! 屏幕键盘界面:

Win7虚拟键盘使用教程

不想敲键盘,有木有虚拟键盘呢? Win7虚拟键盘开启方法: 我们打开开始菜单依次点击:所有程序-附件-Tablet PC ,找到Tablet PC 输入面板并启动. 接下来我们首先看到的是一款Win7系统自带的手写输入板. 点击手写面板右上角的更正视频,即可查看手写板使用方法. 点击左上角的键盘按钮,就可以切换到Win7虚拟键盘了! 需要扩展键么?点击工具-显示扩展的键盘,就好啦!

寻找Windows 8系统虚拟键盘隐藏的那个彩蛋

无论是Surface Pro还是ThinkPad Tablet 2,亦或是提供触控屏的各类Windows 8设备们,微软都为它们提供了一个全新的虚拟触摸键盘,而在这看似貌不惊人的虚拟触摸键盘设计中,微软却埋藏了不少的方便用户日常使用的"小彩蛋". 在传统界面的任务栏中点击"触摸键盘"按钮,在打开的触摸键盘中点击"&123"就可以切换到数字键盘中,而微软设置的小彩蛋就隐藏在左侧的符号按钮中(如果在任务栏中无法直接打开触摸键盘,可以在任务栏中