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
{
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 ShowScreenKeyboard()
{
//获得当前登录的Windows用户标示
System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);
//判断当前登录用户是否为管理员
if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator))
{
try
{
Process[] pros = Process.GetProcessesByName("TabTip");
string path = "C:/Program Files/Common Files/microsoft shared/ink/TabTip.exe";
if (File.Exists(path)) 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);
}
}
}
catch (Exception)
{
throw;
}
}
else
{
//创建启动对象
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.FileName = "";//Application.ExecutablePath;//设置运行文件
startInfo.Arguments = "";// String.Join(" ", args); //设置启动参数
startInfo.Verb = "runas"; //设置启动动作,确保以管理员身份运行
System.Diagnostics.Process.Start(startInfo); //如果不是管理员,则启动UAC
//退出应用程序
}
}
}
}
//[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";
/////
///// 启用系统软键盘
/////
//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);
// }
//}
/////
///// 关闭系统软键盘
/////
//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);
// }
//}