From 94ea337eee1ffa1511c2b1652397b2fc35068b23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A6=82=E6=84=8F=20=E5=BD=AD?= <2417589739@qq.com> Date: Mon, 20 Jun 2022 18:15:08 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Pages/View/LoginView.xaml | 35 ++ .../Pages/View/LoginView.xaml.cs | 27 ++ .../Pages/ViewModel/LoginViewModel.cs | 18 ++ BPASmartClient.Helper/SystemUtils.cs | 299 ++++++++---------- DosingSystem/App.xaml | 3 +- DosingSystem/App.xaml.cs | 12 + .../BPASmartClient.DosingSystem.csproj | 1 + DosingSystem/View/AdminstratorsView.xaml | 2 + DosingSystem/View/MainWindow.xaml.cs | 4 + DosingSystem/ViewModel/MainViewModel.cs | 2 +- 10 files changed, 225 insertions(+), 178 deletions(-) create mode 100644 BPASmartClient.CustomResource/Pages/View/LoginView.xaml create mode 100644 BPASmartClient.CustomResource/Pages/View/LoginView.xaml.cs create mode 100644 BPASmartClient.CustomResource/Pages/ViewModel/LoginViewModel.cs diff --git a/BPASmartClient.CustomResource/Pages/View/LoginView.xaml b/BPASmartClient.CustomResource/Pages/View/LoginView.xaml new file mode 100644 index 00000000..0dd17295 --- /dev/null +++ b/BPASmartClient.CustomResource/Pages/View/LoginView.xaml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + diff --git a/BPASmartClient.CustomResource/Pages/View/LoginView.xaml.cs b/BPASmartClient.CustomResource/Pages/View/LoginView.xaml.cs new file mode 100644 index 00000000..259f7886 --- /dev/null +++ b/BPASmartClient.CustomResource/Pages/View/LoginView.xaml.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace BPASmartClient.CustomResource.Pages.View +{ + /// + /// LoginView.xaml 的交互逻辑 + /// + public partial class LoginView : Window + { + public LoginView() + { + InitializeComponent(); + } + } +} diff --git a/BPASmartClient.CustomResource/Pages/ViewModel/LoginViewModel.cs b/BPASmartClient.CustomResource/Pages/ViewModel/LoginViewModel.cs new file mode 100644 index 00000000..0d805e67 --- /dev/null +++ b/BPASmartClient.CustomResource/Pages/ViewModel/LoginViewModel.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Toolkit.Mvvm.ComponentModel; +using Microsoft.Toolkit.Mvvm.Input; + +namespace BPASmartClient.CustomResource.Pages.ViewModel +{ + public class LoginViewModel : ObservableObject + { + public LoginViewModel() + { + + } + } +} diff --git a/BPASmartClient.Helper/SystemUtils.cs b/BPASmartClient.Helper/SystemUtils.cs index c31c2ad1..fa693d78 100644 --- a/BPASmartClient.Helper/SystemUtils.cs +++ b/BPASmartClient.Helper/SystemUtils.cs @@ -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"; - ///// - ///// 启用系统软键盘 - ///// - //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); - // } +///// +///// 启用系统软键盘 +///// +//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); +// } - ///// - ///// 关闭系统软键盘 - ///// - //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); +// } +//} +///// +///// 关闭系统软键盘 +///// +//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); +// } + +//} -} diff --git a/DosingSystem/App.xaml b/DosingSystem/App.xaml index bc96f972..adb19107 100644 --- a/DosingSystem/App.xaml +++ b/DosingSystem/App.xaml @@ -3,8 +3,7 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:con="clr-namespace:BPASmartClient.CustomResource.Converters;assembly=BPASmartClient.CustomResource" - xmlns:local="clr-namespace:BPASmartClient.DosingSystem" - StartupUri="View/MainWindow.xaml"> + xmlns:local="clr-namespace:BPASmartClient.DosingSystem"> diff --git a/DosingSystem/App.xaml.cs b/DosingSystem/App.xaml.cs index 80265bc7..f8df83f7 100644 --- a/DosingSystem/App.xaml.cs +++ b/DosingSystem/App.xaml.cs @@ -5,6 +5,8 @@ using System.Data; using System.Linq; using System.Threading.Tasks; using System.Windows; +using BPASmartClient.CustomResource.Pages.View; +using BPASmartClient.DosingSystem.View; namespace BPASmartClient.DosingSystem { @@ -13,5 +15,15 @@ namespace BPASmartClient.DosingSystem /// public partial class App : Application { + MainWindow mw = new MainWindow(); + + protected override void OnStartup(StartupEventArgs e) + { + base.OnStartup(e); + mw.Show(); + //LoginView lv = new LoginView(); + //var res = lv.ShowDialog(); + //if (res != null && res == true) mw.Show(); + } } } diff --git a/DosingSystem/BPASmartClient.DosingSystem.csproj b/DosingSystem/BPASmartClient.DosingSystem.csproj index ea23d1a5..341c5572 100644 --- a/DosingSystem/BPASmartClient.DosingSystem.csproj +++ b/DosingSystem/BPASmartClient.DosingSystem.csproj @@ -7,6 +7,7 @@ true app.manifest hbl.ico + AnyCPU diff --git a/DosingSystem/View/AdminstratorsView.xaml b/DosingSystem/View/AdminstratorsView.xaml index 13178b56..a0bb221e 100644 --- a/DosingSystem/View/AdminstratorsView.xaml +++ b/DosingSystem/View/AdminstratorsView.xaml @@ -12,9 +12,11 @@ d:DesignWidth="800" Loaded="UserControl_Loaded" mc:Ignorable="d"> + +