C# win10系统调用不了系统自带的软键盘osk.exe


  • 有的win10系统可以调用windows自带的软键盘osk,有的win10系统调用不了。
  • 原因是win10系统是64位的,但是osk.exe是32位的软件。。。。
  • 使用下面的代码,就可以实现调用osk…亲测有效。。。。。
 public class StartKeyBoard
        {
            public static bool isShowNumBoard = false;
            [DllImport("kernel32.dll", SetLastError = true)]
            public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
            [DllImport("kernel32.dll", SetLastError = true)]
            public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
            public static void StartKeyBoardFun()
            {
             //判断软键盘是否进程是否已经存在,如果不存在进行调用
                    Process[] pro = Process.GetProcessesByName("osk");
                    //说明已经存在,不再进行调用
                    if (pro != null && pro.Length > 0)
                        return;
                    IntPtr ptr = new IntPtr();
                    bool isWow64FsRedirectionDisabled = Wow64DisableWow64FsRedirection(ref ptr);
                    if (isWow64FsRedirectionDisabled)
                    {
                        Process.Start(@"C:\WINDOWS\system32\osk.exe");
                        bool isWow64FsRedirectionReverted = Wow64RevertWow64FsRedirection(ptr);

            }

        }



  • 有的软件既要在win10系统上运行,又要在win7系统上运行
  • 使用上面的调用方法,win7系统调用可能会有问题,因此win7的时候用Tabtip软键盘比较可靠
  • 所以就判断windows系统的版本,使用下面的这段代码
 public class StartKeyBoard
        {
            public static bool isShowNumBoard = false;
            [DllImport("kernel32.dll", SetLastError = true)]
            public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
            [DllImport("kernel32.dll", SetLastError = true)]
            public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
            public static void StartKeyBoardFun()
            {
                string path = "C:/Program Files/Common Files/microsoft shared/ink/TabTip.exe";
                if (File.Exists(path))
                {
                    Process p = Process.Start(path);
                }
                else
                {
                    //判断软键盘是否进程是否已经存在,如果不存在进行调用
                    Process[] pro = Process.GetProcessesByName("osk");
                    //说明已经存在,不再进行调用
                    if (pro != null && pro.Length > 0)
                        return;
                    IntPtr ptr = new IntPtr();
                    bool isWow64FsRedirectionDisabled = Wow64DisableWow64FsRedirection(ref ptr);
                    if (isWow64FsRedirectionDisabled)
                    {
                        Process.Start(@"C:\WINDOWS\system32\osk.exe");
                        bool isWow64FsRedirectionReverted = Wow64RevertWow64FsRedirection(ptr);
                    }
                }
            }

        }

你可能感兴趣的:(#,C#,#,Windows系统)