Unity InputFiled输入框调用win10平板虚拟键盘
2020-07-03 14:45
621 查看
传送门→:https://answers.unity.com/questions/1134775/on-screen-keyboard-pc-and-console-best-practices.html
话不都说,直接上代码,复制粘贴到你的项目中
1、VirtualKeyboard.cs
[code]using UnityEngine; using System; using System.Collections; using System.Diagnostics; using System.Runtime.InteropServices; public class VirtualKeyboard { [DllImport("user32")] static extern IntPtr FindWindow(String sClassName, String sAppName); [DllImport("user32")] static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam); private static Process _onScreenKeyboardProcess = null; /// <summary> /// Show the touch keyboard (tabtip.exe). /// </summary> public void ShowTouchKeyboard() { ExternalCall("C:\\Program Files\\Common Files\\Microsoft Shared\\ink\\tabtip.exe", null, false); //ExternalCall("TABTIP", null, false); } /// <summary> /// Hide the touch keyboard (tabtip.exe). /// </summary> public void HideTouchKeyboard() { uint WM_SYSCOMMAND = 274; int SC_CLOSE = 61536; IntPtr ptr = FindWindow("IPTip_Main_Window", null); PostMessage(ptr, WM_SYSCOMMAND, SC_CLOSE, 0); } /// <summary> /// Show the on screen keyboard (osk.exe). /// </summary> public void ShowOnScreenKeyboard() { //ExternalCall("C:\\Windows\\system32\\osk.exe", null, false); if (_onScreenKeyboardProcess == null || _onScreenKeyboardProcess.HasExited) _onScreenKeyboardProcess = ExternalCall("OSK", null, false); } /// <summary> /// Hide the on screen keyboard (osk.exe). /// </summary> public void HideOnScreenKeyboard() { if (_onScreenKeyboardProcess != null && !_onScreenKeyboardProcess.HasExited) _onScreenKeyboardProcess.Kill(); } /// <summary> /// Set size and location of the OSK.exe keyboard, via registry changes. Messy, but only known method. /// </summary> /// <param name='rect'> /// Rect. /// </param> public void RepositionOnScreenKeyboard(Rect rect) { ExternalCall("REG", @"ADD HKCU\Software\Microsoft\Osk /v WindowLeft /t REG_DWORD /d " + (int)rect.x + " /f", true); ExternalCall("REG", @"ADD HKCU\Software\Microsoft\Osk /v WindowTop /t REG_DWORD /d " + (int)rect.y + " /f", true); ExternalCall("REG", @"ADD HKCU\Software\Microsoft\Osk /v WindowWidth /t REG_DWORD /d " + (int)rect.width + " /f", true); ExternalCall("REG", @"ADD HKCU\Software\Microsoft\Osk /v WindowHeight /t REG_DWORD /d " + (int)rect.height + " /f", true); } private static Process ExternalCall(string filename, string arguments, bool hideWindow) { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = filename; startInfo.Arguments = arguments; // if just command, we don't want to see the console displayed if (hideWindow) { startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardError = true; startInfo.UseShellExecute = false; startInfo.CreateNoWindow = true; } Process process = new Process(); process.StartInfo = startInfo; process.Start(); return process; } }
2、OpenVirtualKeyboard.cs
[code]public class OpenVirtualKeyboard { static VirtualKeyboard vk = new VirtualKeyboard(); //打开键盘 public static void OpenKeyBoard() { vk.ShowTouchKeyboard(); } //关闭键盘 public static void CloseKeyBoard() { vk.HideTouchKeyboard(); } }
3、完成功能:使用InputFiled,点击焦点时弹出,失去焦点时关闭
你需要将下面脚本挂到InputField上
InputFiledSelect .cs
[code]using UnityEngine; using UnityEngine.EventSystems; public class InputFiledSelect : MonoBehaviour,ISelectHandler,IDeselectHandler { public void OnDeselect(BaseEventData eventData) { OpenVirtualKeyboard.CloseKeyBoard(); } public void OnSelect(BaseEventData eventData) { OpenVirtualKeyboard.OpenKeyBoard(); } }
如果运行成功,求个赞赞赞赞赞
相关文章推荐
- 我也不知道为什么iphone 虚拟键盘挡住了input输入框,解决方案
- Unity1.19/mask遮罩/图片变精灵格式/button/音量条/toggle /道具栏切换/input field 输入框
- Unity 安卓端 多个输入框自动切换下一个 ---unity InputField 获取焦点后 无法输入
- 【Unity&UGUI】输入框代码控制InputField,并显示输入文本
- Solution of issue: Android soft keyboard overlap with input div on browser【Android虚拟键盘与输入框重叠解决方案】
- 关于手机端IOS系统微信中虚拟键盘遮挡input输入框问题的解决方案
- 在IOS系统中微信浏览器input输入框输入值无效
- HTML5 虚拟键盘出现挡住输入框的解决办法
- Unity中Input 方法总结
- Unity C#调用外部exe程序的方法
- 判断input输入框的值,用到input事件,blur事件,focus事件
- Bootstrap系列 -- 14. 表单控件输入框input
- vuejs绑定数据到select中,选择option数据后,同步改变下面一个输入框input的值
- unity 3d与ios代码相互调用
- input输入并自动跳到下个输入框
- unity3d项目学习网站%Highcharts中文网站js&实现input输入框模糊查询
- jQuery实现当select下拉框内容变化时,input输入框内容随之变化
- 静态库调用静态库&静态库加载静态库------谈谈undefined reference to和linker input file unused because linking not done
- html5手机 input file 上传图片 调用API
- input输入框中光标高度的变化问题