using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using System.IO;

namespace BPASmartClient.Helper
{
    public class SystemUtils
    {

        //private static ILogger logger = NLog.LogManager.GetCurrentClassLogger();
        //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 IntPtr ptr = new IntPtr();




        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()
        {
            try
            {

            }
            catch (Exception)
            {

                throw;
            }


        }


        public static void ShowScreenKeyboard()
        {
            try
            {

                //string file = @"C:\Program Files\Common Files\microsoft  shared\ink\TabTip.exe";
                ////if (!System.IO.File.Exists(file))
                ////    return;
                //Process.Start(file);

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



                //ProcessStartInfo psi = new ProcessStartInfo();
                //psi.FileName = @"C:\Windows\System32\osk.exe";
                //psi.UseShellExecute = false;
                //psi.CreateNoWindow = true;
                //Process.Start(psi);
                //Process kbpr = System.Diagnostics.Process.Start(@"C:\Windows\System32\osk.exe"); // 打开系统键盘

                ////判断软键盘是否进程是否已经存在，如果不存在进行调用
                //Process[] pro = Process.GetProcessesByName("osk");
                //bool isWow64FsRedirectionDisabled = Wow64DisableWow64FsRedirection(ref ptr);

                ////键盘如果已经打开则重新打开，防止最小化无法显示
                //if (pro != null && pro.Length > 0)
                //{
                //    Process kbpr = pro[0];
                //    kbpr.Kill();
                //    if (isWow64FsRedirectionDisabled)
                //    {
                //        Process.Start(@"C:WINDOWSsystem32osk.exe");
                //        Wow64RevertWow64FsRedirection(ptr);
                //    }
                //    return;
                //}
                ////if (isWow64FsRedirectionDisabled)
                ////{
                //Process.Start(@"C:WINDOWSsystem32osk.exe");
                //Wow64RevertWow64FsRedirection(ptr);
                //}
            }
            catch (Exception ex)
            {
                //logger.Error(ex.Message);
            }
        }


















        //[DllImport("kernel32.dll", SetLastError = true)]
        //private static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
        //[DllImport("kernel32.dll", SetLastError = true)]
        //public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
        //private const UInt32 WM_SYSCOMMAND = 0x112;
        //private const UInt32 SC_RESTORE = 0xf120;
        //[DllImport("user32.dll", CharSet = CharSet.Auto)]
        //static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
        //private const string OnScreenKeyboadApplication = "osk.exe";


        ///// <summary>
        ///// 启用系统软键盘
        ///// </summary>
        //public static void OpenKeyBoardFun()
        //{
        //    try
        //    {
        //        //判断软键盘是否进程是否已经存在，如果不存在进行调用
        //        Process[] pro = Process.GetProcessesByName("osk");
        //        //如果键盘已打开，则进行关闭操作
        //        if (pro != null && pro.Length > 0)
        //        {
        //            CloseKeyBoardFun();
        //            return;
        //        }

        //        // Get the name of the On screen keyboard
        //        string processName = System.IO.Path.GetFileNameWithoutExtension(OnScreenKeyboadApplication);

        //        // Check whether the application is not running 
        //        var query = from process in Process.GetProcesses()
        //                    where process.ProcessName == processName
        //                    select process;

        //        var keyboardProcess = query.FirstOrDefault();

        //        // launch it if it doesn't exist
        //        if (keyboardProcess == null)
        //        {
        //            IntPtr ptr = new IntPtr(); ;
        //            bool sucessfullyDisabledWow64Redirect = false;

        //            // Disable x64 directory virtualization if we're on x64,
        //            // otherwise keyboard launch will fail.
        //            if (System.Environment.Is64BitOperatingSystem)
        //            {
        //                sucessfullyDisabledWow64Redirect = Wow64DisableWow64FsRedirection(ref ptr);
        //            }

        //            // osk.exe is in windows/system folder. So we can directky call it without path
        //            using (Process osk = new Process())
        //            {
        //                osk.StartInfo.FileName = OnScreenKeyboadApplication;
        //                osk.Start();
        //                //osk.WaitForInputIdle(2000);
        //            }

        //            // Re-enable directory virtualisation if it was disabled.
        //            if (System.Environment.Is64BitOperatingSystem)
        //                if (sucessfullyDisabledWow64Redirect)
        //                    Wow64RevertWow64FsRedirection(ptr);
        //        }
        //        else
        //        {
        //            // Bring keyboard to the front if it's already running
        //            var windowHandle = keyboardProcess.MainWindowHandle;
        //            SendMessage(windowHandle, WM_SYSCOMMAND, new IntPtr(SC_RESTORE), new IntPtr(0));
        //        }

        //    }
        //    catch (Exception ex)
        //    {
        //        //LogUtil.WriteLog(MethodBase.GetCurrentMethod().Name, LogUtil.ERROE, ex.Message);
        //        //LogUtil.WriteLog(MethodBase.GetCurrentMethod().Name, LogUtil.ERROE, ex.StackTrace);
        //    }

        //}


        ///// <summary>
        ///// 关闭系统软键盘
        ///// </summary>
        //public static void CloseKeyBoardFun()
        //{
        //    try
        //    {
        //        Process[] pros = Process.GetProcessesByName("osk");
        //        foreach (Process p in pros)
        //        {
        //            p.Kill();
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        //LogUtil.WriteLog(MethodBase.GetCurrentMethod().Name, LogUtil.ERROE, ex.Message);
        //        //LogUtil.WriteLog(MethodBase.GetCurrentMethod().Name, LogUtil.ERROE, ex.StackTrace);
        //    }

        //}


    }






}
