From 2faf51dcebf41598e975f16438fd15056a4aabec Mon Sep 17 00:00:00 2001
From: Noxyntious <noxy@noxyntious.xyz>
Date: Wed, 18 Jan 2023 22:09:40 +0100
Subject: [PATCH] two alpha i guess ??

---
 SHitSHell/SHitDock.Designer.vb       | 101 ++++++++++++++++++++++
 SHitSHell/SHitDock.resx              | 120 +++++++++++++++++++++++++++
 SHitSHell/SHitDock.vb                |  42 ++++++++++
 SHitSHell/SHitLauncher.Designer.vb   |  54 ++++++++++++
 SHitSHell/SHitLauncher.resx          | 120 +++++++++++++++++++++++++++
 SHitSHell/SHitLauncher.vb            |  40 +++++++++
 SHitSHell/SHitSHell.Designer.vb      |  55 ++----------
 SHitSHell/SHitSHell.vb               |  86 +++++++++----------
 SHitSHell/SHitSHell.vbproj           |  27 ++++++
 SHitSHell/ShutdownPrompt.Designer.vb |  76 +++++++++++++++++
 SHitSHell/ShutdownPrompt.resx        | 120 +++++++++++++++++++++++++++
 SHitSHell/ShutdownPrompt.vb          |  15 ++++
 12 files changed, 768 insertions(+), 88 deletions(-)
 create mode 100644 SHitSHell/SHitDock.Designer.vb
 create mode 100644 SHitSHell/SHitDock.resx
 create mode 100644 SHitSHell/SHitDock.vb
 create mode 100644 SHitSHell/SHitLauncher.Designer.vb
 create mode 100644 SHitSHell/SHitLauncher.resx
 create mode 100644 SHitSHell/SHitLauncher.vb
 create mode 100644 SHitSHell/ShutdownPrompt.Designer.vb
 create mode 100644 SHitSHell/ShutdownPrompt.resx
 create mode 100644 SHitSHell/ShutdownPrompt.vb

diff --git a/SHitSHell/SHitDock.Designer.vb b/SHitSHell/SHitDock.Designer.vb
new file mode 100644
index 0000000..eec1629
--- /dev/null
+++ b/SHitSHell/SHitDock.Designer.vb
@@ -0,0 +1,101 @@
+<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
+Partial Class SHitDock
+    Inherits System.Windows.Forms.Form
+
+    'Form overrides dispose to clean up the component list.
+    <System.Diagnostics.DebuggerNonUserCode()>
+    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+        Try
+            If disposing AndAlso components IsNot Nothing Then
+                components.Dispose()
+            End If
+        Finally
+            MyBase.Dispose(disposing)
+        End Try
+    End Sub
+
+    'Required by the Windows Form Designer
+    Private components As System.ComponentModel.IContainer
+
+    'NOTE: The following procedure is required by the Windows Form Designer
+    'It can be modified using the Windows Form Designer.  
+    'Do not modify it using the code editor.
+    <System.Diagnostics.DebuggerStepThrough()>
+    Private Sub InitializeComponent()
+        Me.Button1 = New System.Windows.Forms.Button()
+        Me.Button2 = New System.Windows.Forms.Button()
+        Me.Button3 = New System.Windows.Forms.Button()
+        Me.Button4 = New System.Windows.Forms.Button()
+        Me.Button5 = New System.Windows.Forms.Button()
+        Me.SuspendLayout()
+        '
+        'Button1
+        '
+        Me.Button1.Location = New System.Drawing.Point(82, 12)
+        Me.Button1.Name = "Button1"
+        Me.Button1.Size = New System.Drawing.Size(64, 60)
+        Me.Button1.TabIndex = 0
+        Me.Button1.Text = "Settings"
+        Me.Button1.UseVisualStyleBackColor = True
+        '
+        'Button2
+        '
+        Me.Button2.Location = New System.Drawing.Point(12, 12)
+        Me.Button2.Name = "Button2"
+        Me.Button2.Size = New System.Drawing.Size(64, 60)
+        Me.Button2.TabIndex = 1
+        Me.Button2.Text = "Explorer"
+        Me.Button2.UseVisualStyleBackColor = True
+        '
+        'Button3
+        '
+        Me.Button3.Location = New System.Drawing.Point(152, 12)
+        Me.Button3.Name = "Button3"
+        Me.Button3.Size = New System.Drawing.Size(64, 60)
+        Me.Button3.TabIndex = 2
+        Me.Button3.Text = "Internet"
+        Me.Button3.UseVisualStyleBackColor = True
+        '
+        'Button4
+        '
+        Me.Button4.Location = New System.Drawing.Point(222, 12)
+        Me.Button4.Name = "Button4"
+        Me.Button4.Size = New System.Drawing.Size(64, 60)
+        Me.Button4.TabIndex = 3
+        Me.Button4.Text = "Command Prompt"
+        Me.Button4.UseVisualStyleBackColor = True
+        '
+        'Button5
+        '
+        Me.Button5.Location = New System.Drawing.Point(724, 12)
+        Me.Button5.Name = "Button5"
+        Me.Button5.Size = New System.Drawing.Size(64, 60)
+        Me.Button5.TabIndex = 4
+        Me.Button5.Text = "Shutdown"
+        Me.Button5.UseVisualStyleBackColor = True
+        '
+        'SHitDock
+        '
+        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
+        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+        Me.BackColor = System.Drawing.Color.FromArgb(CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer))
+        Me.ClientSize = New System.Drawing.Size(800, 84)
+        Me.Controls.Add(Me.Button5)
+        Me.Controls.Add(Me.Button4)
+        Me.Controls.Add(Me.Button3)
+        Me.Controls.Add(Me.Button2)
+        Me.Controls.Add(Me.Button1)
+        Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
+        Me.Name = "SHitDock"
+        Me.Text = " SHitDock"
+        Me.TopMost = True
+        Me.ResumeLayout(False)
+
+    End Sub
+
+    Friend WithEvents Button1 As Button
+    Friend WithEvents Button2 As Button
+    Friend WithEvents Button3 As Button
+    Friend WithEvents Button4 As Button
+    Friend WithEvents Button5 As Button
+End Class
diff --git a/SHitSHell/SHitDock.resx b/SHitSHell/SHitDock.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/SHitSHell/SHitDock.resx
@@ -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>
\ No newline at end of file
diff --git a/SHitSHell/SHitDock.vb b/SHitSHell/SHitDock.vb
new file mode 100644
index 0000000..0a5ff83
--- /dev/null
+++ b/SHitSHell/SHitDock.vb
@@ -0,0 +1,42 @@
+Public Class SHitDock
+    Private Sub SHitDock_Load(sender As Object, e As EventArgs) Handles MyBase.Load
+        Dim working_area As Rectangle =
+SystemInformation.WorkingArea
+        Dim x As Integer =
+            working_area.Left +
+            working_area.Width -
+            Me.Width
+        Dim y As Integer =
+            working_area.Top +
+            working_area.Height -
+        Me.Height
+        Me.Location = New Point(x / 2, y + 40)
+        Me.TopMost = True
+    End Sub
+
+    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
+
+        Try
+            Process.Start("ms-settings:")
+        Catch
+            MsgBox("This feature only works on Windows 8 or later.", MsgBoxStyle.Critical, "Exception")
+        End Try
+
+    End Sub
+
+    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
+        Process.Start("explorer.exe")
+    End Sub
+
+    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
+        Process.Start("https://google.com")
+    End Sub
+
+    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
+        ShutdownPrompt.Show()
+    End Sub
+
+    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
+        Process.Start("cmd.exe")
+    End Sub
+End Class
\ No newline at end of file
diff --git a/SHitSHell/SHitLauncher.Designer.vb b/SHitSHell/SHitLauncher.Designer.vb
new file mode 100644
index 0000000..a6f6a1f
--- /dev/null
+++ b/SHitSHell/SHitLauncher.Designer.vb
@@ -0,0 +1,54 @@
+<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
+Partial Class SHitLauncher
+    Inherits System.Windows.Forms.Form
+
+    'Form overrides dispose to clean up the component list.
+    <System.Diagnostics.DebuggerNonUserCode()> _
+    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+        Try
+            If disposing AndAlso components IsNot Nothing Then
+                components.Dispose()
+            End If
+        Finally
+            MyBase.Dispose(disposing)
+        End Try
+    End Sub
+
+    'Required by the Windows Form Designer
+    Private components As System.ComponentModel.IContainer
+
+    'NOTE: The following procedure is required by the Windows Form Designer
+    'It can be modified using the Windows Form Designer.  
+    'Do not modify it using the code editor.
+    <System.Diagnostics.DebuggerStepThrough()> _
+    Private Sub InitializeComponent()
+        Me.ComboBox1 = New System.Windows.Forms.ComboBox()
+        Me.SuspendLayout()
+        '
+        'ComboBox1
+        '
+        Me.ComboBox1.BackColor = System.Drawing.Color.White
+        Me.ComboBox1.FlatStyle = System.Windows.Forms.FlatStyle.System
+        Me.ComboBox1.FormattingEnabled = True
+        Me.ComboBox1.Items.AddRange(New Object() {"Add to Startup", "Credits", "Exit"})
+        Me.ComboBox1.Location = New System.Drawing.Point(12, 9)
+        Me.ComboBox1.Name = "ComboBox1"
+        Me.ComboBox1.Size = New System.Drawing.Size(121, 21)
+        Me.ComboBox1.TabIndex = 0
+        '
+        'SHitLauncher
+        '
+        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
+        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+        Me.BackColor = System.Drawing.Color.FromArgb(CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer))
+        Me.ClientSize = New System.Drawing.Size(274, 39)
+        Me.Controls.Add(Me.ComboBox1)
+        Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
+        Me.Name = "SHitLauncher"
+        Me.Text = "SHitLauncher"
+        Me.ResumeLayout(False)
+
+    End Sub
+
+    Friend WithEvents ComboBox1 As ComboBox
+End Class
diff --git a/SHitSHell/SHitLauncher.resx b/SHitSHell/SHitLauncher.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/SHitSHell/SHitLauncher.resx
@@ -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>
\ No newline at end of file
diff --git a/SHitSHell/SHitLauncher.vb b/SHitSHell/SHitLauncher.vb
new file mode 100644
index 0000000..65e6f10
--- /dev/null
+++ b/SHitSHell/SHitLauncher.vb
@@ -0,0 +1,40 @@
+Imports IWshRuntimeLibrary
+Public Class SHitLauncher
+    Private Sub SHitLauncher_Load(sender As Object, e As EventArgs) Handles MyBase.Load
+        Dim working_area As Rectangle =
+SystemInformation.WorkingArea
+        Dim x As Integer =
+            working_area.Left +
+            working_area.Width -
+            Me.Width
+        Dim y As Integer =
+            working_area.Top +
+            working_area.Height -
+        Me.Height
+        Me.Location = New Point(0, 0)
+        Me.TopMost = True
+    End Sub
+
+    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
+        'Checks the combobox for a string, then runs a process based on the selected string. TIP: For things like this, it's best to use buttons with pretty icons.
+
+        If ComboBox1.Text = "Exit" Then
+            SHitSHell.Close()
+            ComboBox1.Text = ""
+        ElseIf ComboBox1.Text = "Add to Startup" Then
+            Dim WshShell As WshShell = New WshShell()
+            Dim ShortcutPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Startup)
+            Dim Shortcut As IWshShortcut = CType(WshShell.CreateShortcut(System.IO.Path.Combine(ShortcutPath, Application.ProductName) & ".lnk"), IWshShortcut)
+            Shortcut.TargetPath = Application.ExecutablePath
+            Shortcut.WorkingDirectory = Application.StartupPath
+            Shortcut.Description = "SHitSHell"
+            Shortcut.Save()
+            MsgBox("SHitSHell has been added to the Startup folder.", MsgBoxStyle.Information, "Information")
+            ComboBox1.Text = ""
+        ElseIf ComboBox1.Text = "Credits" Then
+            MsgBox("Noxyntious - almost everything" + vbCrLf + "WindowsLogic - add to startup, other things", MsgBoxStyle.Information, "Credits")
+            ComboBox1.Text = ""
+        End If
+        Exit Sub
+    End Sub
+End Class
\ No newline at end of file
diff --git a/SHitSHell/SHitSHell.Designer.vb b/SHitSHell/SHitSHell.Designer.vb
index dfaaf01..bc1b170 100644
--- a/SHitSHell/SHitSHell.Designer.vb
+++ b/SHitSHell/SHitSHell.Designer.vb
@@ -23,62 +23,32 @@ Partial Class SHitSHell
     <System.Diagnostics.DebuggerStepThrough()>
     Private Sub InitializeComponent()
         Me.components = New System.ComponentModel.Container()
