300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Unity InputField输入框调用win10平板虚拟键盘

Unity InputField输入框调用win10平板虚拟键盘

时间:2023-05-14 00:40:48

相关推荐

Unity InputField输入框调用win10平板虚拟键盘

进口代码,生产厂家→:On Screen Keyboard (PC and Console) best practices - Unity Answers

话不都说,直接上代码,复制粘贴到你的项目中

1、VirtualKeyboard.cs

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 displayedif (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

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

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();}}

如果运行成功,求个赞赞赞赞赞

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。