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