-        Me.ComboBox1 = New System.Windows.Forms.ComboBox()
-        Me.Button1 = New System.Windows.Forms.Button()
-        Me.Button2 = New System.Windows.Forms.Button()
         Me.TextBox1 = New System.Windows.Forms.TextBox()
         Me.TextBox2 = New System.Windows.Forms.TextBox()
         Me.Timer1 = New System.Windows.Forms.Timer(Me.components)
         Me.SuspendLayout()
         '
-        'ComboBox1
-        '
-        Me.ComboBox1.BackColor = System.Drawing.Color.White
-        Me.ComboBox1.FormattingEnabled = True
-        Me.ComboBox1.Items.AddRange(New Object() {"Explorer", "Command Prompt", "Notepad", "Internet", "Control Panel", "Settings (Windows 10)"})
-        Me.ComboBox1.Location = New System.Drawing.Point(12, 5)
-        Me.ComboBox1.Name = "ComboBox1"
-        Me.ComboBox1.Size = New System.Drawing.Size(121, 21)
-        Me.ComboBox1.TabIndex = 0
-        '
-        'Button1
-        '
-        Me.Button1.Cursor = System.Windows.Forms.Cursors.Default
-        Me.Button1.Location = New System.Drawing.Point(139, 4)
-        Me.Button1.Name = "Button1"
-        Me.Button1.Size = New System.Drawing.Size(120, 21)
-        Me.Button1.TabIndex = 1
-        Me.Button1.Text = "Exit"
-        Me.Button1.UseVisualStyleBackColor = True
-        '
-        'Button2
-        '
-        Me.Button2.Location = New System.Drawing.Point(265, 4)
-        Me.Button2.Name = "Button2"
-        Me.Button2.Size = New System.Drawing.Size(120, 21)
-        Me.Button2.TabIndex = 2
-        Me.Button2.Text = "Launch at Startup"
-        Me.Button2.UseVisualStyleBackColor = True
-        '
         'TextBox1
         '
         Me.TextBox1.BackColor = System.Drawing.Color.FromArgb(CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer))
-        Me.TextBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
+        Me.TextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None
         Me.TextBox1.ForeColor = System.Drawing.Color.White
-        Me.TextBox1.Location = New System.Drawing.Point(391, 4)
+        Me.TextBox1.Location = New System.Drawing.Point(12, 12)
         Me.TextBox1.Name = "TextBox1"
-        Me.TextBox1.Size = New System.Drawing.Size(120, 20)
+        Me.TextBox1.Size = New System.Drawing.Size(120, 13)
         Me.TextBox1.TabIndex = 3
+        Me.TextBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center
         '
         'TextBox2
         '
         Me.TextBox2.BackColor = System.Drawing.Color.FromArgb(CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer))
-        Me.TextBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
+        Me.TextBox2.BorderStyle = System.Windows.Forms.BorderStyle.None
         Me.TextBox2.ForeColor = System.Drawing.Color.White
-        Me.TextBox2.Location = New System.Drawing.Point(517, 4)
+        Me.TextBox2.Location = New System.Drawing.Point(143, 12)
         Me.TextBox2.Name = "TextBox2"
-        Me.TextBox2.Size = New System.Drawing.Size(120, 20)
+        Me.TextBox2.Size = New System.Drawing.Size(120, 13)
         Me.TextBox2.TabIndex = 4
+        Me.TextBox2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center
         '
         'Timer1
         '
@@ -88,12 +58,9 @@ Partial Class SHitSHell
         Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
         Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
         Me.BackColor = System.Drawing.Color.FromArgb(CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer))
-        Me.ClientSize = New System.Drawing.Size(644, 30)
+        Me.ClientSize = New System.Drawing.Size(275, 38)
         Me.Controls.Add(Me.TextBox2)
         Me.Controls.Add(Me.TextBox1)
-        Me.Controls.Add(Me.Button2)
-        Me.Controls.Add(Me.Button1)
-        Me.Controls.Add(Me.ComboBox1)
         Me.Cursor = System.Windows.Forms.Cursors.Default
         Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
         Me.Name = "SHitSHell"
@@ -103,10 +70,6 @@ Partial Class SHitSHell
         Me.PerformLayout()
 
     End Sub
-
-    Friend WithEvents ComboBox1 As ComboBox
-    Friend WithEvents Button1 As Button
-    Friend WithEvents Button2 As Button
     Friend WithEvents TextBox1 As TextBox
     Friend WithEvents TextBox2 As TextBox
     Friend WithEvents Timer1 As Timer
diff --git a/SHitSHell/SHitSHell.vb b/SHitSHell/SHitSHell.vb
index 904529b..ae225ca 100644
--- a/SHitSHell/SHitSHell.vb
+++ b/SHitSHell/SHitSHell.vb
@@ -3,8 +3,9 @@
 Public Class SHitSHell
 
     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
+        SHitDock.Show()
+        SHitLauncher.Show()
         ' thanks, shady ass website!! :)
-
         Dim working_area As Rectangle =
     SystemInformation.WorkingArea
         Dim x As Integer =
@@ -15,7 +16,7 @@ Public Class SHitSHell
             working_area.Top +
             working_area.Height -
         Me.Height
-        Me.Location = New Point(x, y + 39)
+        Me.Location = New Point(x, 0)
         ' prepare for maximum jank
         Timer1.Enabled = True
         TextBox1.Text = Format(Now, "hh:mm:ss")
@@ -25,55 +26,56 @@ Public Class SHitSHell
 
     End Sub
 
-    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
-
-        'Checks the combobox for a string, then runs a process based on the selected string. TIP: For things like this, it's best to use buttons with pretty icons.
+    'Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
+    '    'Checks the combobox for a string, then runs a process based on the selected string. TIP: For things like this, it's best to use buttons with pretty icons.
 
-        If ComboBox1.Text = "Explorer" Then
-            Process.Start("explorer.exe")
-            ComboBox1.Text = ""
-        ElseIf ComboBox1.Text = "Command Prompt" Then
-            Process.Start("cmd.exe")
-            ComboBox1.Text = ""
-        ElseIf ComboBox1.Text = "Notepad" Then
-            Process.Start("notepad.exe")
-            ComboBox1.Text = ""
-        ElseIf ComboBox1.Text = "Internet" Then
-            Process.Start("http://google.com")
-            ComboBox1.Text = ""
-        ElseIf ComboBox1.Text = "Control Panel" Then
-            Process.Start("control.exe")
-            ComboBox1.Text = ""
-        ElseIf ComboBox1.Text = "Settings (Windows 10)" Then
+    '    If ComboBox1.Text = "Explorer" Then
+    '        Process.Start("explorer.exe")
+    '        ComboBox1.Text = ""
+    '    ElseIf ComboBox1.Text = "Command Prompt" Then
+    '        Process.Start("cmd.exe")
+    '        ComboBox1.Text = ""
+    '    ElseIf ComboBox1.Text = "Notepad" Then
+    '        Process.Start("notepad.exe")
+    '        ComboBox1.Text = ""
+    '    ElseIf ComboBox1.Text = "Internet" Then
+    '        Process.Start("http://google.com")
+    '        ComboBox1.Text = ""
+    '    ElseIf ComboBox1.Text = "Control Panel" Then
+    '        Process.Start("control.exe")
+    '        ComboBox1.Text = ""
+    '    ElseIf ComboBox1.Text = "Settings (Windows 10)" Then
 
