原文:示例:WPF仿制OSK做的系统键盘和数字键盘

一、目的:在应用osk.exe系统键盘时遇到很多不方便,比如有些系统调用不出来等问题,由此开发了一个系统键盘仿制osk

二、实现功能

1、目前实现大部分osk键盘的输入功能,还有部分按键由于时间关系没有实现

2、支持组合按键shift、ctrl、alt等方式输入

3、支持大小写输入切换

4、支持shift切换复合按键

5、支持在外部记事本、网页等有光标的位置进行输入

三、示意图

系统键盘部分:

数字键盘部分:

四、实现部分

1、采用模拟虚拟按键方式输入按键


  1. public static partial class KeyHelper
  2. {
  3. [DllImport("user32.dll", EntryPoint = "keybd_event")]
  4. public static extern void keybd_event(
  5. byte bVk, //虚拟键值
  6. byte bScan,// 一般为0
  7. int dwFlags, //这里是整数类型 0 为按下,2为释放
  8. int dwExtraInfo //这里是整数类型 一般情况下设成为0
  9. );
  10. [DllImport("user32.dll")]
  11. public static extern int GetFocus();
  12. }

2、通过禁用窗体获取焦点方式来进行外部输入,如记事本


  1. private void KeyBoardWindow_Loaded(object sender, RoutedEventArgs e)
  2. {
  3. WindowInteropHelper windowInteropHelper = new WindowInteropHelper(this);
  4. IntPtr intPtr = windowInteropHelper.Handle;
  5. int value = -20;
  6. SetWindowLong(intPtr, value, (IntPtr)0x8000000);
  7. }

  1. [DllImport("user32.dll")]
  2. public static extern int SetWindowLong(IntPtr hWnd, int nindex, IntPtr dwNewLong);
  3. [DllImport("user32.dll", SetLastError = true)]
  4. public static extern UInt32 GetWindowLong(IntPtr hWnd, int index);

五、待实现部分

目前Capslock、ctrl、shift、alt的按下状态和按键状态没有和外部硬件键盘做同步、后续会应用钩子检测同步外部硬件键盘状态

有些按键如win、fn、~等按键存在问题后续更新

六、代码下载

https://github.com/HeBianGu/WPF-SystemKeyboard.git

示例:WPF仿制OSK做的系统键盘和数字键盘的更多相关文章

  1. 关于Edittext默认弹出软键盘为数字键

    如果说我们只是输入数字的话,我们可以直接在xml文件中: android:inputType="number" 如果是身份证类型的话,我们可以这样: android:inputTy ...

  2. 「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...

  3. 单片机系统与标准PC键盘的接口模块设计

    转自单片机系统与标准PC键盘的接口模块设计 概述     在单片机系统中,当输入按键较多时,在硬件设计和软件编程之间总存在着矛盾.对于不同的单片机系统需要进行专用的键盘硬件设计和编程调试,通用性差,使 ...

  4. 给服务器做pve系统(可以通过web管理物理机集群资源与虚拟机)

    做此系统前,可以先进入bios,设置一下ipmi的网络地址.可以远程管理服务器 输入服务器的ipmi里面配置的ip 默认账号与密码admin 点击launch 会自动下载认证文件 下载好java软件环 ...

  5. 做考试系统用到的关于onbeforeunload一些兼容性问题

    最近做考试系统,一些效果存在一些兼容性问题,尤其是ie6,本人js不是很好,通过查资料解决了这些问题,现总结下: 关于onbeforeunload问题: 考试时离开页面需要提示,但是直接用此方法或on ...

  6. Android StatusBarUtil:设置Android系统下方虚拟键键盘透明度

     Android StatusBarUtil:设置Android系统下方虚拟键键盘透明度 Android StatusBarUtil是github上的一个开源项目,主页:https://githu ...

  7. WPF应用最小化至系统托盘运行

    原文:WPF应用最小化至系统托盘运行 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lordwish/article/details/5178889 ...

  8. wpf 复制/剪切到本地系统剪切板中以供右键粘贴用

    原文:wpf 复制/剪切到本地系统剪切板中以供右键粘贴用   http://www.cnblogs.com/yhdkzy/archive/2012/11/27/2790655.html   /// & ...

  9. iOS 系统数字键盘左下角加确定按钮

    首先在 viewWillAppear 方法中注册监听相应的键盘通知,并且要在 viewWillDisappear 方法中注销通知- (void)viewWillAppear:(BOOL)animate ...

随机推荐

  1. MySQL基础SQL命令---增删改查

    1.表操作: create table tableName (id int(6) not null primary key auto_increatment,name varchar(10) not ...

  2. maven仓库报错 sqljdbc4、ojdbc6、tomcat-jdbc-8.5.14

    报错:Cannot resolve com.microsoft.sqlserver:sqljdbc4:4.0  和  Missing artifact com.microsoft.sqlserver: ...

  3. Unity检测面板旋转值超过180度成负数的离奇bug

    问题描述: 无意中在检视面板上对游戏物体的tansform进行旋转,结果发现旋转超过180度成负数的离奇bug 解决方案: 创建个新的unity工程,进行如上操作,一切正常…… 怀疑问题根源是配置出现 ...

  4. cmd 计划任务

    Schtasks /create /sc ScheduleType /tn TaskName /tr TaskRun [/s Computer [/u [Domain\]User [/p Passwo ...

  5. 小学四则运算口算练习app---No.3

    今天主要是实现按照指定的题目出题数目出题.在昨天设置页面的基础上,今天首先要学习的是接收不同页面间的参数问题.详解如下: 然后就开始我的传参和接收参数的问题! 在当前的Activity上进行跳转, 代 ...

  6. Scrapy笔记09- 部署

    Scrapy笔记09- 部署 本篇主要介绍两种部署爬虫的方案.如果仅仅在开发调试的时候在本地部署跑起来是很容易的,不过要是生产环境,爬虫任务量大,并且持续时间长,那么还是建议使用专业的部署方法.主要是 ...

  7. 前端 / JavaScript 导出PDF的实践

    1.库:jspdf,自己定义一个高宽,如A4的210mm×297mm 2.让设计给背景图(包括:页眉页脚),水印图(背景透明,高宽和你的PDF单页一致)以及很多,能设计给的设计要给,因为在pdf上,排 ...

  8. A9G开发

    巨坑 不支持联通 发短信 上电,准备好后使用 结束标志 取消换行  以16进制发  0x1a 实际测试 中间可以有很多行内容 短信内容结束换行 最后必须以 16进制 发送 0x1a  带和不带换行都可 ...

  9. Pandas | 02 Series 系列

    系列(Series)是能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组.轴标签统称为索引. pandas.Series Pandas系列可以使用以下构造函数创建 - p ...

  10. 请写出css中选择器(元素选择器、类选择器、id选择器)的优先级顺序,和当各种选择器组合时,优先级的计算规则是什么?

    id选择器>类选择器>元素选择器 规则:选择器的权重值表述为4个部分,用0,0,0,0表示. 通配符*的权重为0,0,0,0 标签选择器.伪元素选择器的权重为0,0,0,1 类选择器.属性 ...