Compare commits
	
		
			1 Commits
		
	
	
		
			main
			...
			8348865ce8
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 8348865ce8 | 
							
								
								
									
										6
									
								
								src/App.config
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										6
									
								
								src/App.config
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8" ?> | ||||||
|  | <configuration> | ||||||
|  |     <startup>  | ||||||
|  |         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> | ||||||
|  |     </startup> | ||||||
|  | </configuration> | ||||||
							
								
								
									
										199
									
								
								src/Form1.Designer.cs
									
									
									
										generated
									
									
									
										Executable file
									
								
							
							
						
						
									
										199
									
								
								src/Form1.Designer.cs
									
									
									
										generated
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,199 @@ | |||||||
|  | namespace TCPCommander | ||||||
|  | { | ||||||
|  |     partial class Form1 | ||||||
|  |     { | ||||||
|  |         /// <summary> | ||||||
|  |         /// Required designer variable. | ||||||
|  |         /// </summary> | ||||||
|  |         private System.ComponentModel.IContainer components = null; | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Clean up any resources being used. | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> | ||||||
|  |         protected override void Dispose(bool disposing) | ||||||
|  |         { | ||||||
|  |             if (disposing && (components != null)) | ||||||
|  |             { | ||||||
|  |                 components.Dispose(); | ||||||
|  |             } | ||||||
|  |             base.Dispose(disposing); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         #region Windows Form Designer generated code | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Required method for Designer support - do not modify | ||||||
|  |         /// the contents of this method with the code editor. | ||||||
|  |         /// </summary> | ||||||
|  |         private void InitializeComponent() | ||||||
|  |         { | ||||||
|  |             this.components = new System.ComponentModel.Container(); | ||||||
|  |             this.timer1 = new System.Windows.Forms.Timer(this.components); | ||||||
|  |             this.StartButton = new System.Windows.Forms.Button(); | ||||||
|  |             this.TCP_PortTextBox = new System.Windows.Forms.TextBox(); | ||||||
|  |             this.IPLabel = new System.Windows.Forms.Label(); | ||||||
|  |             this.TCP_PortLabel = new System.Windows.Forms.Label(); | ||||||
|  |             this.TCP_AvailablePortsLabel = new System.Windows.Forms.Label(); | ||||||
|  |             this.DebugButton = new System.Windows.Forms.Button(); | ||||||
|  |             this.UDP_AvailablePortsLabel = new System.Windows.Forms.Label(); | ||||||
|  |             this.UDP_PortLabel = new System.Windows.Forms.Label(); | ||||||
|  |             this.UDP_PortTextBox = new System.Windows.Forms.TextBox(); | ||||||
|  |             this.TCP_label = new System.Windows.Forms.Label(); | ||||||
|  |             this.label4 = new System.Windows.Forms.Label(); | ||||||
|  |             this.SuspendLayout(); | ||||||
|  |             //  | ||||||
|  |             // timer1 | ||||||
|  |             //  | ||||||
|  |             this.timer1.Tick += new System.EventHandler(this.timer1_Tick); | ||||||
|  |             //  | ||||||
|  |             // StartButton | ||||||
|  |             //  | ||||||
|  |             this.StartButton.Location = new System.Drawing.Point(385, 40); | ||||||
|  |             this.StartButton.Name = "StartButton"; | ||||||
|  |             this.StartButton.Size = new System.Drawing.Size(93, 38); | ||||||
|  |             this.StartButton.TabIndex = 2; | ||||||
|  |             this.StartButton.Text = "Start Server"; | ||||||
|  |             this.StartButton.UseVisualStyleBackColor = true; | ||||||
|  |             this.StartButton.Click += new System.EventHandler(this.StartButton_Click); | ||||||
|  |             //  | ||||||
|  |             // TCP_PortTextBox | ||||||
|  |             //  | ||||||
|  |             this.TCP_PortTextBox.Location = new System.Drawing.Point(59, 92); | ||||||
|  |             this.TCP_PortTextBox.MaxLength = 65535; | ||||||
|  |             this.TCP_PortTextBox.Name = "TCP_PortTextBox"; | ||||||
|  |             this.TCP_PortTextBox.Size = new System.Drawing.Size(100, 20); | ||||||
|  |             this.TCP_PortTextBox.TabIndex = 0; | ||||||
|  |             this.TCP_PortTextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.TCP_PortTextBox_KeyPress); | ||||||
|  |             this.TCP_PortTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.TCP_PortTextBox_KeyUp); | ||||||
|  |             //  | ||||||
|  |             // IPLabel | ||||||
|  |             //  | ||||||
|  |             this.IPLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); | ||||||
|  |             this.IPLabel.Location = new System.Drawing.Point(112, 5); | ||||||
|  |             this.IPLabel.Name = "IPLabel"; | ||||||
|  |             this.IPLabel.Size = new System.Drawing.Size(174, 65); | ||||||
|  |             this.IPLabel.TabIndex = 2; | ||||||
|  |             this.IPLabel.Text = "IP Address Here"; | ||||||
|  |             this.IPLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; | ||||||
|  |             //  | ||||||
|  |             // TCP_PortLabel | ||||||
|  |             //  | ||||||
|  |             this.TCP_PortLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); | ||||||
|  |             this.TCP_PortLabel.Location = new System.Drawing.Point(19, 143); | ||||||
|  |             this.TCP_PortLabel.Name = "TCP_PortLabel"; | ||||||
|  |             this.TCP_PortLabel.Size = new System.Drawing.Size(174, 53); | ||||||
|  |             this.TCP_PortLabel.TabIndex = 3; | ||||||
|  |             this.TCP_PortLabel.Text = "Port Here"; | ||||||
|  |             this.TCP_PortLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; | ||||||
|  |             //  | ||||||
|  |             // TCP_AvailablePortsLabel | ||||||
|  |             //  | ||||||
|  |             this.TCP_AvailablePortsLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); | ||||||
|  |             this.TCP_AvailablePortsLabel.Location = new System.Drawing.Point(59, 115); | ||||||
|  |             this.TCP_AvailablePortsLabel.Name = "TCP_AvailablePortsLabel"; | ||||||
|  |             this.TCP_AvailablePortsLabel.Size = new System.Drawing.Size(100, 23); | ||||||
|  |             this.TCP_AvailablePortsLabel.TabIndex = 4; | ||||||
|  |             this.TCP_AvailablePortsLabel.Text = "(1 - 65535)"; | ||||||
|  |             this.TCP_AvailablePortsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; | ||||||
|  |             //  | ||||||
|  |             // DebugButton | ||||||
|  |             //  | ||||||
|  |             this.DebugButton.Location = new System.Drawing.Point(385, 105); | ||||||
|  |             this.DebugButton.Name = "DebugButton"; | ||||||
|  |             this.DebugButton.Size = new System.Drawing.Size(93, 38); | ||||||
|  |             this.DebugButton.TabIndex = 3; | ||||||
|  |             this.DebugButton.Text = "Debug Info"; | ||||||
|  |             this.DebugButton.UseVisualStyleBackColor = true; | ||||||
|  |             this.DebugButton.Click += new System.EventHandler(this.DebugButton_Click); | ||||||
|  |             //  | ||||||
|  |             // UDP_AvailablePortsLabel | ||||||
|  |             //  | ||||||
|  |             this.UDP_AvailablePortsLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); | ||||||
|  |             this.UDP_AvailablePortsLabel.Location = new System.Drawing.Point(241, 115); | ||||||
|  |             this.UDP_AvailablePortsLabel.Name = "UDP_AvailablePortsLabel"; | ||||||
|  |             this.UDP_AvailablePortsLabel.Size = new System.Drawing.Size(100, 23); | ||||||
|  |             this.UDP_AvailablePortsLabel.TabIndex = 8; | ||||||
|  |             this.UDP_AvailablePortsLabel.Text = "(1 - 65535)"; | ||||||
|  |             this.UDP_AvailablePortsLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; | ||||||
|  |             //  | ||||||
|  |             // UDP_PortLabel | ||||||
|  |             //  | ||||||
|  |             this.UDP_PortLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); | ||||||
|  |             this.UDP_PortLabel.Location = new System.Drawing.Point(199, 143); | ||||||
|  |             this.UDP_PortLabel.Name = "UDP_PortLabel"; | ||||||
|  |             this.UDP_PortLabel.Size = new System.Drawing.Size(174, 53); | ||||||
|  |             this.UDP_PortLabel.TabIndex = 7; | ||||||
|  |             this.UDP_PortLabel.Text = "Port Here"; | ||||||
|  |             this.UDP_PortLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; | ||||||
|  |             //  | ||||||
|  |             // UDP_PortTextBox | ||||||
|  |             //  | ||||||
|  |             this.UDP_PortTextBox.Location = new System.Drawing.Point(241, 92); | ||||||
|  |             this.UDP_PortTextBox.MaxLength = 65535; | ||||||
|  |             this.UDP_PortTextBox.Name = "UDP_PortTextBox"; | ||||||
|  |             this.UDP_PortTextBox.Size = new System.Drawing.Size(100, 20); | ||||||
|  |             this.UDP_PortTextBox.TabIndex = 1; | ||||||
|  |             this.UDP_PortTextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.UDP_PortTextBox_KeyPress); | ||||||
|  |             this.UDP_PortTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.UDP_PortTextBox_KeyUp); | ||||||
|  |             //  | ||||||
|  |             // TCP_label | ||||||
|  |             //  | ||||||
|  |             this.TCP_label.AutoSize = true; | ||||||
|  |             this.TCP_label.Location = new System.Drawing.Point(95, 76); | ||||||
|  |             this.TCP_label.Name = "TCP_label"; | ||||||
|  |             this.TCP_label.Size = new System.Drawing.Size(28, 13); | ||||||
|  |             this.TCP_label.TabIndex = 9; | ||||||
|  |             this.TCP_label.Text = "TCP"; | ||||||
|  |             //  | ||||||
|  |             // label4 | ||||||
|  |             //  | ||||||
|  |             this.label4.AutoSize = true; | ||||||
|  |             this.label4.Location = new System.Drawing.Point(280, 76); | ||||||
|  |             this.label4.Name = "label4"; | ||||||
|  |             this.label4.Size = new System.Drawing.Size(30, 13); | ||||||
|  |             this.label4.TabIndex = 10; | ||||||
|  |             this.label4.Text = "UDP"; | ||||||
|  |             //  | ||||||
|  |             // Form1 | ||||||
|  |             //  | ||||||
|  |             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); | ||||||
|  |             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; | ||||||
|  |             this.ClientSize = new System.Drawing.Size(490, 200); | ||||||
|  |             this.Controls.Add(this.label4); | ||||||
|  |             this.Controls.Add(this.TCP_label); | ||||||
|  |             this.Controls.Add(this.UDP_AvailablePortsLabel); | ||||||
|  |             this.Controls.Add(this.UDP_PortLabel); | ||||||
|  |             this.Controls.Add(this.UDP_PortTextBox); | ||||||
|  |             this.Controls.Add(this.DebugButton); | ||||||
|  |             this.Controls.Add(this.TCP_AvailablePortsLabel); | ||||||
|  |             this.Controls.Add(this.TCP_PortLabel); | ||||||
|  |             this.Controls.Add(this.IPLabel); | ||||||
|  |             this.Controls.Add(this.TCP_PortTextBox); | ||||||
|  |             this.Controls.Add(this.StartButton); | ||||||
|  |             this.Name = "Form1"; | ||||||
|  |             this.Text = "TCPCommander Launcher"; | ||||||
|  |             this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); | ||||||
|  |             this.Load += new System.EventHandler(this.Form1_Load); | ||||||
|  |             this.ResumeLayout(false); | ||||||
|  |             this.PerformLayout(); | ||||||
|  |  | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         #endregion | ||||||
|  |  | ||||||
|  |         private System.Windows.Forms.Timer timer1; | ||||||
|  |         private System.Windows.Forms.Button StartButton; | ||||||
|  |         private System.Windows.Forms.TextBox TCP_PortTextBox; | ||||||
|  |         private System.Windows.Forms.Label IPLabel; | ||||||
|  |         private System.Windows.Forms.Label TCP_PortLabel; | ||||||
|  |         private System.Windows.Forms.Label TCP_AvailablePortsLabel; | ||||||
|  |         private System.Windows.Forms.Button DebugButton; | ||||||
|  |         private System.Windows.Forms.Label UDP_AvailablePortsLabel; | ||||||
|  |         private System.Windows.Forms.Label UDP_PortLabel; | ||||||
|  |         private System.Windows.Forms.TextBox UDP_PortTextBox; | ||||||
|  |         private System.Windows.Forms.Label TCP_label; | ||||||
|  |         private System.Windows.Forms.Label label4; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										995
									
								
								src/Form1.cs
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										995
									
								
								src/Form1.cs
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,995 @@ | |||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.ComponentModel; | ||||||
|  | using System.Data; | ||||||
|  | using System.Diagnostics; | ||||||
|  | using System.Drawing; | ||||||
|  | using System.Linq; | ||||||
|  | using System.Net; | ||||||
|  | using System.Net.NetworkInformation; | ||||||
|  | using System.Net.Sockets; | ||||||
|  | using System.Text; | ||||||
|  | using System.Threading.Tasks; | ||||||
|  | using System.Web; | ||||||
|  | using System.Windows.Forms; | ||||||
|  | using System.Management; | ||||||
|  | using Microsoft.Win32; | ||||||
|  | using System.Runtime.InteropServices; | ||||||
|  | using System.IO; | ||||||
|  | using System.Drawing.Imaging; | ||||||
|  | using System.Threading; | ||||||
|  | using Open.Nat; | ||||||
|  | using WinForms = System.Windows.Forms; | ||||||
|  |  | ||||||
|  | namespace TCPCommander | ||||||
|  | { | ||||||
|  |     public partial class Form1 : Form | ||||||
|  |     { | ||||||
|  |         public Form1() | ||||||
|  |         { | ||||||
|  |             InitializeComponent(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         WinForms.Timer ScreenshotTimer = new WinForms.Timer(); | ||||||
|  |  | ||||||
|  |         IPEndPoint TCP_ipEP; | ||||||
|  |         public static TcpClient TCP_client; | ||||||
|  |         public static TcpListener TCP_listener; | ||||||
|  |  | ||||||
|  |         IPEndPoint UDP_ipEP; | ||||||
|  |         public static UdpClient UDP_client; | ||||||
|  |  | ||||||
|  |         public static string IPstring; | ||||||
|  |  | ||||||
|  |         //IPAddress[] localIP; | ||||||
|  |          | ||||||
|  |         [DllImport("user32.dll")] | ||||||
|  |         public static extern bool GetCursorPos(out Point lpPoint); | ||||||
|  |  | ||||||
|  |         [DllImport("user32.dll", SetLastError = true)] | ||||||
|  |         public static extern bool SetCursorPos(int X, int Y); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         ImageCodecInfo jpgEncoder; | ||||||
|  |         System.Drawing.Imaging.Encoder encoder; | ||||||
|  |         EncoderParameters encoderparams; | ||||||
|  |         EncoderParameter encoderparam; | ||||||
|  |  | ||||||
|  |         Form3 f3; | ||||||
|  |         private void Form1_Load(object sender, EventArgs e) | ||||||
|  |         { | ||||||
|  |  | ||||||
|  |             StartButton.Enabled = false; | ||||||
|  |             IPLabel.Text = ""; | ||||||
|  |             TCP_PortLabel.Text = "Port: (Not Selected)"; | ||||||
|  |  | ||||||
|  |             f2 = new Form2(); | ||||||
|  |             f3 = new Form3(); | ||||||
|  |  | ||||||
|  |             f2.Hide(); | ||||||
|  |             f2.Text = "Server Status: Offline"; | ||||||
|  |             f2.IPLabel.Text = "Server Offline"; | ||||||
|  |             f2.LogTextBox.Location = new Point((this.Width) - (f2.LogTextBox.Size.Width / 2), f2.LogTextBox.Location.Y); | ||||||
|  |             f2.IPLabel.Location = new Point((this.Width) - (f2.IPLabel.Size.Width / 2), f2.IPLabel.Location.Y); | ||||||
|  |             f2.SessionTimeLabel.Location = new Point((this.Width) - (f2.IPLabel.Size.Width / 2), f2.SessionTimeLabel.Location.Y); | ||||||
|  |  | ||||||
|  |             f2.SessionTimeLabel.Text = "00:00:00"; | ||||||
|  |  | ||||||
|  |             f2.LogTextBox.ReadOnly = true; | ||||||
|  |             f2.LogTextBox.BackColor = System.Drawing.SystemColors.Window; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |             this.MinimumSize = this.Size; | ||||||
|  |             this.MaximumSize = this.Size; | ||||||
|  |  | ||||||
|  |             f2.MinimumSize = f2.Size; | ||||||
|  |             f2.MaximumSize = f2.Size; | ||||||
|  |             f3.Opacity = 0; | ||||||
|  |             f3.Show(); | ||||||
|  |             f3.Hide(); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |             Initialize(); | ||||||
|  |             timer1.Interval = 1000; | ||||||
|  |             timer1.Enabled = true; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |             jpgEncoder = GetEncoder(ImageFormat.Jpeg); | ||||||
|  |             encoder = System.Drawing.Imaging.Encoder.Quality; | ||||||
|  |             encoderparams = new EncoderParameters(1); | ||||||
|  |             encoderparam = new EncoderParameter(encoder, 100L); | ||||||
|  |  | ||||||
|  |             encoderparams.Param[0] = encoderparam; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         bool TCP_clientIsOpen; | ||||||
|  |         bool UDP_clientIsOpen; | ||||||
|  |         byte[] buffer = new byte[1]; | ||||||
|  |  | ||||||
|  |         int SessionTime = 0; | ||||||
|  |         bool ServerStatusChanged; | ||||||
|  |         private void timer1_Tick(object sender, EventArgs e) | ||||||
|  |         { | ||||||
|  |             if (StartServer) | ||||||
|  |             { | ||||||
|  |                 SessionTime++; | ||||||
|  |             } | ||||||
|  |             else if (SessionTime > 0) | ||||||
|  |             { | ||||||
|  |                 LogAdd("Session Ended @ " + DateTime.Now.ToString("MM/dd/yy") + " - " + DateTime.Now.ToString("HH:mm:ss")); | ||||||
|  |                 LogAdd("Session Lasted: " + Hour + " Hours : " + Minute + " Minutes : " + Second + " Seconds"); | ||||||
|  |                 SessionTime = 0; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (!(ServerStatusChanged == StartServer && !StartServer)) | ||||||
|  |             { | ||||||
|  |                 f2.SessionTimeLabel.Text = GetSessionTime(); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             ServerStatusChanged = StartServer; | ||||||
|  |  | ||||||
|  |             if (TCP_client != null) | ||||||
|  |             { | ||||||
|  |                 if (TCP_clientIsOpen) | ||||||
|  |                 { | ||||||
|  |                     if (TCP_client.Client.Poll(0, SelectMode.SelectRead)) | ||||||
|  |                     { | ||||||
|  |                         try | ||||||
|  |                         { | ||||||
|  |  | ||||||
|  |                             if (TCP_client.Client.Receive(buffer, SocketFlags.Peek) == 0) | ||||||
|  |                             { | ||||||
|  |                                 ResetServer(StartServer); | ||||||
|  |                             } | ||||||
|  |                         } catch (Exception ex) | ||||||
|  |                         { | ||||||
|  |                             Debug.WriteLine("EXCEPTION OCCURED: Type: " + ex.GetType().ToString() + "Message: " + ex.Message); | ||||||
|  |                             ResetServer(StartServer); | ||||||
|  |                             LogAdd("Exception Thrown: " + ex.GetType() + ":" + ex.Message); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |              | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         //NatDiscoverer discoverer; | ||||||
|  |         //NatDevice device; | ||||||
|  |         //IPAddress ip; | ||||||
|  |         //CancellationTokenSource cts; | ||||||
|  |         //NatDevice UPNPdevice; | ||||||
|  |         public async void PortForward(bool forward, bool alert = false) | ||||||
|  |         { | ||||||
|  |             if (!forward) | ||||||
|  |             { | ||||||
|  |                 if (alert) | ||||||
|  |                     MessageBox.Show("Alert: TCPCommander Server currently has UPnP disabled, so you cannot connect from outside the network", "TCPCommander Alert", MessageBoxButtons.OK, MessageBoxIcon.Information); | ||||||
|  |  | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             try | ||||||
|  |             { | ||||||
|  |                 var discoverer = new NatDiscoverer(); | ||||||
|  |                 var device = await discoverer.DiscoverDeviceAsync(); | ||||||
|  |                 await device.CreatePortMapAsync(new Mapping(Protocol.Tcp, int.Parse(TCP_PortTextBox.Text), int.Parse(TCP_PortTextBox.Text), "TCPCommander Server Map"));//"Inner Router")); | ||||||
|  |                 //await device.CreatePortMapAsync(new Mapping(Protocol.Tcp, 1700, 1800, "Outer Router")); | ||||||
|  |  | ||||||
|  |                 var sb = new StringBuilder(); | ||||||
|  |                 var ip = await device.GetExternalIPAsync(); | ||||||
|  |  | ||||||
|  |                 //sb.AppendFormat("\nAdded mapping: {0}:{1} -> 127.0.0.1:{2}\n", ip, TCP_PortLabel.Text, TCP_PortLabel.Text); | ||||||
|  |                 sb.AppendFormat("\n+------+-------------------------------+--------------------------------+------------------------------------+-------------------------+"); | ||||||
|  |                 sb.AppendFormat("\n| PROT | PUBLIC (Reacheable)           | PRIVATE (Your computer)        | Description                        |                         |"); | ||||||
|  |                 sb.AppendFormat("\n+------+----------------------+--------+-----------------------+--------+------------------------------------+-------------------------+"); | ||||||
|  |                 sb.AppendFormat("\n|      | IP Address           | Port   | IP Address            | Port   |                                    | Expires                 |"); | ||||||
|  |                 sb.AppendFormat("\n+------+----------------------+--------+-----------------------+--------+------------------------------------+-------------------------+"); | ||||||
|  |                 foreach (var mapping in await device.GetAllMappingsAsync()) | ||||||
|  |                 { | ||||||
|  |                     sb.AppendFormat("\n|  {5} | {0,-20} | {1,6} | {2,-21} | {3,6} | {4,-35}|{6,25}|", | ||||||
|  |                         ip, mapping.PublicPort, mapping.PrivateIP, mapping.PrivatePort, mapping.Description, mapping.Protocol == Protocol.Tcp ? "TCP" : "UDP", mapping.Expiration.ToLocalTime()); | ||||||
|  |                 } | ||||||
|  |                 sb.AppendFormat("\n+------+----------------------+--------+-----------------------+--------+------------------------------------+-------------------------+"); | ||||||
|  |                 Console.WriteLine(sb.ToString()); | ||||||
|  |             } | ||||||
|  |             catch (MappingException ex) | ||||||
|  |             { | ||||||
|  |                 Console.WriteLine(ex.Message); | ||||||
|  |                 Console.ReadLine(); | ||||||
|  |             } | ||||||
|  |             catch (WebException ex) | ||||||
|  |             { | ||||||
|  |                 Console.WriteLine(ex.Message); | ||||||
|  |                 Console.ReadLine(); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |             //try | ||||||
|  |             //{ | ||||||
|  |  | ||||||
|  |             //    discoverer = new NatDiscoverer(); | ||||||
|  |             //    device = await discoverer.DiscoverDeviceAsync(); | ||||||
|  |             //    ip = device.GetExternalIPAsync().Result; | ||||||
|  |             //    Debug.WriteLine("Your External IP: " + ip); | ||||||
|  |             //    cts = new CancellationTokenSource(10000); | ||||||
|  |             //    UPNPdevice = await discoverer.DiscoverDeviceAsync(PortMapper.Upnp, cts); | ||||||
|  |             //    await UPNPdevice.CreatePortMapAsync(new Mapping(Protocol.Tcp, 1234, 4321, "UPnP Server Map")); | ||||||
|  |             //    Task<IEnumerable<Mapping>> MappingDevice = device.GetAllMappingsAsync(); | ||||||
|  |             //    Debug.WriteLine("MappingDevice.Result: " + MappingDevice.Result.ToList()[0]); | ||||||
|  |             //} | ||||||
|  |             //catch (Exception ex) | ||||||
|  |             //{ | ||||||
|  |             //    Debug.WriteLine("Error Occured: " + ex.GetType().ToString() + " : " + ex.Message); | ||||||
|  |             //} | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public void ResetServer(bool ServerIsStarted) | ||||||
|  |         { | ||||||
|  |             if (ServerIsStarted) | ||||||
|  |             { | ||||||
|  |                TCP_listener.Stop(); | ||||||
|  |  | ||||||
|  |                TCP_client.Close(); | ||||||
|  |                TCP_clientIsOpen = false; | ||||||
|  |  | ||||||
|  |                 UDP_client.Close(); | ||||||
|  |                 UDP_clientIsOpen = false; | ||||||
|  |  | ||||||
|  |                 Console.WriteLine(@"   | ||||||
|  | ===================================================   | ||||||
|  | Client has been detected as being disconnected! | ||||||
|  | ==================================================="); | ||||||
|  |                 worker.WorkerSupportsCancellation = true; | ||||||
|  |                 worker.CancelAsync(); | ||||||
|  |  | ||||||
|  |                 worker.Dispose(); // dont know if this actually disposes the thing, but it seems to run the code above, so its fine! | ||||||
|  |                 LogAdd("Client Disconnected"); | ||||||
|  |                 LogAdd("Restarting Server"); | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                TCP_listener.Stop(); | ||||||
|  |                  | ||||||
|  |                 try | ||||||
|  |                 {  | ||||||
|  |                     if (TCP_client != null) | ||||||
|  |                     { | ||||||
|  |                        TCP_client.GetStream().Close(); | ||||||
|  |                        TCP_client.Close(); | ||||||
|  |                        TCP_client = null; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 catch (Exception ex) | ||||||
|  |                 { | ||||||
|  |                     Debug.WriteLine("Exception Thrown: " + ex.GetType() + ":" + ex.Message); | ||||||
|  |                     LogAdd("Exception Thrown: " + ex.GetType() + ":" + ex.Message); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                TCP_clientIsOpen = false; | ||||||
|  |                 Console.WriteLine(@"   | ||||||
|  | ==========================================================   | ||||||
|  | Server has been shutdown by the user and is now offline! | ||||||
|  | =========================================================="); | ||||||
|  |                 worker.WorkerSupportsCancellation = true; | ||||||
|  |                 worker.CancelAsync(); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                 worker.DoWork -= ListenToClient; | ||||||
|  |                 worker.RunWorkerCompleted -= Worker_RunWorkerCompleted; | ||||||
|  |  | ||||||
|  |                 worker.Dispose(); // dont know if this actually disposes the thing, but it seems to run the code above, so its fine! | ||||||
|  |                 LogAdd("Server Shut Down By Host"); | ||||||
|  |                 LogAdd("Worker Temporarily Deactivated"); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         //Point mousePoint; | ||||||
|  |         //Point tempMousePoint; | ||||||
|  |         BackgroundWorker worker; | ||||||
|  |         public /*async*/ void Initialize() | ||||||
|  |         { | ||||||
|  |             try | ||||||
|  |             { | ||||||
|  |                 IPstring = GetLocalNetworkIPV4(); | ||||||
|  |                 IPLabel.Text = "IP: " + IPstring; | ||||||
|  |  | ||||||
|  |                 //localIP = Dns.GetHostAddresses(Dns.GetHostName()); | ||||||
|  |                 //foreach (IPAddress address in localIP) //OLD DEPRICATED METHOD | ||||||
|  |                 //{ | ||||||
|  |                 //    if (address.AddressFamily == AddressFamily.InterNetwork) | ||||||
|  |                 //    { | ||||||
|  |                 //        IPstring = address.ToString(); | ||||||
|  |                 //        IPstring = "192.168.1.5"; | ||||||
|  |                 //        Debug.WriteLine(IPstring); | ||||||
|  |  | ||||||
|  |                 //    } | ||||||
|  |                 //} | ||||||
|  |  | ||||||
|  |                 //Debug.WriteLine("CONNECT USING: " + IPstring); | ||||||
|  |  | ||||||
|  |             } | ||||||
|  |             catch (Exception ex) | ||||||
|  |             { | ||||||
|  |                 Debug.WriteLine("Error Occured: " + ex.GetType().ToString() + " : " + ex.Message); | ||||||
|  |                 LogAdd("Exception Thrown: " + ex.GetType() + ":" + ex.Message); | ||||||
|  |             } //isnt even catching... | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) | ||||||
|  |         { | ||||||
|  |             worker.DoWork -= ListenToClient; | ||||||
|  |             worker.RunWorkerCompleted -= Worker_RunWorkerCompleted; | ||||||
|  |             worker.Dispose(); | ||||||
|  |             Debug.WriteLine("The Worker has stopped"); | ||||||
|  |             LogAdd("Worker Stopping And Restarting - Connection Temporarily Disabled"); | ||||||
|  |             worker = new BackgroundWorker(); | ||||||
|  |             worker.DoWork += ListenToClient; | ||||||
|  |             worker.RunWorkerCompleted += Worker_RunWorkerCompleted; | ||||||
|  |             worker.RunWorkerAsync(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         bool PCLocked = false; | ||||||
|  |         public void ListenToClient(object sender, DoWorkEventArgs e) | ||||||
|  |         { | ||||||
|  |             LogAdd("Listener Started - Connection Enabled"); | ||||||
|  |             try | ||||||
|  |             { | ||||||
|  |                TCP_listener.Start(); | ||||||
|  |                 Console.WriteLine(@"   | ||||||
|  | ===================================================   | ||||||
|  | Started listening requests at: {0}:{1}   | ||||||
|  | ===================================================", | ||||||
|  |                 TCP_ipEP.Address, TCP_ipEP.Port); | ||||||
|  |                 TCP_client = TCP_listener.AcceptTcpClient(); | ||||||
|  |                 TCP_clientIsOpen = true; | ||||||
|  |  | ||||||
|  |                  | ||||||
|  |  | ||||||
|  |                 Console.WriteLine("Connected toTCP_client!" + " \n"); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                 Console.WriteLine("Client: " + (TCP_client.Client.RemoteEndPoint as IPEndPoint).Address + ":" + (TCP_client.Client.RemoteEndPoint as IPEndPoint).Port); //IMPORTANT FOR GETTINGTCP_client IP AND PORT!!! | ||||||
|  |                 LogAdd("Client: " + (TCP_client.Client.RemoteEndPoint as IPEndPoint).Address + ":" + (TCP_client.Client.RemoteEndPoint as IPEndPoint).Port + " Connected to the Server"); | ||||||
|  |             } | ||||||
|  |             catch (Exception ex) | ||||||
|  |             { | ||||||
|  |                 if (ex.Message == "A blocking operation was interrupted by a call to WSACancelBlockingCall") | ||||||
|  |                 { | ||||||
|  |                     Debug.WriteLine("Alert: An exception has occured that is thrown when waiting for theTCP_client to accept is stopped by the server.\nThis error is normal and shouldn't impact performance, but is possible to fix with another method"); | ||||||
|  |                     Debug.WriteLine("Same Thing sortof goes for the read in the whileTCP_listener"); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 Debug.WriteLine(ex.Message); | ||||||
|  |                 LogAdd("Exception Thrown: " + ex.GetType() + ":" + ex.Message); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             while (TCP_client.Connected /*&& !e.Cancel*/) | ||||||
|  |             { | ||||||
|  |                 try | ||||||
|  |                 { | ||||||
|  |                     //const int bytesize = 1024 * 1024; | ||||||
|  |                     int bytesize = 1024; //1024 * 1024 is way too much for the text based transfering! | ||||||
|  |                     byte[] buffer = new byte[bytesize]; | ||||||
|  |                     string networkRead =TCP_client.GetStream().Read(buffer, 0, bytesize).ToString(); | ||||||
|  |                     string data = ASCIIEncoding.ASCII.GetString(buffer); | ||||||
|  |                     Debug.WriteLine(data); | ||||||
|  |  | ||||||
|  |                     LogAdd("Incoming Data: " + data); | ||||||
|  |  | ||||||
|  |                     if (data.ToUpper().Contains("{TEST}")) //toupper isnt really needed but is added just incase i forget to in the other program, also may remove later | ||||||
|  |                     { | ||||||
|  |                         sendData(getBytes("{TEST_RESPOND}"),TCP_client.GetStream()); | ||||||
|  |                         Console.WriteLine("DETECTED \"TEST\""); | ||||||
|  |                     } | ||||||
|  |                     else if (data.ToUpper().Contains("{SHUTDOWN}")) | ||||||
|  |                     { | ||||||
|  |                         Shutdown(); | ||||||
|  |                         LogAdd("Shutting Down"); | ||||||
|  |                     } | ||||||
|  |                     else if (data.ToUpper().Contains("{MONITOR_ON}")) | ||||||
|  |                     { | ||||||
|  |                         Debug.WriteLine("the monitor has been turned on"); | ||||||
|  |  | ||||||
|  |                         SetMonitorState(MonitorState.ON); | ||||||
|  |  | ||||||
|  |                         mouse_event(MOUSEEVENTF_MOVE, 0, 0, 0, UIntPtr.Zero); | ||||||
|  |  | ||||||
|  |                         sendData(getBytes("{MONITOR_TURNED_ON}"),TCP_client.GetStream()); | ||||||
|  |                         LogAdd("Turning Monitor ON"); | ||||||
|  |                     } | ||||||
|  |                     else if (data.ToUpper().Contains("{MONITOR_OFF}")) | ||||||
|  |                     { | ||||||
|  |                         Debug.WriteLine("the monitor has been turned off"); | ||||||
|  |  | ||||||
|  |                         SetMonitorState(MonitorState.OFF); | ||||||
|  |  | ||||||
|  |                         sendData(getBytes("{MONITOR_TURNED_OFF}"),TCP_client.GetStream()); | ||||||
|  |  | ||||||
|  |                         LogAdd("Turning Mointor OFF"); | ||||||
|  |                     } | ||||||
|  |                     else if (data.ToUpper().Contains("{TAKE_SCREENSHOT}")) | ||||||
|  |                     { | ||||||
|  |                         ScreenshotTimer.Interval = 1000; | ||||||
|  |                         ScreenshotTimer.Tick += SendScreenshotTick; | ||||||
|  |  | ||||||
|  |                     } | ||||||
|  |                     else if (data.ToString().Contains("{SPEED_TEST}") && data.ToString().Contains("{/SPEED_TEST}")) | ||||||
|  |                     { | ||||||
|  |                         //sendData(new byte[1024 * 1024 * 5],TCP_client.GetStream()); | ||||||
|  |                         Console.WriteLine("Speed Test: Size = " + data.Length); | ||||||
|  |                         LogAdd("Completing Speed Test"); | ||||||
|  |                     } | ||||||
|  |                     else if (data.ToString().Contains("{LOCK_PC}")) | ||||||
|  |                     { | ||||||
|  |  | ||||||
|  |                         if (PCLocked) | ||||||
|  |                         { | ||||||
|  |                             f3.Invoke(new Action(() => f3.UnlockPC())); | ||||||
|  |                         } | ||||||
|  |                         else | ||||||
|  |                         { | ||||||
|  |                             f3.Invoke(new Action(() => f3.LockPC())); | ||||||
|  |                         } | ||||||
|  |  | ||||||
|  |                         PCLocked = !PCLocked; | ||||||
|  |  | ||||||
|  |                         sendData(getBytes("{PC_LOCKED}"),TCP_client.GetStream()); | ||||||
|  |                         LogAdd("PC Locked Set -> " + PCLocked); | ||||||
|  |                     } | ||||||
|  |                     else if (data.ToString().Contains("{PC_LOCK_STATUS}")) | ||||||
|  |                     { | ||||||
|  |                         sendData(getBytes("{PC_LOCK_STATUS}" + PCLocked.ToString().ToLower() + "{/PC_LOCK_STATUS}"),TCP_client.GetStream()); | ||||||
|  |                         LogAdd("Getting & Sending PC Lock Status"); | ||||||
|  |                     } | ||||||
|  |                     //else if (data.ToUpper().Contains("PING")) | ||||||
|  |                     //{ | ||||||
|  |                     //    Ping(); | ||||||
|  |                     //} | ||||||
|  |                 } | ||||||
|  |                 catch (Exception ex) | ||||||
|  |                 { | ||||||
|  |                     Debug.WriteLine("Exception WHILE Listening: " + ex.Message); | ||||||
|  |                    TCP_client.GetStream().Close(); //changedTCP_client.Dispose to being afterTCP_client.Close because that seems to make more sense. Also need to restart the server instead of just closing theTCP_client. | ||||||
|  |                    TCP_client.Close(); | ||||||
|  |                    TCP_clientIsOpen = false; | ||||||
|  |                     LogAdd("Exception Thrown: " + ex.GetType() + ":" + ex.Message); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public void SendScreenshotTick(object sender, EventArgs e) | ||||||
|  |         { | ||||||
|  |              | ||||||
|  |             Debug.WriteLine("a screenshot was taken"); | ||||||
|  |  | ||||||
|  |             var bitmap = SaveScreenshotWithMousePointer();//SaveScreenshot(); | ||||||
|  |             //var bitmap = SaveScreenshot(); | ||||||
|  |             //bitmap = new Bitmap(bitmap, new Size(854, 480));//new Size(1024, 576));//new Size(512, 288)); //new Size(640, 360)); //new Size(1280, 720)); | ||||||
|  |             //bitmap = new Bitmap(bitmap, new Size(1920, 1080)); | ||||||
|  |             bitmap = new Bitmap(bitmap, new Size(1280, 720)); | ||||||
|  |  | ||||||
|  |             var stream = new MemoryStream(); | ||||||
|  |             bitmap.Save(stream, jpgEncoder, encoderparams); | ||||||
|  |             Debug.WriteLine("Getting stream size: " + stream.Length); | ||||||
|  |  | ||||||
|  |             sendData(stream.ToArray(),TCP_client.GetStream()); | ||||||
|  |             //UDP_client.Send(stream.ToArray(), (int)stream.Length, UDP_ipEP); | ||||||
|  |  | ||||||
|  |             bitmap.Dispose(); | ||||||
|  |             LogAdd("Taking & Sending Screenshot"); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private ImageCodecInfo GetEncoder(ImageFormat format) | ||||||
|  |         { | ||||||
|  |  | ||||||
|  |             ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); | ||||||
|  |  | ||||||
|  |             foreach (ImageCodecInfo codec in codecs) | ||||||
|  |             { | ||||||
|  |                 if (codec.FormatID == format.Guid) | ||||||
|  |                 { | ||||||
|  |                     return codec; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             return null; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         //void Test() | ||||||
|  |         //{ | ||||||
|  |         //    Debug.WriteLine("test ran"); | ||||||
|  |         //} | ||||||
|  |  | ||||||
|  |         void Shutdown() | ||||||
|  |         { | ||||||
|  |             sendData(getBytes("{BEGAN_SHUTDOWN}"),TCP_client.GetStream()); | ||||||
|  |             ProcessStartInfo psi = new ProcessStartInfo("shutdown", "/s /f /t 0"); | ||||||
|  |             psi.CreateNoWindow = true; | ||||||
|  |             psi.UseShellExecute = false; | ||||||
|  |             Process.Start(psi); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         //void Ping() | ||||||
|  |         //{ | ||||||
|  |         //    Debug.WriteLine("Ping Ran"); | ||||||
|  |         //    sendData(getBytes("{PING}:{" + (((DateTime.Now.Minute * 60) + DateTime.Now.Second * 1000) + DateTime.Now.Millisecond).ToString() + "}:{PING}"),TCP_client.GetStream()); | ||||||
|  |  | ||||||
|  |         //    Debug.WriteLine(getBetween("{PING}:{" + (((DateTime.Now.Minute * 60) + DateTime.Now.Second * 1000) + DateTime.Now.Millisecond).ToString() + "}:{PING}", "{PING}:{", "}:{PING}")); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         //} | ||||||
|  |  | ||||||
|  |         #region Screenshot Capture | ||||||
|  |         public static class User32 | ||||||
|  |         { | ||||||
|  |             public const Int32 CURSOR_SHOWING = 0x00000001; | ||||||
|  |  | ||||||
|  |             [StructLayout(LayoutKind.Sequential)] | ||||||
|  |             public struct ICONINFO | ||||||
|  |             { | ||||||
|  |                 public bool fIcon; | ||||||
|  |                 public Int32 xHotspot; | ||||||
|  |                 public Int32 yHotspot; | ||||||
|  |                 public IntPtr hbmMask; | ||||||
|  |                 public IntPtr hbmColor; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             [StructLayout(LayoutKind.Sequential)] | ||||||
|  |             public struct POINT | ||||||
|  |             { | ||||||
|  |                 public Int32 x; | ||||||
|  |                 public Int32 y; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             [StructLayout(LayoutKind.Sequential)] | ||||||
|  |             public struct CURSORINFO | ||||||
|  |             { | ||||||
|  |                 public Int32 cbSize; | ||||||
|  |                 public Int32 flags; | ||||||
|  |                 public IntPtr hCursor; | ||||||
|  |                 public POINT ptScreenPos; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             [DllImport("user32.dll")] | ||||||
|  |             public static extern bool GetCursorInfo(out CURSORINFO pci); | ||||||
|  |  | ||||||
|  |             [DllImport("user32.dll")] | ||||||
|  |             public static extern IntPtr CopyIcon(IntPtr hIcon); | ||||||
|  |  | ||||||
|  |             [DllImport("user32.dll")] | ||||||
|  |             public static extern bool DrawIcon(IntPtr hdc, int x, int y, IntPtr hIcon); | ||||||
|  |  | ||||||
|  |             [DllImport("user32.dll")] | ||||||
|  |             public static extern bool GetIconInfo(IntPtr hIcon, out ICONINFO piconinfo); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         Bitmap SaveScreenshotWithMousePointer() | ||||||
|  |         { | ||||||
|  |             var bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb); | ||||||
|  |             // Create a graphics object from the bitmap.   | ||||||
|  |             var gfxScreenshot = Graphics.FromImage(bmpScreenshot); | ||||||
|  |             // Take the screenshot from the upper left corner to the right   | ||||||
|  |             gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy); | ||||||
|  |  | ||||||
|  |             User32.CURSORINFO cursorInfo; | ||||||
|  |             cursorInfo.cbSize = Marshal.SizeOf(typeof(User32.CURSORINFO)); | ||||||
|  |  | ||||||
|  |             if (User32.GetCursorInfo(out cursorInfo)) | ||||||
|  |             { | ||||||
|  |                 // if the cursor is showing draw it on the screen shot | ||||||
|  |                 if (cursorInfo.flags == User32.CURSOR_SHOWING) | ||||||
|  |                 { | ||||||
|  |                     // we need to get hotspot so we can draw the cursor in the correct position | ||||||
|  |                     var iconPointer = User32.CopyIcon(cursorInfo.hCursor); | ||||||
|  |                     User32.ICONINFO iconInfo; | ||||||
|  |                     int iconX, iconY; | ||||||
|  |  | ||||||
|  |                     if (User32.GetIconInfo(iconPointer, out iconInfo)) | ||||||
|  |                     { | ||||||
|  |                         // calculate the correct position of the cursor | ||||||
|  |                         iconX = cursorInfo.ptScreenPos.x - ((int)iconInfo.xHotspot); | ||||||
|  |                         iconY = cursorInfo.ptScreenPos.y - ((int)iconInfo.yHotspot); | ||||||
|  |  | ||||||
|  |                         // draw the cursor icon on top of the captured screen image | ||||||
|  |                         User32.DrawIcon(gfxScreenshot.GetHdc(), iconX, iconY, cursorInfo.hCursor); | ||||||
|  |  | ||||||
|  |                         // release the handle created by call to g.GetHdc() | ||||||
|  |                         gfxScreenshot.ReleaseHdc(); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             return bmpScreenshot; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public Bitmap SaveScreenshot() | ||||||
|  |         { | ||||||
|  |             var bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb); | ||||||
|  |             // Create a graphics object from the bitmap.   | ||||||
|  |             var gfxScreenshot = Graphics.FromImage(bmpScreenshot); | ||||||
|  |             // Take the screenshot from the upper left corner to the right   | ||||||
|  |             gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy); | ||||||
|  |             return bmpScreenshot; | ||||||
|  |         } | ||||||
|  |         #endregion | ||||||
|  |  | ||||||
|  |         [DllImport("user32.dll")] | ||||||
|  |         static extern void mouse_event(Int32 dwFlags, Int32 dx, Int32 dy, Int32 dwData, UIntPtr dwExtraInfo); | ||||||
|  |         private const int MOUSEEVENTF_MOVE = 0x0001; | ||||||
|  |  | ||||||
|  |         #region Monitor Command | ||||||
|  |         [DllImport("user32.dll")] | ||||||
|  |         static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); | ||||||
|  |  | ||||||
|  |         private int SC_MONITORPOWER = 0xF170; | ||||||
|  |         private int WM_SYSCOMMAND = 0x0112; | ||||||
|  |  | ||||||
|  |         public enum MonitorState | ||||||
|  |         { | ||||||
|  |             ON = -1, | ||||||
|  |             OFF = 2, | ||||||
|  |             STANDBY = 1 | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public void SetMonitorState(MonitorState state) | ||||||
|  |         { | ||||||
|  |            this.Invoke(new Action(() => SendMessage(this.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, (int)state))); | ||||||
|  |         } | ||||||
|  |         #endregion | ||||||
|  |  | ||||||
|  |         byte[] getBytes(string input) | ||||||
|  |         { | ||||||
|  |             byte[] bytes = Encoding.ASCII.GetBytes(input); | ||||||
|  |             return bytes; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         void sendData(byte[] data, NetworkStream stream) | ||||||
|  |         { | ||||||
|  |             int bufferSize = 1024; | ||||||
|  |             byte[] dataLength = BitConverter.GetBytes(data.Length); | ||||||
|  |             stream.Write(dataLength, 0, 4); //send to the other side the size of data! | ||||||
|  |             int bytesSent = 0; | ||||||
|  |             int bytesLeft = data.Length; | ||||||
|  |             while (bytesLeft > 0) | ||||||
|  |             { | ||||||
|  |                 int curDataSize = Math.Min(bufferSize, bytesLeft); | ||||||
|  |                 stream.Write(data, bytesSent, curDataSize); | ||||||
|  |                 bytesSent += curDataSize; | ||||||
|  |                 bytesLeft -= curDataSize; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         void sendScreenshot(byte[] data, NetworkStream stream) | ||||||
|  |         { | ||||||
|  |             int bufferSize = (1024 * 1024) / 2; | ||||||
|  |             byte[] dataLength = BitConverter.GetBytes(data.Length); | ||||||
|  |             stream.Write(dataLength, 0, 4); //send to the other side the size of data! | ||||||
|  |             int bytesSent = 0; | ||||||
|  |             int bytesLeft = data.Length; | ||||||
|  |             while (bytesLeft > 0) | ||||||
|  |             { | ||||||
|  |                 int curDataSize = Math.Min(bufferSize, bytesLeft); | ||||||
|  |                 stream.Write(data, bytesSent, curDataSize); | ||||||
|  |                 bytesSent += curDataSize; | ||||||
|  |                 bytesLeft -= curDataSize; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public static string getBetween(string strSource, string strStart, string strEnd) | ||||||
|  |         { | ||||||
|  |             int Start, End; | ||||||
|  |             if (strSource.Contains(strStart) && strSource.Contains(strEnd)) | ||||||
|  |             { | ||||||
|  |                 Start = strSource.IndexOf(strStart, 0) + strStart.Length; | ||||||
|  |                 End = strSource.IndexOf(strEnd, Start); | ||||||
|  |                 return strSource.Substring(Start, End - Start); | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 return ""; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public static string GetLocalNetworkIPV4() | ||||||
|  |         { | ||||||
|  |             string localIP = ""; | ||||||
|  |             bool OpenPort = false; | ||||||
|  |             using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0)) | ||||||
|  |             { | ||||||
|  |                 IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties(); | ||||||
|  |                 TcpConnectionInformation[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections(); | ||||||
|  |  | ||||||
|  |                 for (int i = 60000; i < 65535; i++) | ||||||
|  |                 { | ||||||
|  |                     if (OpenPort) | ||||||
|  |                     { | ||||||
|  |                         Debug.WriteLine("Working Port Found"); | ||||||
|  |                         break; | ||||||
|  |                     } | ||||||
|  |  | ||||||
|  |                     foreach (TcpConnectionInformation tcpi in tcpConnInfoArray) | ||||||
|  |                     { | ||||||
|  |                         if (tcpi.LocalEndPoint.Port == i) | ||||||
|  |                         { | ||||||
|  |                             Debug.WriteLine(i + " Is In Use"); | ||||||
|  |                             break; | ||||||
|  |                         } | ||||||
|  |                         else | ||||||
|  |                         { | ||||||
|  |                             OpenPort = true; | ||||||
|  |                             socket.Connect("8.8.8.8", i); | ||||||
|  |                             IPEndPoint endPoint = socket.LocalEndPoint as IPEndPoint; | ||||||
|  |                             localIP = endPoint.Address.ToString(); | ||||||
|  |                             break; | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  |  | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             return localIP; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         Form2 f2; | ||||||
|  |         private void Form1_FormClosing(object sender, FormClosingEventArgs e) | ||||||
|  |         { | ||||||
|  |             try | ||||||
|  |             { | ||||||
|  |                 if (TCP_client != null) | ||||||
|  |                 { | ||||||
|  |                    TCP_client.GetStream().Close(); | ||||||
|  |                    TCP_client.Close(); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 if (UDP_client != null) | ||||||
|  |                 { | ||||||
|  |                     UDP_client.Close(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             catch (Exception) { } //no need to log if we just gonna kill it anyways | ||||||
|  |  | ||||||
|  |             if (TCP_listener != null) | ||||||
|  |             { | ||||||
|  |                 if (TCP_listener.Server.IsBound) | ||||||
|  |                 { | ||||||
|  |                    TCP_listener.Stop(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         bool StartServer = false; | ||||||
|  |         private async void StartButton_Click(object sender, EventArgs e) | ||||||
|  |         { | ||||||
|  |             StartServer = !StartServer; | ||||||
|  |  | ||||||
|  |             if (StartServer) | ||||||
|  |             { | ||||||
|  |                 IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties(); | ||||||
|  |                 TcpConnectionInformation[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections(); | ||||||
|  |  | ||||||
|  |                 foreach (TcpConnectionInformation tcpi in tcpConnInfoArray) | ||||||
|  |                 { | ||||||
|  |                     if (tcpi.LocalEndPoint.Port == int.Parse(TCP_PortTextBox.Text)) | ||||||
|  |                     { | ||||||
|  |                         MessageBox.Show("Could not open port \"" + TCP_PortTextBox.Text + "\" as it is already in use!", "Error Opening Port", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); | ||||||
|  |                         StartServer = false; | ||||||
|  |                         return; | ||||||
|  |                     } else if (tcpi.LocalEndPoint.Port == int.Parse(UDP_PortTextBox.Text)) | ||||||
|  |                     { | ||||||
|  |                         MessageBox.Show("Could not open port \"" + TCP_PortTextBox.Text + "\" as it is already in use!", "Error Opening Port", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); | ||||||
|  |                         StartServer = false; | ||||||
|  |                         return; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 TCP_PortTextBox.ReadOnly = true; | ||||||
|  |                 TCP_PortTextBox.BackColor = System.Drawing.SystemColors.Window; | ||||||
|  |  | ||||||
|  |                 StartButton.Text = "Stop Server"; | ||||||
|  |  | ||||||
|  |                 PortForward(false, true); | ||||||
|  |  | ||||||
|  |                 f2.Text = "Server Status: Online"; | ||||||
|  |                 f2.IPLabel.Text = "Connect: " + IPstring + ", " + TCP_PortTextBox.Text + ", " + UDP_PortTextBox.Text; | ||||||
|  |                 f2.SessionTimeLabel.Text = GetSessionTime(); | ||||||
|  |                 LogAdd("Session Started @ " + DateTime.Now.ToString("MM/dd/yy") + " - " + DateTime.Now.ToString("HH:mm:ss")); | ||||||
|  |  | ||||||
|  |                 TCP_ipEP = new IPEndPoint(IPAddress.Parse(IPstring), int.Parse(TCP_PortTextBox.Text)); //allow a way to set the port in the future | ||||||
|  |                 TCP_listener = new TcpListener(TCP_ipEP); | ||||||
|  |  | ||||||
|  |                 UDP_ipEP = new IPEndPoint(IPAddress.Parse(IPstring), int.Parse(UDP_PortTextBox.Text)); | ||||||
|  |                 UDP_client = new UdpClient(UDP_ipEP); | ||||||
|  |  | ||||||
|  |                 worker = new BackgroundWorker(); | ||||||
|  |                 worker.DoWork += ListenToClient; | ||||||
|  |                 worker.RunWorkerCompleted += Worker_RunWorkerCompleted; | ||||||
|  |                 worker.RunWorkerAsync(); | ||||||
|  |                 TCP_PortLabel.Text = TCP_PortTextBox.Text; | ||||||
|  |  | ||||||
|  |                 //await Task.Run(() => SetUpPortMap()); | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 TCP_PortTextBox.ReadOnly = false; | ||||||
|  |                 StartButton.Text = "Start Server"; | ||||||
|  |                 TCP_PortLabel.Text = "Port: (Not Selected)"; | ||||||
|  |                 f2.Text = "Server Status: Offline"; | ||||||
|  |                 f2.IPLabel.Text = "Server Offline"; | ||||||
|  |                 f2.SessionTimeLabel.Text = "00:00:00"; | ||||||
|  |                 ResetServer(StartServer); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private void TCP_PortTextBox_KeyPress(object sender, KeyPressEventArgs e) | ||||||
|  |         { | ||||||
|  |             if (TCP_PortTextBox.TextLength >= 5 && e.KeyChar != (char)8) | ||||||
|  |             { | ||||||
|  |                 e.Handled = true; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (!(char.IsDigit(e.KeyChar) || e.KeyChar == (char)8)) | ||||||
|  |             { | ||||||
|  |                 e.Handled = true; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private void TCP_PortTextBox_KeyUp(object sender, EventArgs e) | ||||||
|  |         { | ||||||
|  |             //if (string.IsNullOrWhiteSpace(TCP_PortTextBox.Text) || string.IsNullOrEmpty(TCP_PortTextBox.Text)) | ||||||
|  |             //{ | ||||||
|  |             //    return; | ||||||
|  |             //} | ||||||
|  |  | ||||||
|  |             //if (!(UDP_PortTextBox.TextLength > 0)) | ||||||
|  |             //{ | ||||||
|  |             //    StartButton.Enabled = false; | ||||||
|  |             //    return; | ||||||
|  |             //} | ||||||
|  |  | ||||||
|  |             if (TCP_PortTextBox.TextLength > 0 && UDP_PortTextBox.TextLength > 0) | ||||||
|  |             { | ||||||
|  |                 if (int.Parse(TCP_PortTextBox.Text) > 0 && int.Parse(TCP_PortTextBox.Text) < 65536 && int.Parse(UDP_PortTextBox.Text) > 0 && int.Parse(UDP_PortTextBox.Text) < 65536) | ||||||
|  |                 { | ||||||
|  |                     StartButton.Enabled = false; | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                     StartButton.Enabled = true; | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |                 StartButton.Enabled = false; | ||||||
|  |  | ||||||
|  |             //if (!((int.Parse(TCP_PortTextBox.Text) < 1 || int.Parse(TCP_PortTextBox.Text) > 65535) || (int.Parse(UDP_PortTextBox.Text) < 1 || int.Parse(UDP_PortTextBox.Text) > 65535))) | ||||||
|  |             //{ | ||||||
|  |             //    StartButton.Enabled = true; | ||||||
|  |             //} | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private void UDP_PortTextBox_KeyPress(object sender, KeyPressEventArgs e) | ||||||
|  |         { | ||||||
|  |             if (UDP_PortTextBox.TextLength >= 5 && e.KeyChar != (char)8) | ||||||
|  |             { | ||||||
|  |                 e.Handled = true; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (!(char.IsDigit(e.KeyChar) || e.KeyChar == (char)8)) | ||||||
|  |             { | ||||||
|  |                 e.Handled = true; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private void UDP_PortTextBox_KeyUp(object sender, EventArgs e) | ||||||
|  |         { | ||||||
|  |             //if (string.IsNullOrWhiteSpace(UDP_PortTextBox.Text) || string.IsNullOrEmpty(UDP_PortTextBox.Text)) | ||||||
|  |             //{ | ||||||
|  |             //    return; | ||||||
|  |             //} | ||||||
|  |  | ||||||
|  |             //if (!(TCP_PortTextBox.TextLength > 0)) | ||||||
|  |             //{ | ||||||
|  |             //    StartButton.Enabled = false; | ||||||
|  |             //    return; | ||||||
|  |             //} | ||||||
|  |  | ||||||
|  |             //Debug.WriteLine($"TCP {TCP_PortTextBox.TextLength} : UDP {UDP_PortTextBox.TextLength}"); | ||||||
|  |  | ||||||
|  |             if (TCP_PortTextBox.TextLength > 0 && UDP_PortTextBox.TextLength > 0) | ||||||
|  |             { | ||||||
|  |                 if (int.Parse(TCP_PortTextBox.Text) > 0 && int.Parse(TCP_PortTextBox.Text) < 65536 && int.Parse(UDP_PortTextBox.Text) > 0 && int.Parse(UDP_PortTextBox.Text) < 65536) | ||||||
|  |                 { | ||||||
|  |                     StartButton.Enabled = true; | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                     StartButton.Enabled = false; | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |                 StartButton.Enabled = false; | ||||||
|  |  | ||||||
|  |             //if (!((int.Parse(UDP_PortTextBox.Text) < 1 || int.Parse(UDP_PortTextBox.Text) > 65535) || (int.Parse(TCP_PortTextBox.Text) < 1 || int.Parse(TCP_PortTextBox.Text) > 65535))) | ||||||
|  |             //{ | ||||||
|  |             //    StartButton.Enabled = true; | ||||||
|  |             //} | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         public static bool DebugButtonEnabled = false; | ||||||
|  |         private void DebugButton_Click(object sender, EventArgs e) | ||||||
|  |         { | ||||||
|  |             DebugButtonEnabled = !DebugButtonEnabled; | ||||||
|  |             if (DebugButtonEnabled) | ||||||
|  |             { | ||||||
|  |                 f2.BringToFront(); | ||||||
|  |                 f2.Show(); | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 f2.Hide(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         int Hour; | ||||||
|  |         int Minute; | ||||||
|  |         int Second; | ||||||
|  |         public string GetSessionTime() | ||||||
|  |         { | ||||||
|  |             Hour = SessionTime / 3600; | ||||||
|  |             Minute = (SessionTime % 3600) / 60; | ||||||
|  |             Second = SessionTime % 60; | ||||||
|  |             return String.Format("{0:D2}:{1:D2}:{2:D2}", Hour, Minute, Second); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public void LogAdd(string input) | ||||||
|  |         { | ||||||
|  |             if (f2.LogTextBox.InvokeRequired) | ||||||
|  |             { | ||||||
|  |                 f2.LogTextBox.Invoke(new Action(() => { | ||||||
|  |                     f2.LogTextBox.Text += DateTime.Now.ToString("[MM/dd - HH:mm:ss]") + " - " + input + "\r\n\r\n"; | ||||||
|  |                     f2.LogTextBox.SelectionStart = f2.LogTextBox.TextLength; | ||||||
|  |                     f2.LogTextBox.ScrollToCaret(); | ||||||
|  |                 })); | ||||||
|  |             } | ||||||
|  |             else | ||||||
|  |             { | ||||||
|  |                 f2.LogTextBox.Text += DateTime.Now.ToString("[MM/dd - HH:mm:ss]") + " - " + input + "\r\n\r\n"; | ||||||
|  |                 f2.LogTextBox.SelectionStart = f2.LogTextBox.TextLength; | ||||||
|  |                 f2.LogTextBox.ScrollToCaret(); | ||||||
|  |             } | ||||||
|  |             //f2.LogTextBox.ScrollToCaret(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         //public static void DisplayIPAddresses() //maybe keep | ||||||
|  |         //{ | ||||||
|  |         //    StringBuilder sb = new StringBuilder(); | ||||||
|  |  | ||||||
|  |         //    // Get a list of all network interfaces (usually one per network card, dialup, and VPN connection) | ||||||
|  |         //    NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); | ||||||
|  |  | ||||||
|  |         //    foreach (NetworkInterface network in networkInterfaces) | ||||||
|  |         //    { | ||||||
|  |         //        // Read the IP configuration for each network | ||||||
|  |         //        IPInterfaceProperties properties = network.GetIPProperties(); | ||||||
|  |  | ||||||
|  |         //        // Each network interface may have multiple IP addresses | ||||||
|  |         //        foreach (IPAddressInformation address in properties.UnicastAddresses) | ||||||
|  |         //        { | ||||||
|  |         //            // We're only interested in IPv4 addresses for now | ||||||
|  |         //            if (address.Address.AddressFamily != AddressFamily.InterNetwork) | ||||||
|  |         //                continue; | ||||||
|  |  | ||||||
|  |         //            // Ignore loopback addresses (e.g., 127.0.0.1) | ||||||
|  |         //            if (IPAddress.IsLoopback(address.Address)) | ||||||
|  |         //                continue; | ||||||
|  |  | ||||||
|  |         //            sb.AppendLine(address.Address.ToString() + " (" + network.Name + ")"); | ||||||
|  |         //        } | ||||||
|  |         //    } | ||||||
|  |  | ||||||
|  |         //    MessageBox.Show(sb.ToString()); | ||||||
|  |         //} | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										123
									
								
								src/Form1.resx
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										123
									
								
								src/Form1.resx
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,123 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <root> | ||||||
|  |   <!--  | ||||||
|  |     Microsoft ResX Schema  | ||||||
|  |      | ||||||
|  |     Version 2.0 | ||||||
|  |      | ||||||
|  |     The primary goals of this format is to allow a simple XML format  | ||||||
|  |     that is mostly human readable. The generation and parsing of the  | ||||||
|  |     various data types are done through the TypeConverter classes  | ||||||
|  |     associated with the data types. | ||||||
|  |      | ||||||
|  |     Example: | ||||||
|  |      | ||||||
|  |     ... ado.net/XML headers & schema ... | ||||||
|  |     <resheader name="resmimetype">text/microsoft-resx</resheader> | ||||||
|  |     <resheader name="version">2.0</resheader> | ||||||
|  |     <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | ||||||
|  |     <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | ||||||
|  |     <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | ||||||
|  |     <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | ||||||
|  |     <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | ||||||
|  |         <value>[base64 mime encoded serialized .NET Framework object]</value> | ||||||
|  |     </data> | ||||||
|  |     <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | ||||||
|  |         <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | ||||||
|  |         <comment>This is a comment</comment> | ||||||
|  |     </data> | ||||||
|  |                  | ||||||
|  |     There are any number of "resheader" rows that contain simple  | ||||||
|  |     name/value pairs. | ||||||
|  |      | ||||||
|  |     Each data row contains a name, and value. The row also contains a  | ||||||
|  |     type or mimetype. Type corresponds to a .NET class that support  | ||||||
|  |     text/value conversion through the TypeConverter architecture.  | ||||||
|  |     Classes that don't support this are serialized and stored with the  | ||||||
|  |     mimetype set. | ||||||
|  |      | ||||||
|  |     The mimetype is used for serialized objects, and tells the  | ||||||
|  |     ResXResourceReader how to depersist the object. This is currently not  | ||||||
|  |     extensible. For a given mimetype the value must be set accordingly: | ||||||
|  |      | ||||||
|  |     Note - application/x-microsoft.net.object.binary.base64 is the format  | ||||||
|  |     that the ResXResourceWriter will generate, however the reader can  | ||||||
|  |     read any of the formats listed below. | ||||||
|  |      | ||||||
|  |     mimetype: application/x-microsoft.net.object.binary.base64 | ||||||
|  |     value   : The object must be serialized with  | ||||||
|  |             : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | ||||||
|  |             : and then encoded with base64 encoding. | ||||||
|  |      | ||||||
|  |     mimetype: application/x-microsoft.net.object.soap.base64 | ||||||
|  |     value   : The object must be serialized with  | ||||||
|  |             : System.Runtime.Serialization.Formatters.Soap.SoapFormatter | ||||||
|  |             : and then encoded with base64 encoding. | ||||||
|  |  | ||||||
|  |     mimetype: application/x-microsoft.net.object.bytearray.base64 | ||||||
|  |     value   : The object must be serialized into a byte array  | ||||||
|  |             : using a System.ComponentModel.TypeConverter | ||||||
|  |             : and then encoded with base64 encoding. | ||||||
|  |     --> | ||||||
|  |   <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | ||||||
|  |     <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | ||||||
|  |     <xsd:element name="root" msdata:IsDataSet="true"> | ||||||
|  |       <xsd:complexType> | ||||||
|  |         <xsd:choice maxOccurs="unbounded"> | ||||||
|  |           <xsd:element name="metadata"> | ||||||
|  |             <xsd:complexType> | ||||||
|  |               <xsd:sequence> | ||||||
|  |                 <xsd:element name="value" type="xsd:string" minOccurs="0" /> | ||||||
|  |               </xsd:sequence> | ||||||
|  |               <xsd:attribute name="name" use="required" type="xsd:string" /> | ||||||
|  |               <xsd:attribute name="type" type="xsd:string" /> | ||||||
|  |               <xsd:attribute name="mimetype" type="xsd:string" /> | ||||||
|  |               <xsd:attribute ref="xml:space" /> | ||||||
|  |             </xsd:complexType> | ||||||
|  |           </xsd:element> | ||||||
|  |           <xsd:element name="assembly"> | ||||||
|  |             <xsd:complexType> | ||||||
|  |               <xsd:attribute name="alias" type="xsd:string" /> | ||||||
|  |               <xsd:attribute name="name" type="xsd:string" /> | ||||||
|  |             </xsd:complexType> | ||||||
|  |           </xsd:element> | ||||||
|  |           <xsd:element name="data"> | ||||||
|  |             <xsd:complexType> | ||||||
|  |               <xsd:sequence> | ||||||
|  |                 <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||||||
|  |                 <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | ||||||
|  |               </xsd:sequence> | ||||||
|  |               <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> | ||||||
|  |               <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | ||||||
|  |               <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | ||||||
|  |               <xsd:attribute ref="xml:space" /> | ||||||
|  |             </xsd:complexType> | ||||||
|  |           </xsd:element> | ||||||
|  |           <xsd:element name="resheader"> | ||||||
|  |             <xsd:complexType> | ||||||
|  |               <xsd:sequence> | ||||||
|  |                 <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||||||
|  |               </xsd:sequence> | ||||||
|  |               <xsd:attribute name="name" type="xsd:string" use="required" /> | ||||||
|  |             </xsd:complexType> | ||||||
|  |           </xsd:element> | ||||||
|  |         </xsd:choice> | ||||||
|  |       </xsd:complexType> | ||||||
|  |     </xsd:element> | ||||||
|  |   </xsd:schema> | ||||||
|  |   <resheader name="resmimetype"> | ||||||
|  |     <value>text/microsoft-resx</value> | ||||||
|  |   </resheader> | ||||||
|  |   <resheader name="version"> | ||||||
|  |     <value>2.0</value> | ||||||
|  |   </resheader> | ||||||
|  |   <resheader name="reader"> | ||||||
|  |     <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||||
|  |   </resheader> | ||||||
|  |   <resheader name="writer"> | ||||||
|  |     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||||
|  |   </resheader> | ||||||
|  |   <metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | ||||||
|  |     <value>17, 17</value> | ||||||
|  |   </metadata> | ||||||
|  | </root> | ||||||
							
								
								
									
										87
									
								
								src/Form2.Designer.cs
									
									
									
										generated
									
									
									
										Executable file
									
								
							
							
						
						
									
										87
									
								
								src/Form2.Designer.cs
									
									
									
										generated
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,87 @@ | |||||||
|  | namespace TCPCommander | ||||||
|  | { | ||||||
|  |     partial class Form2 | ||||||
|  |     { | ||||||
|  |         /// <summary> | ||||||
|  |         /// Required designer variable. | ||||||
|  |         /// </summary> | ||||||
|  |         private System.ComponentModel.IContainer components = null; | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Clean up any resources being used. | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> | ||||||
|  |         protected override void Dispose(bool disposing) | ||||||
|  |         { | ||||||
|  |             if (disposing && (components != null)) | ||||||
|  |             { | ||||||
|  |                 components.Dispose(); | ||||||
|  |             } | ||||||
|  |             base.Dispose(disposing); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         #region Windows Form Designer generated code | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Required method for Designer support - do not modify | ||||||
|  |         /// the contents of this method with the code editor. | ||||||
|  |         /// </summary> | ||||||
|  |         private void InitializeComponent() | ||||||
|  |         { | ||||||
|  |             this.IPLabel = new System.Windows.Forms.Label(); | ||||||
|  |             this.LogTextBox = new System.Windows.Forms.TextBox(); | ||||||
|  |             this.SessionTimeLabel = new System.Windows.Forms.Label(); | ||||||
|  |             this.SuspendLayout(); | ||||||
|  |             //  | ||||||
|  |             // IPLabel | ||||||
|  |             //  | ||||||
|  |             this.IPLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); | ||||||
|  |             this.IPLabel.Location = new System.Drawing.Point(314, 45); | ||||||
|  |             this.IPLabel.Name = "IPLabel"; | ||||||
|  |             this.IPLabel.Size = new System.Drawing.Size(278, 49); | ||||||
|  |             this.IPLabel.TabIndex = 1; | ||||||
|  |             this.IPLabel.Text = "Status"; | ||||||
|  |             this.IPLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; | ||||||
|  |             //  | ||||||
|  |             // LogTextBox | ||||||
|  |             //  | ||||||
|  |             this.LogTextBox.Location = new System.Drawing.Point(88, 179); | ||||||
|  |             this.LogTextBox.Multiline = true; | ||||||
|  |             this.LogTextBox.Name = "LogTextBox"; | ||||||
|  |             this.LogTextBox.Size = new System.Drawing.Size(738, 259); | ||||||
|  |             this.LogTextBox.TabIndex = 2; | ||||||
|  |             //  | ||||||
|  |             // SessionTimeLabel | ||||||
|  |             //  | ||||||
|  |             this.SessionTimeLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); | ||||||
|  |             this.SessionTimeLabel.Location = new System.Drawing.Point(314, 94); | ||||||
|  |             this.SessionTimeLabel.Name = "SessionTimeLabel"; | ||||||
|  |             this.SessionTimeLabel.Size = new System.Drawing.Size(278, 49); | ||||||
|  |             this.SessionTimeLabel.TabIndex = 3; | ||||||
|  |             this.SessionTimeLabel.Text = "Session Time"; | ||||||
|  |             this.SessionTimeLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; | ||||||
|  |             //  | ||||||
|  |             // Form2 | ||||||
|  |             //  | ||||||
|  |             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); | ||||||
|  |             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; | ||||||
|  |             this.ClientSize = new System.Drawing.Size(936, 450); | ||||||
|  |             this.Controls.Add(this.SessionTimeLabel); | ||||||
|  |             this.Controls.Add(this.LogTextBox); | ||||||
|  |             this.Controls.Add(this.IPLabel); | ||||||
|  |             this.Name = "Form2"; | ||||||
|  |             this.Text = "Server Status:"; | ||||||
|  |             this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form2_FormClosing); | ||||||
|  |             this.Load += new System.EventHandler(this.Form2_Load); | ||||||
|  |             this.ResumeLayout(false); | ||||||
|  |             this.PerformLayout(); | ||||||
|  |  | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         #endregion | ||||||
|  |  | ||||||
|  |         public System.Windows.Forms.Label IPLabel; | ||||||
|  |         public System.Windows.Forms.TextBox LogTextBox; | ||||||
|  |         public System.Windows.Forms.Label SessionTimeLabel; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										33
									
								
								src/Form2.cs
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										33
									
								
								src/Form2.cs
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.ComponentModel; | ||||||
|  | using System.Data; | ||||||
|  | using System.Diagnostics; | ||||||
|  | using System.Drawing; | ||||||
|  | using System.Linq; | ||||||
|  | using System.Text; | ||||||
|  | using System.Threading.Tasks; | ||||||
|  | using System.Windows.Forms; | ||||||
|  |  | ||||||
|  | namespace TCPCommander | ||||||
|  | { | ||||||
|  |     public partial class Form2 : Form | ||||||
|  |     { | ||||||
|  |         public Form2() | ||||||
|  |         { | ||||||
|  |             InitializeComponent(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private void Form2_Load(object sender, EventArgs e) | ||||||
|  |         { | ||||||
|  |  | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private void Form2_FormClosing(object sender, FormClosingEventArgs e) | ||||||
|  |         { | ||||||
|  |             Form1.DebugButtonEnabled = false; | ||||||
|  |             this.Hide(); | ||||||
|  |             e.Cancel = true; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										120
									
								
								src/Form2.resx
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										120
									
								
								src/Form2.resx
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,120 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <root> | ||||||
|  |   <!--  | ||||||
|  |     Microsoft ResX Schema  | ||||||
|  |      | ||||||
|  |     Version 2.0 | ||||||
|  |      | ||||||
|  |     The primary goals of this format is to allow a simple XML format  | ||||||
|  |     that is mostly human readable. The generation and parsing of the  | ||||||
|  |     various data types are done through the TypeConverter classes  | ||||||
|  |     associated with the data types. | ||||||
|  |      | ||||||
|  |     Example: | ||||||
|  |      | ||||||
|  |     ... ado.net/XML headers & schema ... | ||||||
|  |     <resheader name="resmimetype">text/microsoft-resx</resheader> | ||||||
|  |     <resheader name="version">2.0</resheader> | ||||||
|  |     <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | ||||||
|  |     <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | ||||||
|  |     <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | ||||||
|  |     <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | ||||||
|  |     <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | ||||||
|  |         <value>[base64 mime encoded serialized .NET Framework object]</value> | ||||||
|  |     </data> | ||||||
|  |     <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | ||||||
|  |         <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | ||||||
|  |         <comment>This is a comment</comment> | ||||||
|  |     </data> | ||||||
|  |                  | ||||||
|  |     There are any number of "resheader" rows that contain simple  | ||||||
|  |     name/value pairs. | ||||||
|  |      | ||||||
|  |     Each data row contains a name, and value. The row also contains a  | ||||||
|  |     type or mimetype. Type corresponds to a .NET class that support  | ||||||
|  |     text/value conversion through the TypeConverter architecture.  | ||||||
|  |     Classes that don't support this are serialized and stored with the  | ||||||
|  |     mimetype set. | ||||||
|  |      | ||||||
|  |     The mimetype is used for serialized objects, and tells the  | ||||||
|  |     ResXResourceReader how to depersist the object. This is currently not  | ||||||
|  |     extensible. For a given mimetype the value must be set accordingly: | ||||||
|  |      | ||||||
|  |     Note - application/x-microsoft.net.object.binary.base64 is the format  | ||||||
|  |     that the ResXResourceWriter will generate, however the reader can  | ||||||
|  |     read any of the formats listed below. | ||||||
|  |      | ||||||
|  |     mimetype: application/x-microsoft.net.object.binary.base64 | ||||||
|  |     value   : The object must be serialized with  | ||||||
|  |             : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | ||||||
|  |             : and then encoded with base64 encoding. | ||||||
|  |      | ||||||
|  |     mimetype: application/x-microsoft.net.object.soap.base64 | ||||||
|  |     value   : The object must be serialized with  | ||||||
|  |             : System.Runtime.Serialization.Formatters.Soap.SoapFormatter | ||||||
|  |             : and then encoded with base64 encoding. | ||||||
|  |  | ||||||
|  |     mimetype: application/x-microsoft.net.object.bytearray.base64 | ||||||
|  |     value   : The object must be serialized into a byte array  | ||||||
|  |             : using a System.ComponentModel.TypeConverter | ||||||
|  |             : and then encoded with base64 encoding. | ||||||
|  |     --> | ||||||
|  |   <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | ||||||
|  |     <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | ||||||
|  |     <xsd:element name="root" msdata:IsDataSet="true"> | ||||||
|  |       <xsd:complexType> | ||||||
|  |         <xsd:choice maxOccurs="unbounded"> | ||||||
|  |           <xsd:element name="metadata"> | ||||||
|  |             <xsd:complexType> | ||||||
|  |               <xsd:sequence> | ||||||
|  |                 <xsd:element name="value" type="xsd:string" minOccurs="0" /> | ||||||
|  |               </xsd:sequence> | ||||||
|  |               <xsd:attribute name="name" use="required" type="xsd:string" /> | ||||||
|  |               <xsd:attribute name="type" type="xsd:string" /> | ||||||
|  |               <xsd:attribute name="mimetype" type="xsd:string" /> | ||||||
|  |               <xsd:attribute ref="xml:space" /> | ||||||
|  |             </xsd:complexType> | ||||||
|  |           </xsd:element> | ||||||
|  |           <xsd:element name="assembly"> | ||||||
|  |             <xsd:complexType> | ||||||
|  |               <xsd:attribute name="alias" type="xsd:string" /> | ||||||
|  |               <xsd:attribute name="name" type="xsd:string" /> | ||||||
|  |             </xsd:complexType> | ||||||
|  |           </xsd:element> | ||||||
|  |           <xsd:element name="data"> | ||||||
|  |             <xsd:complexType> | ||||||
|  |               <xsd:sequence> | ||||||
|  |                 <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||||||
|  |                 <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | ||||||
|  |               </xsd:sequence> | ||||||
|  |               <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> | ||||||
|  |               <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | ||||||
|  |               <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | ||||||
|  |               <xsd:attribute ref="xml:space" /> | ||||||
|  |             </xsd:complexType> | ||||||
|  |           </xsd:element> | ||||||
|  |           <xsd:element name="resheader"> | ||||||
|  |             <xsd:complexType> | ||||||
|  |               <xsd:sequence> | ||||||
|  |                 <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||||||
|  |               </xsd:sequence> | ||||||
|  |               <xsd:attribute name="name" type="xsd:string" use="required" /> | ||||||
|  |             </xsd:complexType> | ||||||
|  |           </xsd:element> | ||||||
|  |         </xsd:choice> | ||||||
|  |       </xsd:complexType> | ||||||
|  |     </xsd:element> | ||||||
|  |   </xsd:schema> | ||||||
|  |   <resheader name="resmimetype"> | ||||||
|  |     <value>text/microsoft-resx</value> | ||||||
|  |   </resheader> | ||||||
|  |   <resheader name="version"> | ||||||
|  |     <value>2.0</value> | ||||||
|  |   </resheader> | ||||||
|  |   <resheader name="reader"> | ||||||
|  |     <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||||
|  |   </resheader> | ||||||
|  |   <resheader name="writer"> | ||||||
|  |     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||||
|  |   </resheader> | ||||||
|  | </root> | ||||||
							
								
								
									
										103
									
								
								src/Form3.Designer.cs
									
									
									
										generated
									
									
									
										Executable file
									
								
							
							
						
						
									
										103
									
								
								src/Form3.Designer.cs
									
									
									
										generated
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,103 @@ | |||||||
|  | namespace TCPCommander | ||||||
|  | { | ||||||
|  |     partial class Form3 | ||||||
|  |     { | ||||||
|  |         /// <summary> | ||||||
|  |         /// Required designer variable. | ||||||
|  |         /// </summary> | ||||||
|  |         private System.ComponentModel.IContainer components = null; | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Clean up any resources being used. | ||||||
|  |         /// </summary> | ||||||
|  |         /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> | ||||||
|  |         protected override void Dispose(bool disposing) | ||||||
|  |         { | ||||||
|  |             if (disposing && (components != null)) | ||||||
|  |             { | ||||||
|  |                 components.Dispose(); | ||||||
|  |             } | ||||||
|  |             base.Dispose(disposing); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         #region Windows Form Designer generated code | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         /// Required method for Designer support - do not modify | ||||||
|  |         /// the contents of this method with the code editor. | ||||||
|  |         /// </summary> | ||||||
|  |         private void InitializeComponent() | ||||||
|  |         { | ||||||
|  |             this.components = new System.ComponentModel.Container(); | ||||||
|  |             this.timer1 = new System.Windows.Forms.Timer(this.components); | ||||||
|  |             this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); | ||||||
|  |             this.label1 = new System.Windows.Forms.Label(); | ||||||
|  |             this.label2 = new System.Windows.Forms.Label(); | ||||||
|  |             this.SuspendLayout(); | ||||||
|  |             //  | ||||||
|  |             // timer1 | ||||||
|  |             //  | ||||||
|  |             this.timer1.Interval = 10; | ||||||
|  |             this.timer1.Tick += new System.EventHandler(this.Timer1_Tick); | ||||||
|  |             //  | ||||||
|  |             // notifyIcon1 | ||||||
|  |             //  | ||||||
|  |             this.notifyIcon1.Text = "Computer Lock"; | ||||||
|  |             this.notifyIcon1.Visible = true; | ||||||
|  |             //  | ||||||
|  |             // label1 | ||||||
|  |             //  | ||||||
|  |             this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)  | ||||||
|  |             | System.Windows.Forms.AnchorStyles.Right))); | ||||||
|  |             this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 21F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); | ||||||
|  |             this.label1.ForeColor = System.Drawing.Color.White; | ||||||
|  |             this.label1.Location = new System.Drawing.Point(12, 20); | ||||||
|  |             this.label1.Name = "label1"; | ||||||
|  |             this.label1.Size = new System.Drawing.Size(770, 65); | ||||||
|  |             this.label1.TabIndex = 0; | ||||||
|  |             this.label1.Text = "Your computer is currently locked by the Administrator"; | ||||||
|  |             this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; | ||||||
|  |             //  | ||||||
|  |             // label2 | ||||||
|  |             //  | ||||||
|  |             this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)  | ||||||
|  |             | System.Windows.Forms.AnchorStyles.Right))); | ||||||
|  |             this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); | ||||||
|  |             this.label2.ForeColor = System.Drawing.Color.White; | ||||||
|  |             this.label2.Location = new System.Drawing.Point(12, 110); | ||||||
|  |             this.label2.Name = "label2"; | ||||||
|  |             this.label2.Size = new System.Drawing.Size(770, 50); | ||||||
|  |             this.label2.TabIndex = 1; | ||||||
|  |             this.label2.Text = "Please use your phone to unlock your computer."; | ||||||
|  |             this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; | ||||||
|  |             //  | ||||||
|  |             // Form3 | ||||||
|  |             //  | ||||||
|  |             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); | ||||||
|  |             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; | ||||||
|  |             this.AutoSize = true; | ||||||
|  |             this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(6)))), ((int)(((byte)(28)))), ((int)(((byte)(74))))); | ||||||
|  |             this.ClientSize = new System.Drawing.Size(800, 450); | ||||||
|  |             this.Controls.Add(this.label2); | ||||||
|  |             this.Controls.Add(this.label1); | ||||||
|  |             this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; | ||||||
|  |             this.Name = "Form3"; | ||||||
|  |             this.ShowIcon = false; | ||||||
|  |             this.ShowInTaskbar = false; | ||||||
|  |             this.Text = "Computer Lock"; | ||||||
|  |             this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); | ||||||
|  |             this.Load += new System.EventHandler(this.Form1_Load); | ||||||
|  |             this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint); | ||||||
|  |             this.ResumeLayout(false); | ||||||
|  |  | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         #endregion | ||||||
|  |  | ||||||
|  |         private System.Windows.Forms.Timer timer1; | ||||||
|  |         private System.Windows.Forms.Label label1; | ||||||
|  |         private System.Windows.Forms.Label label2; | ||||||
|  |         public System.Windows.Forms.NotifyIcon notifyIcon1; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										343
									
								
								src/Form3.cs
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										343
									
								
								src/Form3.cs
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,343 @@ | |||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.ComponentModel; | ||||||
|  | using System.Data; | ||||||
|  | using System.Drawing; | ||||||
|  | using System.Linq; | ||||||
|  | using System.Text; | ||||||
|  | using System.Threading.Tasks; | ||||||
|  | using System.Windows.Forms; | ||||||
|  | using System.Runtime.InteropServices; | ||||||
|  | using System.Diagnostics; | ||||||
|  | using System.Windows.Input; | ||||||
|  | using System.Threading; | ||||||
|  | using System.Management; | ||||||
|  | using System.IO; | ||||||
|  | using Microsoft.Win32; | ||||||
|  | using KeyboardHookMain; | ||||||
|  | using System.Security.Permissions; | ||||||
|  | //This project is using JSON.NET | ||||||
|  | namespace TCPCommander //need to make login form (form1), form for keybinding (form3), form for attempts and at what time (form4). (ALSO: Encrypt the keybind thingy but the logs can be left alone)  | ||||||
|  | { | ||||||
|  |     public partial class Form3 : Form //Something may be causing the taskbar from hiding, if it happens again try to remove it. | ||||||
|  |     { | ||||||
|  |         public static bool isLocked = false; | ||||||
|  |  | ||||||
|  |         //private KeyboardHook.LowLevelKeyboardListener _listener; | ||||||
|  |         //KeyboardHook2.KeyboardHookClass.i | ||||||
|  |         private static readonly IntPtr HWND_TOPMOST = new IntPtr(-1); | ||||||
|  |         private static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2); | ||||||
|  |         private const UInt32 SWP_NOSIZE = 0x0001; | ||||||
|  |         private const UInt32 SWP_NOMOVE = 0x0002; | ||||||
|  |         private const UInt32 TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE; | ||||||
|  |         [DllImport("user32.dll")] | ||||||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||||||
|  |         public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags); //THIS WINDOWS FN IS CAUSING THE TASKBAR FROM DISAPPEARING!!! NEED TO FIX IMMEDIATELY WHEN CAN! | ||||||
|  |  | ||||||
|  |         [DllImport("user32.dll")] | ||||||
|  |         [return: MarshalAs(UnmanagedType.Bool)] | ||||||
|  |         static extern bool SetForegroundWindow(IntPtr hWnd); | ||||||
|  |  | ||||||
|  |         [DllImport("user32.dll")] | ||||||
|  |         public static extern bool ShutdownBlockReasonCreate(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)] string pwszReason); | ||||||
|  |  | ||||||
|  |         [DllImport("user32.dll")] | ||||||
|  |         public static extern bool ShutdownBlockReasonDestroy(IntPtr hWnd); | ||||||
|  |  | ||||||
|  |         //[DllImport("user32.dll", SetLastError = true)] | ||||||
|  |         //public static extern bool BlockInput(bool fBlockIt); | ||||||
|  |  | ||||||
|  |         protected override void WndProc(ref Message m) | ||||||
|  |         { | ||||||
|  |             const int WM_QUERYENDSESSION = 0x0011; | ||||||
|  |             const int WM_ENDSESSION = 0x0016; | ||||||
|  |  | ||||||
|  |             if (m.Msg == WM_QUERYENDSESSION || m.Msg == WM_ENDSESSION) | ||||||
|  |                 return; | ||||||
|  |  | ||||||
|  |             base.WndProc(ref m); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         //Could be helpful, just not needed atm. | ||||||
|  |         //void ActivateApp(string processName) | ||||||
|  |         //{ | ||||||
|  |         //    Process[] p = Process.GetProcessesByName(processName); | ||||||
|  |  | ||||||
|  |         //    // Activate the first application we find with this name | ||||||
|  |         //    if (p.Count() > 0) | ||||||
|  |         //        SetForegroundWindow(p[0].MainWindowHandle); | ||||||
|  |         //} | ||||||
|  |  | ||||||
|  |         public Form3() | ||||||
|  |         { | ||||||
|  |             InitializeComponent(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         //MouseMessageFilter mmf; | ||||||
|  |  | ||||||
|  |         Form[] z; | ||||||
|  |         private void Form1_Load(object sender, EventArgs e) | ||||||
|  |         { | ||||||
|  |  | ||||||
|  |             //BlockInput(true); | ||||||
|  |             AutoScaleMode = AutoScaleMode.Font; | ||||||
|  |             //this.Opacity = 0.0; //is called seperately | ||||||
|  |             WindowState = FormWindowState.Maximized; | ||||||
|  |             notifyIcon1.Icon = SystemIcons.Shield; | ||||||
|  |  | ||||||
|  |             SystemEvents.DisplaySettingsChanging += SystemEvents_DisplaySettingsChanging; | ||||||
|  |  | ||||||
|  |             //mmf = new MouseMessageFilter(); | ||||||
|  |             //notifyIcon1.ContextMenuStrip = contextMenu1; //removed contextmenu so dk if needed? | ||||||
|  |  | ||||||
|  |             //MenuItem3.Enabled = false; //Make enabled when logged into admin page with logs and attempts. | ||||||
|  |  | ||||||
|  |             //Application.ApplicationExit += Application_ApplicationExit; dont think necessary | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         int screenCount; | ||||||
|  |         private void SystemEvents_DisplaySettingsChanging(object sender, EventArgs e) | ||||||
|  |         { | ||||||
|  |             if (isLocked) | ||||||
|  |             { | ||||||
|  |                 screenCount = Screen.AllScreens.Length; | ||||||
|  |  | ||||||
|  |                 for (int a = 0; a < z.Length; a++) | ||||||
|  |                 { | ||||||
|  |                     //Debug.WriteLine(z.Length); | ||||||
|  |                     //Debug.WriteLine(a); | ||||||
|  |                     if (z[a] != null) | ||||||
|  |                     { | ||||||
|  |                         z[a].Close(); | ||||||
|  |                         z[a].Dispose(); | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |                 z = new Form[screenCount - 1]; | ||||||
|  |                 for (int a = 0; a < z.Length; a++) | ||||||
|  |                 { | ||||||
|  |                     //Debug.WriteLine(Application.OpenForms.Count); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |                     z[a] = new Form(); | ||||||
|  |                     z[a].FormBorderStyle = FormBorderStyle.None; | ||||||
|  |                     z[a].BackColor = Color.Black; | ||||||
|  |                     z[a].Location = Screen.AllScreens[a + 1].WorkingArea.Location; | ||||||
|  |  | ||||||
|  |                     z[a].Show(); | ||||||
|  |  | ||||||
|  |                     Rectangle bounds = Screen.AllScreens[a + 1].Bounds; | ||||||
|  |                     z[a].SetBounds(bounds.X, bounds.Y, bounds.Width, bounds.Height); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         //private void MenuItem3_Click(object sender, EventArgs e) | ||||||
|  |         //{ | ||||||
|  |         //    f3.ChangeKeybind(); | ||||||
|  |         //Add Keybinder Here! //Open Keybinder in Admin Panel (dont make a new form) | ||||||
|  |         //} | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         private void MenuItem4_Click(object sender, EventArgs e) | ||||||
|  |         { | ||||||
|  |             Application.Exit(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private void Timer1_Tick(object sender, EventArgs e) //THE TIMER IS CURRENTLY DISABLED CAUSE OF THE IMPLEMENTATION OF THE KEYBOARD HOOK | ||||||
|  |         { | ||||||
|  |             //if (Control.ModifierKeys == Keys.LWin || Control.ModifierKeys == Keys.RWin || Control.ModifierKeys == Keys.ControlKey || Control.ModifierKeys == Keys.Escape) | ||||||
|  |             //{ | ||||||
|  |             //    SetForegroundWindow(this.Handle); | ||||||
|  |             //} | ||||||
|  |  | ||||||
|  |             //if (Control.ModifierKeys == Keys.Alt || Control.ModifierKeys == Keys.ControlKey) | ||||||
|  |             //{ | ||||||
|  |             //    SetForegroundWindow(this.Handle); | ||||||
|  |             //} | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public bool PreFilterMessage(ref Message m) | ||||||
|  |         { | ||||||
|  |             if (m.Msg == 0x201 || m.Msg == 0x202 || m.Msg == 0x203) return true; | ||||||
|  |             if (m.Msg == 0x204 || m.Msg == 0x205 || m.Msg == 0x206) return true; | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         public void LockPC() | ||||||
|  |         { | ||||||
|  |             this.Show(); | ||||||
|  |             SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS); //PLACES THE LOCKED PC MENU IN FRONT WHEN ENABLED, BUT WAS CHANGED FOR this.BringToFront(); BECAUSE IT CAUSES THE TASKBAR TO GLITCH OUT UNTIL THE PROGRAM IS CLOSED. | ||||||
|  |             //Application.OpenForms["Form1"].BringToFront(); | ||||||
|  |  | ||||||
|  |             Cursor.Hide(); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |             KeyboardHookMain.KeyboardHook.EngageFullKeyboardLockdown(); | ||||||
|  |             //mmf.DisableMouse(); | ||||||
|  |  | ||||||
|  |             StopShutdown("(Shutdown Disabled)\nReason: Lock Exploitation Protection"); | ||||||
|  |              | ||||||
|  |             this.Opacity = 1; | ||||||
|  |  | ||||||
|  |             notifyIcon1.Visible = true;  //This is working fsr look into... Looks like a windows thing. | ||||||
|  |             notifyIcon1.BalloonTipTitle = ("Computer Lock"); | ||||||
|  |             notifyIcon1.BalloonTipText = ("Your computer has been locked."); | ||||||
|  |             notifyIcon1.ShowBalloonTip(5000); | ||||||
|  |             isLocked = true; | ||||||
|  |  | ||||||
|  |             screenCount = Screen.AllScreens.Length; | ||||||
|  |             z = new Form[screenCount - 1]; | ||||||
|  |             if (screenCount > 1) | ||||||
|  |             { | ||||||
|  |                 for (int a = 0; a < z.Length; a++) | ||||||
|  |                 { | ||||||
|  |                     Debug.WriteLine(Application.OpenForms.Count); | ||||||
|  |  | ||||||
|  |                     z[a] = new Form(); | ||||||
|  |                     z[a].FormBorderStyle = FormBorderStyle.None; | ||||||
|  |                     z[a].BackColor = Color.Black; | ||||||
|  |                     z[a].Location = Screen.AllScreens[a + 1].WorkingArea.Location; | ||||||
|  |  | ||||||
|  |                     z[a].Show(); | ||||||
|  |  | ||||||
|  |                     Rectangle bounds = Screen.AllScreens[a + 1].Bounds; | ||||||
|  |                     z[a].SetBounds(bounds.X, bounds.Y, bounds.Width, bounds.Height); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             //KeyboardHookMain.KeyboardHook.LockedDownKeyboardKeyPressed += KeyboardHook_LockedDownKeyboardKeyPressed; //not needed really | ||||||
|  |             //BlockInputMtd(TimeSpan.FromMilliseconds(10000)); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         //private void KeyboardHook_LockedDownKeyboardKeyPressed(object sender, KeyboardLockDownKeyPressedEventArgs e) | ||||||
|  |         //{ | ||||||
|  |         //    Debug.WriteLine("Key Pressed"); | ||||||
|  |         //} | ||||||
|  |  | ||||||
|  |         public void UnlockPC() | ||||||
|  |         { | ||||||
|  |             this.Hide(); | ||||||
|  |             SetWindowPos(this.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS); | ||||||
|  |  | ||||||
|  |             Cursor.Show(); | ||||||
|  |             ResetShutdown(); | ||||||
|  |             KeyboardHookMain.KeyboardHook.ReleaseFullKeyboardLockdown(); | ||||||
|  |             //mmf.EnableMouse(); | ||||||
|  |  | ||||||
|  |             this.Opacity = 0.0; | ||||||
|  |  | ||||||
|  |             notifyIcon1.BalloonTipTitle = "Computer Lock"; | ||||||
|  |             notifyIcon1.BalloonTipText = "Your computer has been unlocked."; | ||||||
|  |             notifyIcon1.ShowBalloonTip(5000); //This is working on an off as us 7/29/19 maybe just a bug during the session. | ||||||
|  |             isLocked = false; | ||||||
|  |  | ||||||
|  |             for (int a = 0; a < z.Length; a++) | ||||||
|  |             { | ||||||
|  |                 z[a].Close(); | ||||||
|  |                 z[a].Dispose(); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         private void StopShutdown(string strMsg) | ||||||
|  |         { | ||||||
|  |             try | ||||||
|  |             { | ||||||
|  |                 if (ShutdownBlockReasonCreate(this.Handle, strMsg)) | ||||||
|  |                 { | ||||||
|  |                     Debug.WriteLine("Shutdown aborted."); | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     Debug.WriteLine("Shutdown couldn't be aborted."); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             catch (Exception e) | ||||||
|  |             { | ||||||
|  |                 Console.WriteLine("StopShutdown Error: " + e.Message + " " + e.StackTrace); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private void ResetShutdown() | ||||||
|  |         { | ||||||
|  |             try | ||||||
|  |             { | ||||||
|  |                 if (ShutdownBlockReasonDestroy(this.Handle)) | ||||||
|  |                 { | ||||||
|  |                     Debug.WriteLine("Shutdown abortion aborted."); | ||||||
|  |                 } | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     Debug.WriteLine("Shutdown abortion couldn't be aborted."); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             catch (Exception e) | ||||||
|  |             { | ||||||
|  |                 Debug.WriteLine("ResetShutdown Error: " + e.Message + " " + e.StackTrace); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         //public static void BlockInputMtd(TimeSpan span) //BLOCKS INPUT SO HOOK CAN'T SEE IT, NEED TO FIND A WAY TO DETECT KEY PRESS WITHOUT LETTING KEY THROUGH. DELAY JUST WONT WORK. | ||||||
|  |         //{ | ||||||
|  |         //    try | ||||||
|  |         //    { | ||||||
|  |         //        BlockInput(true); | ||||||
|  |         //        Thread.Sleep(span); | ||||||
|  |         //    } | ||||||
|  |         //    finally | ||||||
|  |         //    { | ||||||
|  |         //        BlockInput(false); | ||||||
|  |         //    } | ||||||
|  |  | ||||||
|  |         //} | ||||||
|  |  | ||||||
|  |         private void Form1_Paint(object sender, PaintEventArgs e) | ||||||
|  |         { | ||||||
|  |             Pen p = new Pen(Color.White); //Add this to form2 and form3. Make thickness for all corners as it is only for the top ones. | ||||||
|  |             p.Width = 5; | ||||||
|  |             Graphics g = e.Graphics; | ||||||
|  |             g.DrawRectangle(p, new Rectangle(label1.Location.X - 5, label1.Location.Y - 5, label1.Width + 10, label1.Height + 10)); | ||||||
|  |             g.DrawRectangle(p, new Rectangle(label2.Location.X - 5, label2.Location.Y - 5, label2.Width + 10, label2.Height + 10)); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         //private void Application_ApplicationExit(object sender, EventArgs e) | ||||||
|  |         //{ | ||||||
|  |         //    SystemEvents.DisplaySettingsChanged -= SystemEvents_DisplaySettingsChanged; | ||||||
|  |         //    SystemEvents.SessionEnded -= SystemEvents_SessionEnded; | ||||||
|  |         //    Application.ApplicationExit -= Application_ApplicationExit; | ||||||
|  |         //} | ||||||
|  |  | ||||||
|  |         private void Form1_FormClosing(object sender, FormClosingEventArgs e) | ||||||
|  |         { | ||||||
|  |             notifyIcon1.BalloonTipClosed += (s, args) => | ||||||
|  |             { | ||||||
|  |                 var thisIcon = (NotifyIcon)sender; | ||||||
|  |                 thisIcon.Visible = false; | ||||||
|  |                 thisIcon.Dispose(); | ||||||
|  |                 SystemEvents.DisplaySettingsChanging -= SystemEvents_DisplaySettingsChanging; | ||||||
|  |             }; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     //[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] | ||||||
|  |     //public class MouseMessageFilter : IMessageFilter | ||||||
|  |     //{ | ||||||
|  |     //    public void EnableMouse() | ||||||
|  |     //    { | ||||||
|  |     //        Application.RemoveMessageFilter(this); | ||||||
|  |     //    } | ||||||
|  |     // | ||||||
|  |     //    public void DisableMouse() | ||||||
|  |     //    { | ||||||
|  |     //        Application.AddMessageFilter(this); | ||||||
|  |     //    } | ||||||
|  |  | ||||||
|  |         //public bool PreFilterMessage(ref Message m) //wanted to add cause its cool, but doesnt work and can degrade performance. Only thing that can occur is the user pressing the notify balloon tip | ||||||
|  |         //{ | ||||||
|  |         //    if (m.Msg == 0x201 || m.Msg == 0x202 || m.Msg == 0x203) return true; | ||||||
|  |         //    if (m.Msg == 0x204 || m.Msg == 0x205 || m.Msg == 0x206) return true; | ||||||
|  |         //    return false; | ||||||
|  |         //} | ||||||
|  |     //} | ||||||
|  | } | ||||||
							
								
								
									
										126
									
								
								src/Form3.resx
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										126
									
								
								src/Form3.resx
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,126 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <root> | ||||||
|  |   <!--  | ||||||
|  |     Microsoft ResX Schema  | ||||||
|  |      | ||||||
|  |     Version 2.0 | ||||||
|  |      | ||||||
|  |     The primary goals of this format is to allow a simple XML format  | ||||||
|  |     that is mostly human readable. The generation and parsing of the  | ||||||
|  |     various data types are done through the TypeConverter classes  | ||||||
|  |     associated with the data types. | ||||||
|  |      | ||||||
|  |     Example: | ||||||
|  |      | ||||||
|  |     ... ado.net/XML headers & schema ... | ||||||
|  |     <resheader name="resmimetype">text/microsoft-resx</resheader> | ||||||
|  |     <resheader name="version">2.0</resheader> | ||||||
|  |     <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | ||||||
|  |     <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | ||||||
|  |     <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | ||||||
|  |     <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | ||||||
|  |     <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | ||||||
|  |         <value>[base64 mime encoded serialized .NET Framework object]</value> | ||||||
|  |     </data> | ||||||
|  |     <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | ||||||
|  |         <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | ||||||
|  |         <comment>This is a comment</comment> | ||||||
|  |     </data> | ||||||
|  |                  | ||||||
|  |     There are any number of "resheader" rows that contain simple  | ||||||
|  |     name/value pairs. | ||||||
|  |      | ||||||
|  |     Each data row contains a name, and value. The row also contains a  | ||||||
|  |     type or mimetype. Type corresponds to a .NET class that support  | ||||||
|  |     text/value conversion through the TypeConverter architecture.  | ||||||
|  |     Classes that don't support this are serialized and stored with the  | ||||||
|  |     mimetype set. | ||||||
|  |      | ||||||
|  |     The mimetype is used for serialized objects, and tells the  | ||||||
|  |     ResXResourceReader how to depersist the object. This is currently not  | ||||||
|  |     extensible. For a given mimetype the value must be set accordingly: | ||||||
|  |      | ||||||
|  |     Note - application/x-microsoft.net.object.binary.base64 is the format  | ||||||
|  |     that the ResXResourceWriter will generate, however the reader can  | ||||||
|  |     read any of the formats listed below. | ||||||
|  |      | ||||||
|  |     mimetype: application/x-microsoft.net.object.binary.base64 | ||||||
|  |     value   : The object must be serialized with  | ||||||
|  |             : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | ||||||
|  |             : and then encoded with base64 encoding. | ||||||
|  |      | ||||||
|  |     mimetype: application/x-microsoft.net.object.soap.base64 | ||||||
|  |     value   : The object must be serialized with  | ||||||
|  |             : System.Runtime.Serialization.Formatters.Soap.SoapFormatter | ||||||
|  |             : and then encoded with base64 encoding. | ||||||
|  |  | ||||||
|  |     mimetype: application/x-microsoft.net.object.bytearray.base64 | ||||||
|  |     value   : The object must be serialized into a byte array  | ||||||
|  |             : using a System.ComponentModel.TypeConverter | ||||||
|  |             : and then encoded with base64 encoding. | ||||||
|  |     --> | ||||||
|  |   <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | ||||||
|  |     <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | ||||||
|  |     <xsd:element name="root" msdata:IsDataSet="true"> | ||||||
|  |       <xsd:complexType> | ||||||
|  |         <xsd:choice maxOccurs="unbounded"> | ||||||
|  |           <xsd:element name="metadata"> | ||||||
|  |             <xsd:complexType> | ||||||
|  |               <xsd:sequence> | ||||||
|  |                 <xsd:element name="value" type="xsd:string" minOccurs="0" /> | ||||||
|  |               </xsd:sequence> | ||||||
|  |               <xsd:attribute name="name" use="required" type="xsd:string" /> | ||||||
|  |               <xsd:attribute name="type" type="xsd:string" /> | ||||||
|  |               <xsd:attribute name="mimetype" type="xsd:string" /> | ||||||
|  |               <xsd:attribute ref="xml:space" /> | ||||||
|  |             </xsd:complexType> | ||||||
|  |           </xsd:element> | ||||||
|  |           <xsd:element name="assembly"> | ||||||
|  |             <xsd:complexType> | ||||||
|  |               <xsd:attribute name="alias" type="xsd:string" /> | ||||||
|  |               <xsd:attribute name="name" type="xsd:string" /> | ||||||
|  |             </xsd:complexType> | ||||||
|  |           </xsd:element> | ||||||
|  |           <xsd:element name="data"> | ||||||
|  |             <xsd:complexType> | ||||||
|  |               <xsd:sequence> | ||||||
|  |                 <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||||||
|  |                 <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | ||||||
|  |               </xsd:sequence> | ||||||
|  |               <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> | ||||||
|  |               <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | ||||||
|  |               <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | ||||||
|  |               <xsd:attribute ref="xml:space" /> | ||||||
|  |             </xsd:complexType> | ||||||
|  |           </xsd:element> | ||||||
|  |           <xsd:element name="resheader"> | ||||||
|  |             <xsd:complexType> | ||||||
|  |               <xsd:sequence> | ||||||
|  |                 <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||||||
|  |               </xsd:sequence> | ||||||
|  |               <xsd:attribute name="name" type="xsd:string" use="required" /> | ||||||
|  |             </xsd:complexType> | ||||||
|  |           </xsd:element> | ||||||
|  |         </xsd:choice> | ||||||
|  |       </xsd:complexType> | ||||||
|  |     </xsd:element> | ||||||
|  |   </xsd:schema> | ||||||
|  |   <resheader name="resmimetype"> | ||||||
|  |     <value>text/microsoft-resx</value> | ||||||
|  |   </resheader> | ||||||
|  |   <resheader name="version"> | ||||||
|  |     <value>2.0</value> | ||||||
|  |   </resheader> | ||||||
|  |   <resheader name="reader"> | ||||||
|  |     <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||||
|  |   </resheader> | ||||||
|  |   <resheader name="writer"> | ||||||
|  |     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||||
|  |   </resheader> | ||||||
|  |   <metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | ||||||
|  |     <value>17, 17</value> | ||||||
|  |   </metadata> | ||||||
|  |   <metadata name="notifyIcon1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | ||||||
|  |     <value>104, 17</value> | ||||||
|  |   </metadata> | ||||||
|  | </root> | ||||||
							
								
								
									
										1733
									
								
								src/KeyboardLock.cs
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										1733
									
								
								src/KeyboardLock.cs
									
									
									
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										22
									
								
								src/Program.cs
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										22
									
								
								src/Program.cs
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,22 @@ | |||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.Linq; | ||||||
|  | using System.Threading.Tasks; | ||||||
|  | using System.Windows.Forms; | ||||||
|  |  | ||||||
|  | namespace TCPCommander | ||||||
|  | { | ||||||
|  |     static class Program | ||||||
|  |     { | ||||||
|  |         /// <summary> | ||||||
|  |         /// The main entry point for the application. | ||||||
|  |         /// </summary> | ||||||
|  |         [STAThread] | ||||||
|  |         static void Main() | ||||||
|  |         { | ||||||
|  |             Application.EnableVisualStyles(); | ||||||
|  |             Application.SetCompatibleTextRenderingDefault(false); | ||||||
|  |             Application.Run(new Form1()); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										36
									
								
								src/Properties/AssemblyInfo.cs
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										36
									
								
								src/Properties/AssemblyInfo.cs
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,36 @@ | |||||||
|  | using System.Reflection; | ||||||
|  | using System.Runtime.CompilerServices; | ||||||
|  | using System.Runtime.InteropServices; | ||||||
|  |  | ||||||
|  | // General Information about an assembly is controlled through the following | ||||||
|  | // set of attributes. Change these attribute values to modify the information | ||||||
|  | // associated with an assembly. | ||||||
|  | [assembly: AssemblyTitle("TCPCommander")] | ||||||
|  | [assembly: AssemblyDescription("")] | ||||||
|  | [assembly: AssemblyConfiguration("")] | ||||||
|  | [assembly: AssemblyCompany("")] | ||||||
|  | [assembly: AssemblyProduct("TCPCommander")] | ||||||
|  | [assembly: AssemblyCopyright("Copyright ©  2020")] | ||||||
|  | [assembly: AssemblyTrademark("")] | ||||||
|  | [assembly: AssemblyCulture("")] | ||||||
|  |  | ||||||
|  | // Setting ComVisible to false makes the types in this assembly not visible | ||||||
|  | // to COM components.  If you need to access a type in this assembly from | ||||||
|  | // COM, set the ComVisible attribute to true on that type. | ||||||
|  | [assembly: ComVisible(false)] | ||||||
|  |  | ||||||
|  | // The following GUID is for the ID of the typelib if this project is exposed to COM | ||||||
|  | [assembly: Guid("f924fba5-b17d-4e39-8e5e-de79969c2bfe")] | ||||||
|  |  | ||||||
|  | // Version information for an assembly consists of the following four values: | ||||||
|  | // | ||||||
|  | //      Major Version | ||||||
|  | //      Minor Version | ||||||
|  | //      Build Number | ||||||
|  | //      Revision | ||||||
|  | // | ||||||
|  | // You can specify all the values or you can default the Build and Revision Numbers | ||||||
|  | // by using the '*' as shown below: | ||||||
|  | // [assembly: AssemblyVersion("1.0.*")] | ||||||
|  | [assembly: AssemblyVersion("1.0.0.0")] | ||||||
|  | [assembly: AssemblyFileVersion("1.0.0.0")] | ||||||
							
								
								
									
										71
									
								
								src/Properties/Resources.Designer.cs
									
									
									
										generated
									
									
									
										Executable file
									
								
							
							
						
						
									
										71
									
								
								src/Properties/Resources.Designer.cs
									
									
									
										generated
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,71 @@ | |||||||
|  | //------------------------------------------------------------------------------ | ||||||
|  | // <auto-generated> | ||||||
|  | //     This code was generated by a tool. | ||||||
|  | //     Runtime Version:4.0.30319.42000 | ||||||
|  | // | ||||||
|  | //     Changes to this file may cause incorrect behavior and will be lost if | ||||||
|  | //     the code is regenerated. | ||||||
|  | // </auto-generated> | ||||||
|  | //------------------------------------------------------------------------------ | ||||||
|  |  | ||||||
|  | namespace TCPCommander.Properties | ||||||
|  | { | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     /// <summary> | ||||||
|  |     ///   A strongly-typed resource class, for looking up localized strings, etc. | ||||||
|  |     /// </summary> | ||||||
|  |     // This class was auto-generated by the StronglyTypedResourceBuilder | ||||||
|  |     // class via a tool like ResGen or Visual Studio. | ||||||
|  |     // To add or remove a member, edit your .ResX file then rerun ResGen | ||||||
|  |     // with the /str option, or rebuild your VS project. | ||||||
|  |     [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] | ||||||
|  |     [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] | ||||||
|  |     [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] | ||||||
|  |     internal class Resources | ||||||
|  |     { | ||||||
|  |  | ||||||
|  |         private static global::System.Resources.ResourceManager resourceMan; | ||||||
|  |  | ||||||
|  |         private static global::System.Globalization.CultureInfo resourceCulture; | ||||||
|  |  | ||||||
|  |         [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] | ||||||
|  |         internal Resources() | ||||||
|  |         { | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         ///   Returns the cached ResourceManager instance used by this class. | ||||||
|  |         /// </summary> | ||||||
|  |         [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] | ||||||
|  |         internal static global::System.Resources.ResourceManager ResourceManager | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 if ((resourceMan == null)) | ||||||
|  |                 { | ||||||
|  |                     global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TCPCommander.Properties.Resources", typeof(Resources).Assembly); | ||||||
|  |                     resourceMan = temp; | ||||||
|  |                 } | ||||||
|  |                 return resourceMan; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         /// <summary> | ||||||
|  |         ///   Overrides the current thread's CurrentUICulture property for all | ||||||
|  |         ///   resource lookups using this strongly typed resource class. | ||||||
|  |         /// </summary> | ||||||
|  |         [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] | ||||||
|  |         internal static global::System.Globalization.CultureInfo Culture | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 return resourceCulture; | ||||||
|  |             } | ||||||
|  |             set | ||||||
|  |             { | ||||||
|  |                 resourceCulture = value; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										117
									
								
								src/Properties/Resources.resx
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										117
									
								
								src/Properties/Resources.resx
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,117 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <root> | ||||||
|  |   <!--  | ||||||
|  |     Microsoft ResX Schema  | ||||||
|  |      | ||||||
|  |     Version 2.0 | ||||||
|  |      | ||||||
|  |     The primary goals of this format is to allow a simple XML format  | ||||||
|  |     that is mostly human readable. The generation and parsing of the  | ||||||
|  |     various data types are done through the TypeConverter classes  | ||||||
|  |     associated with the data types. | ||||||
|  |      | ||||||
|  |     Example: | ||||||
|  |      | ||||||
|  |     ... ado.net/XML headers & schema ... | ||||||
|  |     <resheader name="resmimetype">text/microsoft-resx</resheader> | ||||||
|  |     <resheader name="version">2.0</resheader> | ||||||
|  |     <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | ||||||
|  |     <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | ||||||
|  |     <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | ||||||
|  |     <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | ||||||
|  |     <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | ||||||
|  |         <value>[base64 mime encoded serialized .NET Framework object]</value> | ||||||
|  |     </data> | ||||||
|  |     <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | ||||||
|  |         <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | ||||||
|  |         <comment>This is a comment</comment> | ||||||
|  |     </data> | ||||||
|  |                  | ||||||
|  |     There are any number of "resheader" rows that contain simple  | ||||||
|  |     name/value pairs. | ||||||
|  |      | ||||||
|  |     Each data row contains a name, and value. The row also contains a  | ||||||
|  |     type or mimetype. Type corresponds to a .NET class that support  | ||||||
|  |     text/value conversion through the TypeConverter architecture.  | ||||||
|  |     Classes that don't support this are serialized and stored with the  | ||||||
|  |     mimetype set. | ||||||
|  |      | ||||||
|  |     The mimetype is used for serialized objects, and tells the  | ||||||
|  |     ResXResourceReader how to depersist the object. This is currently not  | ||||||
|  |     extensible. For a given mimetype the value must be set accordingly: | ||||||
|  |      | ||||||
|  |     Note - application/x-microsoft.net.object.binary.base64 is the format  | ||||||
|  |     that the ResXResourceWriter will generate, however the reader can  | ||||||
|  |     read any of the formats listed below. | ||||||
|  |      | ||||||
|  |     mimetype: application/x-microsoft.net.object.binary.base64 | ||||||
|  |     value   : The object must be serialized with  | ||||||
|  |             : System.Serialization.Formatters.Binary.BinaryFormatter | ||||||
|  |             : and then encoded with base64 encoding. | ||||||
|  |      | ||||||
|  |     mimetype: application/x-microsoft.net.object.soap.base64 | ||||||
|  |     value   : The object must be serialized with  | ||||||
|  |             : System.Runtime.Serialization.Formatters.Soap.SoapFormatter | ||||||
|  |             : and then encoded with base64 encoding. | ||||||
|  |  | ||||||
|  |     mimetype: application/x-microsoft.net.object.bytearray.base64 | ||||||
|  |     value   : The object must be serialized into a byte array  | ||||||
|  |             : using a System.ComponentModel.TypeConverter | ||||||
|  |             : and then encoded with base64 encoding. | ||||||
|  |     --> | ||||||
|  |   <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | ||||||
|  |     <xsd:element name="root" msdata:IsDataSet="true"> | ||||||
|  |       <xsd:complexType> | ||||||
|  |         <xsd:choice maxOccurs="unbounded"> | ||||||
|  |           <xsd:element name="metadata"> | ||||||
|  |             <xsd:complexType> | ||||||
|  |               <xsd:sequence> | ||||||
|  |                 <xsd:element name="value" type="xsd:string" minOccurs="0" /> | ||||||
|  |               </xsd:sequence> | ||||||
|  |               <xsd:attribute name="name" type="xsd:string" /> | ||||||
|  |               <xsd:attribute name="type" type="xsd:string" /> | ||||||
|  |               <xsd:attribute name="mimetype" type="xsd:string" /> | ||||||
|  |             </xsd:complexType> | ||||||
|  |           </xsd:element> | ||||||
|  |           <xsd:element name="assembly"> | ||||||
|  |             <xsd:complexType> | ||||||
|  |               <xsd:attribute name="alias" type="xsd:string" /> | ||||||
|  |               <xsd:attribute name="name" type="xsd:string" /> | ||||||
|  |             </xsd:complexType> | ||||||
|  |           </xsd:element> | ||||||
|  |           <xsd:element name="data"> | ||||||
|  |             <xsd:complexType> | ||||||
|  |               <xsd:sequence> | ||||||
|  |                 <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||||||
|  |                 <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | ||||||
|  |               </xsd:sequence> | ||||||
|  |               <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> | ||||||
|  |               <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | ||||||
|  |               <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | ||||||
|  |             </xsd:complexType> | ||||||
|  |           </xsd:element> | ||||||
|  |           <xsd:element name="resheader"> | ||||||
|  |             <xsd:complexType> | ||||||
|  |               <xsd:sequence> | ||||||
|  |                 <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | ||||||
|  |               </xsd:sequence> | ||||||
|  |               <xsd:attribute name="name" type="xsd:string" use="required" /> | ||||||
|  |             </xsd:complexType> | ||||||
|  |           </xsd:element> | ||||||
|  |         </xsd:choice> | ||||||
|  |       </xsd:complexType> | ||||||
|  |     </xsd:element> | ||||||
|  |   </xsd:schema> | ||||||
|  |   <resheader name="resmimetype"> | ||||||
|  |     <value>text/microsoft-resx</value> | ||||||
|  |   </resheader> | ||||||
|  |   <resheader name="version"> | ||||||
|  |     <value>2.0</value> | ||||||
|  |   </resheader> | ||||||
|  |   <resheader name="reader"> | ||||||
|  |     <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||||
|  |   </resheader> | ||||||
|  |   <resheader name="writer"> | ||||||
|  |     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | ||||||
|  |   </resheader> | ||||||
|  | </root> | ||||||
							
								
								
									
										30
									
								
								src/Properties/Settings.Designer.cs
									
									
									
										generated
									
									
									
										Executable file
									
								
							
							
						
						
									
										30
									
								
								src/Properties/Settings.Designer.cs
									
									
									
										generated
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,30 @@ | |||||||
|  | //------------------------------------------------------------------------------ | ||||||
|  | // <auto-generated> | ||||||
|  | //     This code was generated by a tool. | ||||||
|  | //     Runtime Version:4.0.30319.42000 | ||||||
|  | // | ||||||
|  | //     Changes to this file may cause incorrect behavior and will be lost if | ||||||
|  | //     the code is regenerated. | ||||||
|  | // </auto-generated> | ||||||
|  | //------------------------------------------------------------------------------ | ||||||
|  |  | ||||||
|  | namespace TCPCommander.Properties | ||||||
|  | { | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] | ||||||
|  |     [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] | ||||||
|  |     internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase | ||||||
|  |     { | ||||||
|  |  | ||||||
|  |         private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); | ||||||
|  |  | ||||||
|  |         public static Settings Default | ||||||
|  |         { | ||||||
|  |             get | ||||||
|  |             { | ||||||
|  |                 return defaultInstance; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								src/Properties/Settings.settings
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								src/Properties/Settings.settings
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | <?xml version='1.0' encoding='utf-8'?> | ||||||
|  | <SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)"> | ||||||
|  |   <Profiles> | ||||||
|  |     <Profile Name="(Default)" /> | ||||||
|  |   </Profiles> | ||||||
|  |   <Settings /> | ||||||
|  | </SettingsFile> | ||||||
							
								
								
									
										120
									
								
								src/TCPCommander.csproj
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										120
									
								
								src/TCPCommander.csproj
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,120 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||||
|  |   <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> | ||||||
|  |   <PropertyGroup> | ||||||
|  |     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||||||
|  |     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||||||
|  |     <ProjectGuid>{F924FBA5-B17D-4E39-8E5E-DE79969C2BFE}</ProjectGuid> | ||||||
|  |     <OutputType>WinExe</OutputType> | ||||||
|  |     <RootNamespace>TCPCommander</RootNamespace> | ||||||
|  |     <AssemblyName>TCPCommander</AssemblyName> | ||||||
|  |     <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion> | ||||||
|  |     <FileAlignment>512</FileAlignment> | ||||||
|  |     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> | ||||||
|  |     <Deterministic>true</Deterministic> | ||||||
|  |     <NuGetPackageImportStamp> | ||||||
|  |     </NuGetPackageImportStamp> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | ||||||
|  |     <PlatformTarget>AnyCPU</PlatformTarget> | ||||||
|  |     <DebugSymbols>true</DebugSymbols> | ||||||
|  |     <DebugType>full</DebugType> | ||||||
|  |     <Optimize>false</Optimize> | ||||||
|  |     <OutputPath>bin\Debug\</OutputPath> | ||||||
|  |     <DefineConstants>DEBUG;TRACE</DefineConstants> | ||||||
|  |     <ErrorReport>prompt</ErrorReport> | ||||||
|  |     <WarningLevel>4</WarningLevel> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | ||||||
|  |     <PlatformTarget>AnyCPU</PlatformTarget> | ||||||
|  |     <DebugType>pdbonly</DebugType> | ||||||
|  |     <Optimize>true</Optimize> | ||||||
|  |     <OutputPath>bin\Release\</OutputPath> | ||||||
|  |     <DefineConstants>TRACE</DefineConstants> | ||||||
|  |     <ErrorReport>prompt</ErrorReport> | ||||||
|  |     <WarningLevel>4</WarningLevel> | ||||||
|  |   </PropertyGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <Reference Include="Open.Nat, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f22a6a4582336c76, processorArchitecture=MSIL"> | ||||||
|  |       <HintPath>packages\Open.NAT.2.1.0.0\lib\net45\Open.Nat.dll</HintPath> | ||||||
|  |     </Reference> | ||||||
|  |     <Reference Include="System" /> | ||||||
|  |     <Reference Include="System.Core" /> | ||||||
|  |     <Reference Include="System.Management" /> | ||||||
|  |     <Reference Include="System.Net.Sockets, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> | ||||||
|  |       <HintPath>packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll</HintPath> | ||||||
|  |       <Private>True</Private> | ||||||
|  |       <Private>True</Private> | ||||||
|  |     </Reference> | ||||||
|  |     <Reference Include="System.Web" /> | ||||||
|  |     <Reference Include="System.Xml.Linq" /> | ||||||
|  |     <Reference Include="System.Data.DataSetExtensions" /> | ||||||
|  |     <Reference Include="Microsoft.CSharp" /> | ||||||
|  |     <Reference Include="System.Data" /> | ||||||
|  |     <Reference Include="System.Deployment" /> | ||||||
|  |     <Reference Include="System.Drawing" /> | ||||||
|  |     <Reference Include="System.Net.Http" /> | ||||||
|  |     <Reference Include="System.Windows.Forms" /> | ||||||
|  |     <Reference Include="System.Xml" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <Compile Include="Form1.cs"> | ||||||
|  |       <SubType>Form</SubType> | ||||||
|  |     </Compile> | ||||||
|  |     <Compile Include="Form1.Designer.cs"> | ||||||
|  |       <DependentUpon>Form1.cs</DependentUpon> | ||||||
|  |     </Compile> | ||||||
|  |     <Compile Include="Form3.cs"> | ||||||
|  |       <SubType>Form</SubType> | ||||||
|  |     </Compile> | ||||||
|  |     <Compile Include="Form3.designer.cs"> | ||||||
|  |       <DependentUpon>Form3.cs</DependentUpon> | ||||||
|  |     </Compile> | ||||||
|  |     <Compile Include="Form2.cs"> | ||||||
|  |       <SubType>Form</SubType> | ||||||
|  |     </Compile> | ||||||
|  |     <Compile Include="Form2.Designer.cs"> | ||||||
|  |       <DependentUpon>Form2.cs</DependentUpon> | ||||||
|  |     </Compile> | ||||||
|  |     <Compile Include="KeyboardLock.cs" /> | ||||||
|  |     <Compile Include="Program.cs" /> | ||||||
|  |     <Compile Include="Properties\AssemblyInfo.cs" /> | ||||||
|  |     <EmbeddedResource Include="Form1.resx"> | ||||||
|  |       <DependentUpon>Form1.cs</DependentUpon> | ||||||
|  |     </EmbeddedResource> | ||||||
|  |     <EmbeddedResource Include="Form3.resx"> | ||||||
|  |       <DependentUpon>Form3.cs</DependentUpon> | ||||||
|  |     </EmbeddedResource> | ||||||
|  |     <EmbeddedResource Include="Form2.resx"> | ||||||
|  |       <DependentUpon>Form2.cs</DependentUpon> | ||||||
|  |     </EmbeddedResource> | ||||||
|  |     <EmbeddedResource Include="Properties\Resources.resx"> | ||||||
|  |       <Generator>ResXFileCodeGenerator</Generator> | ||||||
|  |       <LastGenOutput>Resources.Designer.cs</LastGenOutput> | ||||||
|  |       <SubType>Designer</SubType> | ||||||
|  |     </EmbeddedResource> | ||||||
|  |     <Compile Include="Properties\Resources.Designer.cs"> | ||||||
|  |       <AutoGen>True</AutoGen> | ||||||
|  |       <DependentUpon>Resources.resx</DependentUpon> | ||||||
|  |     </Compile> | ||||||
|  |     <None Include="packages.config" /> | ||||||
|  |     <None Include="Properties\Settings.settings"> | ||||||
|  |       <Generator>SettingsSingleFileGenerator</Generator> | ||||||
|  |       <LastGenOutput>Settings.Designer.cs</LastGenOutput> | ||||||
|  |     </None> | ||||||
|  |     <Compile Include="Properties\Settings.Designer.cs"> | ||||||
|  |       <AutoGen>True</AutoGen> | ||||||
|  |       <DependentUpon>Settings.settings</DependentUpon> | ||||||
|  |       <DesignTimeSharedInput>True</DesignTimeSharedInput> | ||||||
|  |     </Compile> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <None Include="App.config" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <ItemGroup> | ||||||
|  |     <Content Include="packages\FreeRDP.2.0.0.13\freerdp-client.dll" /> | ||||||
|  |     <Content Include="packages\FreeRDP.2.0.0.13\freerdp.dll" /> | ||||||
|  |     <Content Include="packages\FreeRDP.2.0.0.13\winpr.dll" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | ||||||
|  | </Project> | ||||||
							
								
								
									
										25
									
								
								src/TCPCommander.sln
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										25
									
								
								src/TCPCommander.sln
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  |  | ||||||
|  | Microsoft Visual Studio Solution File, Format Version 12.00 | ||||||
|  | # Visual Studio Version 16 | ||||||
|  | VisualStudioVersion = 16.0.29519.87 | ||||||
|  | MinimumVisualStudioVersion = 10.0.40219.1 | ||||||
|  | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TCPCommander", "TCPCommander.csproj", "{F924FBA5-B17D-4E39-8E5E-DE79969C2BFE}" | ||||||
|  | EndProject | ||||||
|  | Global | ||||||
|  | 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||||
|  | 		Debug|Any CPU = Debug|Any CPU | ||||||
|  | 		Release|Any CPU = Release|Any CPU | ||||||
|  | 	EndGlobalSection | ||||||
|  | 	GlobalSection(ProjectConfigurationPlatforms) = postSolution | ||||||
|  | 		{F924FBA5-B17D-4E39-8E5E-DE79969C2BFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||||
|  | 		{F924FBA5-B17D-4E39-8E5E-DE79969C2BFE}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||||
|  | 		{F924FBA5-B17D-4E39-8E5E-DE79969C2BFE}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||||
|  | 		{F924FBA5-B17D-4E39-8E5E-DE79969C2BFE}.Release|Any CPU.Build.0 = Release|Any CPU | ||||||
|  | 	EndGlobalSection | ||||||
|  | 	GlobalSection(SolutionProperties) = preSolution | ||||||
|  | 		HideSolutionNode = FALSE | ||||||
|  | 	EndGlobalSection | ||||||
|  | 	GlobalSection(ExtensibilityGlobals) = postSolution | ||||||
|  | 		SolutionGuid = {85233985-BFA9-4BFC-9ED6-E281E2F662A0} | ||||||
|  | 	EndGlobalSection | ||||||
|  | EndGlobal | ||||||
							
								
								
									
										5
									
								
								src/packages.config
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								src/packages.config
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||||
|  | <packages> | ||||||
|  |   <package id="Open.NAT" version="2.1.0.0" targetFramework="net472" /> | ||||||
|  |   <package id="System.Net.Sockets" version="4.3.0" targetFramework="net472" /> | ||||||
|  | </packages> | ||||||
		Reference in New Issue
	
	Block a user