// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. using System.Diagnostics; using System.IO.Pipes; using System.Net; using System.Net.Http; using System.Reflection; using Microsoft.Win32; namespace PenLauncher; /// /// Program that either registers or unregisters itself as a click note handler. /// Upon click note calls a local HTTP server with a GET request. /// internal class Program { /// /// The click note registry key /// private const string CLICK_NOTE_KEY = "Software\\Microsoft\\Windows\\CurrentVersion\\ClickNote\\UserCustomization\\SingleClickBelowLock"; static void Main(string[] args) { if (!OperatingSystem.IsWindows()) { Console.WriteLine("The application is only supported on Windows."); return; } if (args.Length == 1) { switch (args[0]) { case "--register": Debug.Assert(Environment.ProcessPath != null); RegistryKey key = Registry.CurrentUser.CreateSubKey(CLICK_NOTE_KEY, true); key.SetValue("CustomAppPath", Environment.ProcessPath); key.SetValue("Override", 0x3); key.SetValue("PenWorkspaceVerb", 0x0); break; case "--unregister": Registry.CurrentUser.DeleteSubKey(CLICK_NOTE_KEY); break; default: Console.WriteLine($"The supplied command '{args[0]}' is not recognized."); break; } } else if (args.Length == 0) { try { using NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "TypeAgent\\speech", PipeDirection.Out); pipeClient.Connect(); using StreamWriter writer = new StreamWriter(pipeClient) { AutoFlush = true }; string message = "triggerRecognitionOnce"; writer.Write(message); Console.WriteLine($"Sent to server: {message}"); } catch (Exception ex) { Console.WriteLine("Unable to connect to the pipe."); } } else { Console.WriteLine("Unexpected command line arguments."); } } }