using CoreScanner; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Automation; 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; using System.Xml; namespace SafeBagDE70 { /// /// Interaction logic for WelcomeWindow.xaml /// public partial class WelcomeUC : UserControl { public string? QRCodeContent = null; public string? PinCode = null; public bool IsAuthenticated = false; public CCoreScannerClass? cCoreScannerClass=null; public WelcomeUC() { InitializeComponent(); InitQRCodeScanner(); Loaded += WelcomeUC_Loaded; } private void WelcomeUC_Loaded(object sender, RoutedEventArgs e) { AppData.IsAuthenticated = false; } public void Init() { AppData.IsAuthenticated = false; AppData.CurrentCustomerAccount = null; lblPincodeError.Content = ""; PinCodeBox.Text = ""; } private void LoginButton_Click(object sender, RoutedEventArgs e) { string pin = PinCodeBox.Text; if (ValidatePin(pin)) { PinCode=PinCodeBox.Text.ToString(); if (AppData.customerAccounts != null) { CustomerAccount? cca = null; if (PinCode != null) { var strPincode = PinCode.ToUpper(); cca = AppData.customerAccounts.Where(x => x.PINCode == strPincode).FirstOrDefault(); } if (cca != null) { AppData.IsAuthenticated=true; AppData.CurrentCustomerAccount=cca; ((MainWindow)Application.Current.MainWindow).ShowDepositScreen(); //DialogResult = true; //this.Close(); } else { lblPincodeError.Content = "PINCODE không đúng, vui lòng thử lại"; } } } else { MessageBox.Show("Invalid PIN. Please try again."); } } private void ForgotPin_Click(object sender, RoutedEventArgs e) { MessageBox.Show("Forgot PIN clicked."); } private void Help_Click(object sender, RoutedEventArgs e) { MessageBox.Show("Help clicked."); } private bool ValidatePin(string pin) { return true; } private async void PinCodeButton_Click(object sender, RoutedEventArgs e) { var onScreenKeyboardProcess = new ProcessStartInfo("osk.exe") { UseShellExecute = true }; try { //var progFiles = @"C:\Program Files\Common Files\Microsoft Shared\ink"; //var keyboardPath = System.IO.Path.Combine(progFiles, "TabTip.exe"); //Process.Start(keyboardPath); // AutomationElement.FromHandle(-1); // string keyboardPath = @"C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe"; // Process.Start(keyboardPath); //await Launcher.LaunchUriAsync(new Uri("ms-inputapp://")); //var onScreenKeyboardProcess = new ProcessStartInfo(@"C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe") //{ // UseShellExecute = true //}; //Process.Start(onScreenKeyboardProcess); QrCodePanel.Visibility = Visibility.Collapsed; PinCodePanel.Visibility = Visibility.Visible; cCoreScannerClass.BarcodeEvent -= new _ICoreScannerEvents_BarcodeEventEventHandler(OnBarcodeEvent); } catch { } } private void btnQRCodeLogin_Click(object sender, RoutedEventArgs e) { PinCodePanel.Visibility = Visibility.Collapsed; QrCodePanel.Visibility=Visibility.Visible; cCoreScannerClass.BarcodeEvent += new _ICoreScannerEvents_BarcodeEventEventHandler(OnBarcodeEvent); } public void InitQRCodeScanner() { try { // Instantiate CoreScanner Class cCoreScannerClass = new CCoreScannerClass(); // Call Open API short[] scannerTypes = new short[1]; // Scanner Types you are interested in scannerTypes[0] = 1; // 1 for all scanner types short numberOfScannerTypes = 1; // Size of the scannerTypes array int status; // Extended API return code cCoreScannerClass.Open(0, scannerTypes, numberOfScannerTypes, out status); // Subscribe for barcode events in cCoreScannerClass // Let's subscribe for events int opcode = 1001; // Method for Subscribe events string outXML; // XML Output string inXML = "" + "" + "1" + // Number of events you want to subscribe "1" + // Comma separated event IDs "" + ""; cCoreScannerClass.ExecCommand(opcode, ref inXML, out outXML, out status); } catch (Exception exp) { Console.WriteLine("Something wrong please check... " + exp.Message); } } private void OnBarcodeEvent(short eventType, ref string pscanData) { string xmlString = pscanData; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xmlString); XmlNode rawDataNode = xmlDoc.SelectSingleNode("//datalabel"); string rawDataHex = rawDataNode.InnerText.Trim(); QRCodeContent = HexStringToString(rawDataHex); this.Dispatcher.Invoke(() => { if (AppData.customerAccounts != null) { CustomerAccount? cca = null; if (QRCodeContent != null) { cca = AppData.customerAccounts.Where(x => x.QRCode == QRCodeContent).FirstOrDefault(); } if (cca != null) { cCoreScannerClass.BarcodeEvent -= new _ICoreScannerEvents_BarcodeEventEventHandler(OnBarcodeEvent); AppData.IsAuthenticated = true; AppData.CurrentCustomerAccount = cca; ((MainWindow)Application.Current.MainWindow).ShowDepositScreen(); } else { lblQRcodeError.Content = "QRCODE không đúng, vui lòng thử lại"; } } }); } static string HexStringToString(string hexString) { string[] hexValues = hexString.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries); byte[] bytes = new byte[hexValues.Length]; for (int i = 0; i < hexValues.Length; i++) { bytes[i] = Convert.ToByte(hexValues[i], 16); } return Encoding.ASCII.GetString(bytes); } } }