-            Try
-                Process.Start("ms-settings:")
-                ComboBox1.Text = ""
-            Catch
-                MsgBox("This feature only works on Windows 8 or later.", MsgBoxStyle.Critical, "Exception")
-            End Try
+    '        Try
+    '            Process.Start("ms-settings:")
+    '            ComboBox1.Text = ""
+    '        Catch
+    '            MsgBox("This feature only works on Windows 8 or later.", MsgBoxStyle.Critical, "Exception")
+    '        End Try
 
-        End If
-        Exit Sub
-    End Sub
+    '    End If
+    '    Exit Sub
+    'End Sub
+    'To hell with this shit
 
-    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
+    Private Sub Button1_Click(sender As Object, e As EventArgs)
         Me.Close()
     End Sub
 
-    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
+    'Private Sub Button2_Click(sender As Object, e As EventArgs)
 
-        'Adds the application to the Startup folder.
+    '    'Adds the application to the Startup folder.
 
-        Dim WshShell As WshShell = New WshShell()
-        Dim ShortcutPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Startup)
-        Dim Shortcut As IWshShortcut = CType(WshShell.CreateShortcut(System.IO.Path.Combine(ShortcutPath, Application.ProductName) & ".lnk"), IWshShortcut)
-        Shortcut.TargetPath = Application.ExecutablePath
-        Shortcut.WorkingDirectory = Application.StartupPath
-        Shortcut.Description = "SHitSHell"
-        Shortcut.Save()
-        MsgBox("SHitSHell has been added to the Startup folder.", MsgBoxStyle.Information, "Information")
-    End Sub
+    '    Dim WshShell As WshShell = New WshShell()
+    '    Dim ShortcutPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Startup)
+    '    Dim Shortcut As IWshShortcut = CType(WshShell.CreateShortcut(System.IO.Path.Combine(ShortcutPath, Application.ProductName) & ".lnk"), IWshShortcut)
+    '    Shortcut.TargetPath = Application.ExecutablePath
+    '    Shortcut.WorkingDirectory = Application.StartupPath
+    '    Shortcut.Description = "SHitSHell"
+    '    Shortcut.Save()
+    '    MsgBox("SHitSHell has been added to the Startup folder.", MsgBoxStyle.Information, "Information")
+    'End Sub
+    'button doesnt exist anymore
 
     Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
         TextBox1.Text = TimeString
diff --git a/SHitSHell/SHitSHell.vbproj b/SHitSHell/SHitSHell.vbproj
index 3b5d750..ec5aa67 100644
--- a/SHitSHell/SHitSHell.vbproj
+++ b/SHitSHell/SHitSHell.vbproj
@@ -88,6 +88,18 @@
     <Import Include="System.Threading.Tasks" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="SHitDock.Designer.vb">
+      <DependentUpon>SHitDock.vb</DependentUpon>
+    </Compile>
+    <Compile Include="SHitDock.vb">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="SHitLauncher.Designer.vb">
+      <DependentUpon>SHitLauncher.vb</DependentUpon>
+    </Compile>
+    <Compile Include="SHitLauncher.vb">
+      <SubType>Form</SubType>
+    </Compile>
     <Compile Include="SHitSHell.vb">
       <SubType>Form</SubType>
     </Compile>
@@ -110,8 +122,20 @@
       <DependentUpon>Settings.settings</DependentUpon>
       <DesignTimeSharedInput>True</DesignTimeSharedInput>
     </Compile>
+    <Compile Include="ShutdownPrompt.Designer.vb">
+      <DependentUpon>ShutdownPrompt.vb</DependentUpon>
+    </Compile>
+    <Compile Include="ShutdownPrompt.vb">
+      <SubType>Form</SubType>
+    </Compile>
   </ItemGroup>
   <ItemGroup>
+    <EmbeddedResource Include="SHitDock.resx">
+      <DependentUpon>SHitDock.vb</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="SHitLauncher.resx">
+      <DependentUpon>SHitLauncher.vb</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="SHitSHell.resx">
       <DependentUpon>SHitSHell.vb</DependentUpon>
     </EmbeddedResource>
@@ -121,6 +145,9 @@
       <CustomToolNamespace>My.Resources</CustomToolNamespace>
       <SubType>Designer</SubType>
     </EmbeddedResource>
+    <EmbeddedResource Include="ShutdownPrompt.resx">
+      <DependentUpon>ShutdownPrompt.vb</DependentUpon>
+    </EmbeddedResource>
   </ItemGroup>
   <ItemGroup>
     <None Include="My Project\Application.myapp">
diff --git a/SHitSHell/ShutdownPrompt.Designer.vb b/SHitSHell/ShutdownPrompt.Designer.vb
new file mode 100644
index 0000000..25c49a5
--- /dev/null
+++ b/SHitSHell/ShutdownPrompt.Designer.vb
@@ -0,0 +1,76 @@
+<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
+Partial Class ShutdownPrompt
+    Inherits System.Windows.Forms.Form
+
+    'Form overrides dispose to clean up the component list.
+    <System.Diagnostics.DebuggerNonUserCode()> _
+    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+        Try
+            If disposing AndAlso components IsNot Nothing Then
+                components.Dispose()
+            End If
+        Finally
+            MyBase.Dispose(disposing)
+        End Try
+    End Sub
+
+    'Required by the Windows Form Designer
+    Private components As System.ComponentModel.IContainer
+
+    'NOTE: The following procedure is required by the Windows Form Designer
+    'It can be modified using the Windows Form Designer.  
+    'Do not modify it using the code editor.
+    <System.Diagnostics.DebuggerStepThrough()> _
+    Private Sub InitializeComponent()
+        Me.Button1 = New System.Windows.Forms.Button()
+        Me.Button2 = New System.Windows.Forms.Button()
+        Me.Label1 = New System.Windows.Forms.Label()
+        Me.SuspendLayout()
+        '
+        'Button1
+        '
+        Me.Button1.Location = New System.Drawing.Point(328, 63)
+        Me.Button1.Name = "Button1"
+        Me.Button1.Size = New System.Drawing.Size(75, 23)
+        Me.Button1.TabIndex = 0
+        Me.Button1.Text = "No"
+        Me.Button1.UseVisualStyleBackColor = True
+        '
+        'Button2
+        '
+        Me.Button2.Location = New System.Drawing.Point(409, 63)
+        Me.Button2.Name = "Button2"
+        Me.Button2.Size = New System.Drawing.Size(75, 23)
+        Me.Button2.TabIndex = 1
+        Me.Button2.Text = "Yes"
+        Me.Button2.UseVisualStyleBackColor = True
+        '
+        'Label1
+        '
+        Me.Label1.AutoSize = True
+        Me.Label1.Location = New System.Drawing.Point(12, 9)
+        Me.Label1.Name = "Label1"
+        Me.Label1.Size = New System.Drawing.Size(247, 13)
+        Me.Label1.TabIndex = 2
+        Me.Label1.Text = "Are you sure you want to shut down the computer?"
+        '
+        'ShutdownPrompt
+        '
+        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
+        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+        Me.ClientSize = New System.Drawing.Size(494, 97)
+        Me.Controls.Add(Me.Label1)
+        Me.Controls.Add(Me.Button2)
+        Me.Controls.Add(Me.Button1)
+        Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow
+        Me.Name = "ShutdownPrompt"
+        Me.Text = "Shutdown"
+        Me.ResumeLayout(False)
+        Me.PerformLayout()
+
+    End Sub
+
+    Friend WithEvents Button1 As Button
+    Friend WithEvents Button2 As Button
+    Friend WithEvents Label1 As Label
+End Class
diff --git a/SHitSHell/ShutdownPrompt.resx b/SHitSHell/ShutdownPrompt.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/SHitSHell/ShutdownPrompt.resx
@@ -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>
\ No newline at end of file
diff --git a/SHitSHell/ShutdownPrompt.vb b/SHitSHell/ShutdownPrompt.vb
new file mode 100644
index 0000000..f008418
--- /dev/null
+++ b/SHitSHell/ShutdownPrompt.vb
@@ -0,0 +1,15 @@
+Public Class ShutdownPrompt
+    Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click
+
+    End Sub
+
+    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
+        Me.Close()
+    End Sub
+
+    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
+        Process.Start("cmd.exe")
+        MsgBox("Not implemented!")
+        Me.Close()
+    End Sub
+End Class
\ No newline at end of file