|
|
@@ -9,25 +9,11 @@ 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); |
|
|
@@ -35,100 +21,65 @@ namespace BPASmartClient.Helper |
|
|
|
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 |
|
|
|
//获得当前登录的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[] pro = Process.GetProcessesByName("osk"); |
|
|
|
//说明已经存在,不再进行调用 |
|
|
|
if (pro != null && pro.Length > 0) |
|
|
|
return; |
|
|
|
IntPtr ptr = new IntPtr(); |
|
|
|
bool isWow64FsRedirectionDisabled = Wow64DisableWow64FsRedirection(ref ptr); |
|
|
|
if (isWow64FsRedirectionDisabled) |
|
|
|
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.Start(@"C:\WINDOWS\system32\osk.exe"); |
|
|
|
bool isWow64FsRedirectionReverted = Wow64RevertWow64FsRedirection(ptr); |
|
|
|
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; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//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) |
|
|
|
else |
|
|
|
{ |
|
|
|
//logger.Error(ex.Message); |
|
|
|
} |
|
|
|
} |
|
|
|
//创建启动对象 |
|
|
|
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 |
|
|
|
//退出应用程序 |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -136,113 +87,111 @@ namespace BPASmartClient.Helper |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//[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(); |
|
|
|
//[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"; |
|
|
|
|
|
|
|
// // 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); |
|
|
|
// } |
|
|
|
///// <summary> |
|
|
|
///// 启用系统软键盘 |
|
|
|
///// </summary> |
|
|
|
//public static void OpenKeyBoardFun() |
|
|
|
//{ |
|
|
|
// try |
|
|
|
// { |
|
|
|
// //判断软键盘是否进程是否已经存在,如果不存在进行调用 |
|
|
|
// Process[] pro = Process.GetProcessesByName("osk"); |
|
|
|
// //如果键盘已打开,则进行关闭操作 |
|
|
|
// if (pro != null && pro.Length > 0) |
|
|
|
// { |
|
|
|
// CloseKeyBoardFun(); |
|
|
|
// return; |
|
|
|
// } |
|
|
|
|
|
|
|
// // 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); |
|
|
|
// } |
|
|
|
// // Get the name of the On screen keyboard |
|
|
|
// string processName = System.IO.Path.GetFileNameWithoutExtension(OnScreenKeyboadApplication); |
|
|
|
|
|
|
|
// // 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)); |
|
|
|
// } |
|
|
|
// // Check whether the application is not running |
|
|
|
// var query = from process in Process.GetProcesses() |
|
|
|
// where process.ProcessName == processName |
|
|
|
// select process; |
|
|
|
|
|
|
|
// } |
|
|
|
// catch (Exception ex) |
|
|
|
// { |
|
|
|
// //LogUtil.WriteLog(MethodBase.GetCurrentMethod().Name, LogUtil.ERROE, ex.Message); |
|
|
|
// //LogUtil.WriteLog(MethodBase.GetCurrentMethod().Name, LogUtil.ERROE, ex.StackTrace); |
|
|
|
// } |
|
|
|
// 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); |
|
|
|
// } |
|
|
|
|
|
|
|
///// <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); |
|
|
|
// } |
|
|
|
|
|
|
|
//} |
|
|
|
// // 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); |
|
|
|
// } |
|
|
|
|
|
|
|
//} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |