491 lines
14 KiB
C#
491 lines
14 KiB
C#
using FluentTerminal.Models.Enums;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Net.NetworkInformation;
|
|
using System.Windows.Input;
|
|
|
|
namespace FluentTerminal.SystemTray
|
|
{
|
|
public static class Utilities
|
|
{
|
|
private const int FirstDynamicPort = 49151;
|
|
|
|
public static int? GetAvailablePort()
|
|
{
|
|
var usedPorts = new List<int>();
|
|
|
|
var properties = IPGlobalProperties.GetIPGlobalProperties();
|
|
|
|
var connections = properties.GetActiveTcpConnections();
|
|
usedPorts.AddRange(connections.Where(c => c.LocalEndPoint.Port >= FirstDynamicPort).Select(c => c.LocalEndPoint.Port));
|
|
|
|
var endPoints = properties.GetActiveTcpListeners();
|
|
usedPorts.AddRange(endPoints.Where(e => e.Port >= FirstDynamicPort).Select(e => e.Port));
|
|
|
|
endPoints = properties.GetActiveUdpListeners();
|
|
usedPorts.AddRange(endPoints.Where(e => e.Port >= FirstDynamicPort).Select(e => e.Port));
|
|
|
|
usedPorts.Sort();
|
|
|
|
for (var i = FirstDynamicPort; i < UInt16.MaxValue; i++)
|
|
{
|
|
if (!usedPorts.Contains(i))
|
|
{
|
|
return i;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static Key ExtendVirtualKeyToInputKey(ExtendedVirtualKey key)
|
|
{
|
|
switch (key)
|
|
{
|
|
case ExtendedVirtualKey.Cancel:
|
|
return Key.Cancel;
|
|
|
|
case ExtendedVirtualKey.Back:
|
|
return Key.Back;
|
|
|
|
case ExtendedVirtualKey.Tab:
|
|
return Key.Tab;
|
|
|
|
case ExtendedVirtualKey.Clear:
|
|
return Key.Clear;
|
|
|
|
case ExtendedVirtualKey.Enter:
|
|
return Key.Enter;
|
|
|
|
case ExtendedVirtualKey.Shift:
|
|
return Key.LeftShift;
|
|
|
|
case ExtendedVirtualKey.Menu:
|
|
return Key.LeftAlt;
|
|
|
|
case ExtendedVirtualKey.Pause:
|
|
return Key.Pause;
|
|
|
|
case ExtendedVirtualKey.CapitalLock:
|
|
return Key.CapsLock;
|
|
|
|
case ExtendedVirtualKey.Kana:
|
|
return Key.KanaMode;
|
|
|
|
case ExtendedVirtualKey.Junja:
|
|
return Key.JunjaMode;
|
|
|
|
case ExtendedVirtualKey.Final:
|
|
return Key.FinalMode;
|
|
|
|
case ExtendedVirtualKey.Kanji:
|
|
return Key.KanjiMode;
|
|
|
|
case ExtendedVirtualKey.Escape:
|
|
return Key.Escape;
|
|
|
|
case ExtendedVirtualKey.Convert:
|
|
return Key.ImeConvert;
|
|
|
|
case ExtendedVirtualKey.NonConvert:
|
|
return Key.ImeNonConvert;
|
|
|
|
case ExtendedVirtualKey.Accept:
|
|
return Key.ImeAccept;
|
|
|
|
case ExtendedVirtualKey.ModeChange:
|
|
return Key.ImeModeChange;
|
|
|
|
case ExtendedVirtualKey.Space:
|
|
return Key.Space;
|
|
|
|
case ExtendedVirtualKey.PageUp:
|
|
return Key.PageUp;
|
|
|
|
case ExtendedVirtualKey.PageDown:
|
|
return Key.PageDown;
|
|
|
|
case ExtendedVirtualKey.End:
|
|
return Key.End;
|
|
|
|
case ExtendedVirtualKey.Home:
|
|
return Key.Home;
|
|
|
|
case ExtendedVirtualKey.Left:
|
|
return Key.Left;
|
|
|
|
case ExtendedVirtualKey.Up:
|
|
return Key.Up;
|
|
|
|
case ExtendedVirtualKey.Right:
|
|
return Key.Right;
|
|
|
|
case ExtendedVirtualKey.Down:
|
|
return Key.Down;
|
|
|
|
case ExtendedVirtualKey.Select:
|
|
return Key.Select;
|
|
|
|
case ExtendedVirtualKey.Print:
|
|
return Key.Print;
|
|
|
|
case ExtendedVirtualKey.Execute:
|
|
return Key.Execute;
|
|
|
|
case ExtendedVirtualKey.Snapshot:
|
|
return Key.Snapshot;
|
|
|
|
case ExtendedVirtualKey.Insert:
|
|
return Key.Insert;
|
|
|
|
case ExtendedVirtualKey.Delete:
|
|
return Key.Delete;
|
|
|
|
case ExtendedVirtualKey.Help:
|
|
return Key.Help;
|
|
|
|
case ExtendedVirtualKey.Number0:
|
|
return Key.D0;
|
|
|
|
case ExtendedVirtualKey.Number1:
|
|
return Key.D1;
|
|
|
|
case ExtendedVirtualKey.Number2:
|
|
return Key.D2;
|
|
|
|
case ExtendedVirtualKey.Number3:
|
|
return Key.D3;
|
|
|
|
case ExtendedVirtualKey.Number4:
|
|
return Key.D4;
|
|
|
|
case ExtendedVirtualKey.Number5:
|
|
return Key.D5;
|
|
|
|
case ExtendedVirtualKey.Number6:
|
|
return Key.D6;
|
|
|
|
case ExtendedVirtualKey.Number7:
|
|
return Key.D7;
|
|
|
|
case ExtendedVirtualKey.Number8:
|
|
return Key.D8;
|
|
|
|
case ExtendedVirtualKey.Number9:
|
|
return Key.D9;
|
|
|
|
case ExtendedVirtualKey.A:
|
|
return Key.A;
|
|
|
|
case ExtendedVirtualKey.B:
|
|
return Key.B;
|
|
|
|
case ExtendedVirtualKey.C:
|
|
return Key.C;
|
|
|
|
case ExtendedVirtualKey.D:
|
|
return Key.D;
|
|
|
|
case ExtendedVirtualKey.E:
|
|
return Key.E;
|
|
|
|
case ExtendedVirtualKey.F:
|
|
return Key.F;
|
|
|
|
case ExtendedVirtualKey.G:
|
|
return Key.G;
|
|
|
|
case ExtendedVirtualKey.H:
|
|
return Key.H;
|
|
|
|
case ExtendedVirtualKey.I:
|
|
return Key.I;
|
|
|
|
case ExtendedVirtualKey.J:
|
|
return Key.J;
|
|
|
|
case ExtendedVirtualKey.K:
|
|
return Key.K;
|
|
|
|
case ExtendedVirtualKey.L:
|
|
return Key.L;
|
|
|
|
case ExtendedVirtualKey.M:
|
|
return Key.M;
|
|
|
|
case ExtendedVirtualKey.N:
|
|
return Key.N;
|
|
|
|
case ExtendedVirtualKey.O:
|
|
return Key.O;
|
|
|
|
case ExtendedVirtualKey.P:
|
|
return Key.P;
|
|
|
|
case ExtendedVirtualKey.Q:
|
|
return Key.Q;
|
|
|
|
case ExtendedVirtualKey.R:
|
|
return Key.R;
|
|
|
|
case ExtendedVirtualKey.S:
|
|
return Key.S;
|
|
|
|
case ExtendedVirtualKey.T:
|
|
return Key.T;
|
|
|
|
case ExtendedVirtualKey.U:
|
|
return Key.U;
|
|
|
|
case ExtendedVirtualKey.V:
|
|
return Key.V;
|
|
|
|
case ExtendedVirtualKey.W:
|
|
return Key.W;
|
|
|
|
case ExtendedVirtualKey.X:
|
|
return Key.X;
|
|
|
|
case ExtendedVirtualKey.Y:
|
|
return Key.Y;
|
|
|
|
case ExtendedVirtualKey.Z:
|
|
return Key.Z;
|
|
|
|
case ExtendedVirtualKey.LeftWindows:
|
|
return Key.LWin;
|
|
|
|
case ExtendedVirtualKey.RightWindows:
|
|
return Key.RWin;
|
|
|
|
case ExtendedVirtualKey.Application:
|
|
return Key.Apps;
|
|
|
|
case ExtendedVirtualKey.Sleep:
|
|
return Key.Sleep;
|
|
|
|
case ExtendedVirtualKey.NumberPad0:
|
|
return Key.NumPad0;
|
|
|
|
case ExtendedVirtualKey.NumberPad1:
|
|
return Key.NumPad1;
|
|
|
|
case ExtendedVirtualKey.NumberPad2:
|
|
return Key.NumPad2;
|
|
|
|
case ExtendedVirtualKey.NumberPad3:
|
|
return Key.NumPad3;
|
|
|
|
case ExtendedVirtualKey.NumberPad4:
|
|
return Key.NumPad4;
|
|
|
|
case ExtendedVirtualKey.NumberPad5:
|
|
return Key.NumPad5;
|
|
|
|
case ExtendedVirtualKey.NumberPad6:
|
|
return Key.NumPad6;
|
|
|
|
case ExtendedVirtualKey.NumberPad7:
|
|
return Key.NumPad7;
|
|
|
|
case ExtendedVirtualKey.NumberPad8:
|
|
return Key.NumPad8;
|
|
|
|
case ExtendedVirtualKey.NumberPad9:
|
|
return Key.NumPad9;
|
|
|
|
case ExtendedVirtualKey.Multiply:
|
|
return Key.Multiply;
|
|
|
|
case ExtendedVirtualKey.Add:
|
|
return Key.Add;
|
|
|
|
case ExtendedVirtualKey.Separator:
|
|
return Key.Separator;
|
|
|
|
case ExtendedVirtualKey.Subtract:
|
|
return Key.Subtract;
|
|
|
|
case ExtendedVirtualKey.Decimal:
|
|
return Key.Decimal;
|
|
|
|
case ExtendedVirtualKey.Divide:
|
|
return Key.Divide;
|
|
|
|
case ExtendedVirtualKey.F1:
|
|
return Key.F1;
|
|
|
|
case ExtendedVirtualKey.F2:
|
|
return Key.F2;
|
|
|
|
case ExtendedVirtualKey.F3:
|
|
return Key.F3;
|
|
|
|
case ExtendedVirtualKey.F4:
|
|
return Key.F4;
|
|
|
|
case ExtendedVirtualKey.F5:
|
|
return Key.F5;
|
|
|
|
case ExtendedVirtualKey.F6:
|
|
return Key.F6;
|
|
|
|
case ExtendedVirtualKey.F7:
|
|
return Key.F7;
|
|
|
|
case ExtendedVirtualKey.F8:
|
|
return Key.F8;
|
|
|
|
case ExtendedVirtualKey.F9:
|
|
return Key.F9;
|
|
|
|
case ExtendedVirtualKey.F10:
|
|
return Key.F10;
|
|
|
|
case ExtendedVirtualKey.F11:
|
|
return Key.F11;
|
|
|
|
case ExtendedVirtualKey.F12:
|
|
return Key.F12;
|
|
|
|
case ExtendedVirtualKey.F13:
|
|
return Key.F13;
|
|
|
|
case ExtendedVirtualKey.F14:
|
|
return Key.F14;
|
|
|
|
case ExtendedVirtualKey.F15:
|
|
return Key.F15;
|
|
|
|
case ExtendedVirtualKey.F16:
|
|
return Key.F16;
|
|
|
|
case ExtendedVirtualKey.F17:
|
|
return Key.F17;
|
|
|
|
case ExtendedVirtualKey.F18:
|
|
return Key.F18;
|
|
|
|
case ExtendedVirtualKey.F19:
|
|
return Key.F19;
|
|
|
|
case ExtendedVirtualKey.F20:
|
|
return Key.F20;
|
|
|
|
case ExtendedVirtualKey.F21:
|
|
return Key.F21;
|
|
|
|
case ExtendedVirtualKey.F22:
|
|
return Key.F22;
|
|
|
|
case ExtendedVirtualKey.F23:
|
|
return Key.F23;
|
|
|
|
case ExtendedVirtualKey.F24:
|
|
return Key.F24;
|
|
|
|
case ExtendedVirtualKey.NumberKeyLock:
|
|
return Key.NumLock;
|
|
|
|
case ExtendedVirtualKey.Scroll:
|
|
return Key.Scroll;
|
|
|
|
case ExtendedVirtualKey.LeftShift:
|
|
return Key.LeftShift;
|
|
|
|
case ExtendedVirtualKey.RightShift:
|
|
return Key.RightShift;
|
|
|
|
case ExtendedVirtualKey.LeftControl:
|
|
return Key.LeftCtrl;
|
|
|
|
case ExtendedVirtualKey.RightControl:
|
|
return Key.RightCtrl;
|
|
|
|
case ExtendedVirtualKey.LeftMenu:
|
|
return Key.LeftAlt;
|
|
|
|
case ExtendedVirtualKey.RightMenu:
|
|
return Key.RightAlt;
|
|
|
|
case ExtendedVirtualKey.GoBack:
|
|
return Key.BrowserBack;
|
|
|
|
case ExtendedVirtualKey.GoForward:
|
|
return Key.BrowserForward;
|
|
|
|
case ExtendedVirtualKey.Refresh:
|
|
return Key.BrowserRefresh;
|
|
|
|
case ExtendedVirtualKey.Stop:
|
|
return Key.BrowserStop;
|
|
|
|
case ExtendedVirtualKey.Search:
|
|
return Key.BrowserSearch;
|
|
|
|
case ExtendedVirtualKey.Favorites:
|
|
return Key.BrowserFavorites;
|
|
|
|
case ExtendedVirtualKey.GoHome:
|
|
return Key.BrowserHome;
|
|
|
|
case ExtendedVirtualKey.VolumeMute:
|
|
return Key.VolumeMute;
|
|
|
|
case ExtendedVirtualKey.VolumeDown:
|
|
return Key.VolumeDown;
|
|
|
|
case ExtendedVirtualKey.VolumeUp:
|
|
return Key.VolumeUp;
|
|
|
|
case ExtendedVirtualKey.MediaNext:
|
|
return Key.MediaNextTrack;
|
|
|
|
case ExtendedVirtualKey.MediaPrevious:
|
|
return Key.MediaPreviousTrack;
|
|
|
|
case ExtendedVirtualKey.MediaStop:
|
|
return Key.MediaStop;
|
|
|
|
case ExtendedVirtualKey.MediaPlayPause:
|
|
return Key.MediaPlayPause;
|
|
|
|
case ExtendedVirtualKey.Plus:
|
|
return Key.OemPlus;
|
|
|
|
case ExtendedVirtualKey.Comma:
|
|
return Key.OemComma;
|
|
|
|
case ExtendedVirtualKey.Minus:
|
|
return Key.OemMinus;
|
|
|
|
case ExtendedVirtualKey.Period:
|
|
return Key.OemPeriod;
|
|
|
|
case ExtendedVirtualKey.OEM_1:
|
|
return Key.Oem1;
|
|
|
|
case ExtendedVirtualKey.OEM_2:
|
|
return Key.Oem1;
|
|
|
|
case ExtendedVirtualKey.OEM_3:
|
|
return Key.Oem3;
|
|
|
|
case ExtendedVirtualKey.OEM_5:
|
|
return Key.Oem5;
|
|
|
|
case ExtendedVirtualKey.OEM_6:
|
|
return Key.Oem6;
|
|
|
|
case ExtendedVirtualKey.OEM_7:
|
|
return Key.Oem7;
|
|
|
|
case ExtendedVirtualKey.OEM_102:
|
|
return Key.Oem102;
|
|
|
|
default:
|
|
return Key.None;
|
|
}
|
|
}
|
|
}
|
|
} |