diff --git a/.gitattributes b/.gitattributes
index 348f09fc..55f234fa 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -557,6 +557,17 @@ src/neostats.pm.h -text
src/neostats.vcproj -text
src/nsevents.c -text
src/typemap -text
+src/win32/Gui/AssemblyInfo.cpp -text
+src/win32/Gui/Form1.h -text
+src/win32/Gui/Form1.resx -text
+src/win32/Gui/NeoStats[!!-~]Control[!!-~]Panel.cpp -text
+src/win32/Gui/NeoStats[!!-~]Control[!!-~]Panel.sln -text
+src/win32/Gui/NeoStats[!!-~]Control[!!-~]Panel.vcproj -text
+src/win32/Gui/app.ico -text
+src/win32/Gui/app.rc -text
+src/win32/Gui/resource.h -text
+src/win32/Gui/stdafx.cpp -text
+src/win32/Gui/stdafx.h -text
src/win32/Rules.rules -text
src/win32/icon1.ico -text
src/win32/neostats.bmp -text
diff --git a/src/win32/Gui/AssemblyInfo.cpp b/src/win32/Gui/AssemblyInfo.cpp
new file mode 100644
index 00000000..2dee6ded
--- /dev/null
+++ b/src/win32/Gui/AssemblyInfo.cpp
@@ -0,0 +1,40 @@
+#include "stdafx.h"
+
+using namespace System;
+using namespace System::Reflection;
+using namespace System::Runtime::CompilerServices;
+using namespace System::Runtime::InteropServices;
+using namespace System::Security::Permissions;
+
+//
+// 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:AssemblyTitleAttribute("NeoStatsControlPanel")];
+[assembly:AssemblyDescriptionAttribute("")];
+[assembly:AssemblyConfigurationAttribute("")];
+[assembly:AssemblyCompanyAttribute("")];
+[assembly:AssemblyProductAttribute("NeoStatsControlPanel")];
+[assembly:AssemblyCopyrightAttribute("Copyright (c) 2008")];
+[assembly:AssemblyTrademarkAttribute("")];
+[assembly:AssemblyCultureAttribute("")];
+
+//
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the value or you can default the Revision and Build Numbers
+// by using the '*' as shown below:
+
+[assembly:AssemblyVersionAttribute("1.0.*")];
+
+[assembly:ComVisible(false)];
+
+[assembly:CLSCompliantAttribute(true)];
+
+[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];
diff --git a/src/win32/Gui/Form1.h b/src/win32/Gui/Form1.h
new file mode 100644
index 00000000..2f5cd448
--- /dev/null
+++ b/src/win32/Gui/Form1.h
@@ -0,0 +1,395 @@
+#pragma once
+
+
+namespace NeoStatsControlPanel {
+
+ using namespace System;
+ using namespace System::ComponentModel;
+ using namespace System::Collections;
+ using namespace System::Windows::Forms;
+ using namespace System::Data;
+ using namespace System::Drawing;
+
+ ///
+ /// Summary for Form1
+ ///
+ /// WARNING: If you change the name of this class, you will need to change the
+ /// 'Resource File Name' property for the managed resource compiler tool
+ /// associated with all .resx files this class depends on. Otherwise,
+ /// the designers will not be able to interact properly with localized
+ /// resources associated with this form.
+ ///
+ public ref class Form1 : public System::Windows::Forms::Form
+ {
+ public:
+ Form1(void)
+ {
+ InitializeComponent();
+ //import System::ServiceProcess::ServiceControllerStatus;
+ //
+ //TODO: Add the constructor code here
+ //
+ notifyIcon1->BalloonTipText = "NeoStats Stopped";
+ notifyIcon1->BalloonTipTitle = "Status";
+ notifyIcon1->ContextMenuStrip = contextMenuStrip1;
+ notifyIcon1->ShowBalloonTip(10);
+
+ }
+
+ protected:
+ ///
+ /// Clean up any resources being used.
+ ///
+ ~Form1()
+ {
+ if (components)
+ {
+ delete components;
+ }
+ Application::Exit();
+ }
+ private: System::Windows::Forms::NotifyIcon^ notifyIcon1;
+ private: System::Windows::Forms::ContextMenuStrip^ contextMenuStrip1;
+ private: System::Windows::Forms::ToolStripMenuItem^ openControlPanelToolStripMenuItem;
+ private: System::Windows::Forms::ToolStripMenuItem^ exitToolStripMenuItem;
+ private: System::ServiceProcess::ServiceController^ serviceController1;
+ private: System::Diagnostics::PerformanceCounter^ performanceCounter1;
+ private: System::Windows::Forms::Timer^ PerfUpdate;
+ private: System::Windows::Forms::ProgressBar^ PerfCPU;
+ private: System::Windows::Forms::Label^ label1;
+ private: System::Windows::Forms::Label^ label2;
+ private: System::Diagnostics::PerformanceCounter^ performanceCounter2;
+ private: System::Windows::Forms::Label^ label3;
+ private: System::Windows::Forms::Label^ label4;
+ private: System::Windows::Forms::MenuStrip^ menuStrip1;
+ private: System::Windows::Forms::ToolStripMenuItem^ serviceToolStripMenuItem;
+ private: System::Windows::Forms::ToolStripMenuItem^ startToolStripMenuItem;
+ private: System::Windows::Forms::ToolStripMenuItem^ stopToolStripMenuItem;
+ private: System::Windows::Forms::ToolStripMenuItem^ debugToolStripMenuItem;
+ private: System::Windows::Forms::ToolStripMenuItem^ installToolStripMenuItem;
+ private: System::Windows::Forms::ToolStripMenuItem^ unInstallToolStripMenuItem;
+ private: System::Windows::Forms::ToolStripSeparator^ toolStripSeparator1;
+ private: System::Windows::Forms::ToolStripMenuItem^ quitNeoStatsControlPanelToolStripMenuItem;
+ private: System::Windows::Forms::ToolStripMenuItem^ logViewerToolStripMenuItem;
+
+
+
+ protected:
+ private: System::ComponentModel::IContainer^ components;
+
+ private:
+ ///
+ /// Required designer variable.
+ ///
+
+
+#pragma region Windows Form Designer generated code
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ void InitializeComponent(void)
+ {
+ this->components = (gcnew System::ComponentModel::Container());
+ System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
+ this->notifyIcon1 = (gcnew System::Windows::Forms::NotifyIcon(this->components));
+ this->contextMenuStrip1 = (gcnew System::Windows::Forms::ContextMenuStrip(this->components));
+ this->openControlPanelToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+ this->exitToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+ this->serviceController1 = (gcnew System::ServiceProcess::ServiceController());
+ this->performanceCounter1 = (gcnew System::Diagnostics::PerformanceCounter());
+ this->PerfUpdate = (gcnew System::Windows::Forms::Timer(this->components));
+ this->PerfCPU = (gcnew System::Windows::Forms::ProgressBar());
+ this->label1 = (gcnew System::Windows::Forms::Label());
+ this->label2 = (gcnew System::Windows::Forms::Label());
+ this->performanceCounter2 = (gcnew System::Diagnostics::PerformanceCounter());
+ this->label3 = (gcnew System::Windows::Forms::Label());
+ this->label4 = (gcnew System::Windows::Forms::Label());
+ this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
+ this->serviceToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+ this->startToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+ this->stopToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+ this->debugToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+ this->installToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+ this->unInstallToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+ this->toolStripSeparator1 = (gcnew System::Windows::Forms::ToolStripSeparator());
+ this->quitNeoStatsControlPanelToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+ this->logViewerToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
+ this->contextMenuStrip1->SuspendLayout();
+ (cli::safe_cast(this->performanceCounter1))->BeginInit();
+ (cli::safe_cast(this->performanceCounter2))->BeginInit();
+ this->menuStrip1->SuspendLayout();
+ this->SuspendLayout();
+ //
+ // notifyIcon1
+ //
+ this->notifyIcon1->Icon = (cli::safe_cast(resources->GetObject(L"notifyIcon1.Icon")));
+ this->notifyIcon1->Text = L"NeoStats Control Panel";
+ this->notifyIcon1->Visible = true;
+ this->notifyIcon1->MouseDoubleClick += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::notifyIcon1_MouseDoubleClick);
+ //
+ // contextMenuStrip1
+ //
+ this->contextMenuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->openControlPanelToolStripMenuItem,
+ this->exitToolStripMenuItem});
+ this->contextMenuStrip1->Name = L"contextMenuStrip1";
+ this->contextMenuStrip1->Size = System::Drawing::Size(179, 48);
+ //
+ // openControlPanelToolStripMenuItem
+ //
+ this->openControlPanelToolStripMenuItem->Name = L"openControlPanelToolStripMenuItem";
+ this->openControlPanelToolStripMenuItem->Size = System::Drawing::Size(178, 22);
+ this->openControlPanelToolStripMenuItem->Text = L"&Open Control Panel";
+ this->openControlPanelToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::openControlPanelToolStripMenuItem_Click);
+ //
+ // exitToolStripMenuItem
+ //
+ this->exitToolStripMenuItem->Name = L"exitToolStripMenuItem";
+ this->exitToolStripMenuItem->Size = System::Drawing::Size(178, 22);
+ this->exitToolStripMenuItem->Text = L"E&xit";
+ this->exitToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::exitToolStripMenuItem_Click);
+ //
+ // serviceController1
+ //
+ this->serviceController1->ServiceName = L"McShield";
+ //
+ // performanceCounter1
+ //
+ this->performanceCounter1->CategoryName = L"Process";
+ this->performanceCounter1->CounterName = L"% Processor Time";
+ this->performanceCounter1->InstanceName = L"taskmgr";
+ //
+ // PerfUpdate
+ //
+ this->PerfUpdate->Interval = 1000;
+ this->PerfUpdate->Tick += gcnew System::EventHandler(this, &Form1::PerfUpdate_Tick);
+ //
+ // PerfCPU
+ //
+ this->PerfCPU->Location = System::Drawing::Point(2, 238);
+ this->PerfCPU->Name = L"PerfCPU";
+ this->PerfCPU->Size = System::Drawing::Size(283, 23);
+ this->PerfCPU->TabIndex = 1;
+ //
+ // label1
+ //
+ this->label1->AutoSize = true;
+ this->label1->Location = System::Drawing::Point(80, 222);
+ this->label1->Name = L"label1";
+ this->label1->Size = System::Drawing::Size(13, 13);
+ this->label1->TabIndex = 2;
+ this->label1->Text = L"0";
+ //
+ // label2
+ //
+ this->label2->AutoSize = true;
+ this->label2->Location = System::Drawing::Point(8, 221);
+ this->label2->Name = L"label2";
+ this->label2->Size = System::Drawing::Size(66, 13);
+ this->label2->TabIndex = 3;
+ this->label2->Text = L"CPU Usage:";
+ //
+ // performanceCounter2
+ //
+ this->performanceCounter2->CategoryName = L"Process";
+ this->performanceCounter2->CounterName = L"Working Set";
+ this->performanceCounter2->InstanceName = L"taskmgr";
+ //
+ // label3
+ //
+ this->label3->AutoSize = true;
+ this->label3->Location = System::Drawing::Point(99, 222);
+ this->label3->Name = L"label3";
+ this->label3->Size = System::Drawing::Size(81, 13);
+ this->label3->TabIndex = 4;
+ this->label3->Text = L"Memory Usage:";
+ //
+ // label4
+ //
+ this->label4->AutoSize = true;
+ this->label4->Location = System::Drawing::Point(187, 222);
+ this->label4->Name = L"label4";
+ this->label4->Size = System::Drawing::Size(13, 13);
+ this->label4->TabIndex = 5;
+ this->label4->Text = L"0";
+ //
+ // menuStrip1
+ //
+ this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(2) {this->serviceToolStripMenuItem,
+ this->logViewerToolStripMenuItem});
+ this->menuStrip1->Location = System::Drawing::Point(0, 0);
+ this->menuStrip1->Name = L"menuStrip1";
+ this->menuStrip1->Size = System::Drawing::Size(284, 24);
+ this->menuStrip1->TabIndex = 6;
+ this->menuStrip1->Text = L"menuStrip1";
+ //
+ // serviceToolStripMenuItem
+ //
+ this->serviceToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^ >(7) {this->startToolStripMenuItem,
+ this->stopToolStripMenuItem, this->debugToolStripMenuItem, this->installToolStripMenuItem, this->unInstallToolStripMenuItem,
+ this->toolStripSeparator1, this->quitNeoStatsControlPanelToolStripMenuItem});
+ this->serviceToolStripMenuItem->Name = L"serviceToolStripMenuItem";
+ this->serviceToolStripMenuItem->Size = System::Drawing::Size(56, 20);
+ this->serviceToolStripMenuItem->Text = L"Service";
+ //
+ // startToolStripMenuItem
+ //
+ this->startToolStripMenuItem->Enabled = false;
+ this->startToolStripMenuItem->Name = L"startToolStripMenuItem";
+ this->startToolStripMenuItem->Size = System::Drawing::Size(222, 22);
+ this->startToolStripMenuItem->Text = L"Start";
+ this->startToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::startToolStripMenuItem_Click);
+ //
+ // stopToolStripMenuItem
+ //
+ this->stopToolStripMenuItem->Enabled = false;
+ this->stopToolStripMenuItem->Name = L"stopToolStripMenuItem";
+ this->stopToolStripMenuItem->Size = System::Drawing::Size(222, 22);
+ this->stopToolStripMenuItem->Text = L"Stop";
+ this->stopToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::stopToolStripMenuItem_Click);
+ //
+ // debugToolStripMenuItem
+ //
+ this->debugToolStripMenuItem->Name = L"debugToolStripMenuItem";
+ this->debugToolStripMenuItem->Size = System::Drawing::Size(222, 22);
+ this->debugToolStripMenuItem->Text = L"Debug";
+ //
+ // installToolStripMenuItem
+ //
+ this->installToolStripMenuItem->Enabled = false;
+ this->installToolStripMenuItem->Name = L"installToolStripMenuItem";
+ this->installToolStripMenuItem->Size = System::Drawing::Size(222, 22);
+ this->installToolStripMenuItem->Text = L"Install";
+ //
+ // unInstallToolStripMenuItem
+ //
+ this->unInstallToolStripMenuItem->Enabled = false;
+ this->unInstallToolStripMenuItem->Name = L"unInstallToolStripMenuItem";
+ this->unInstallToolStripMenuItem->Size = System::Drawing::Size(222, 22);
+ this->unInstallToolStripMenuItem->Text = L"Uninstall";
+ //
+ // toolStripSeparator1
+ //
+ this->toolStripSeparator1->Name = L"toolStripSeparator1";
+ this->toolStripSeparator1->Size = System::Drawing::Size(219, 6);
+ //
+ // quitNeoStatsControlPanelToolStripMenuItem
+ //
+ this->quitNeoStatsControlPanelToolStripMenuItem->Name = L"quitNeoStatsControlPanelToolStripMenuItem";
+ this->quitNeoStatsControlPanelToolStripMenuItem->Size = System::Drawing::Size(222, 22);
+ this->quitNeoStatsControlPanelToolStripMenuItem->Text = L"Quit NeoStats Control Panel";
+ this->quitNeoStatsControlPanelToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::quitNeoStatsControlPanelToolStripMenuItem_Click);
+ //
+ // logViewerToolStripMenuItem
+ //
+ this->logViewerToolStripMenuItem->Name = L"logViewerToolStripMenuItem";
+ this->logViewerToolStripMenuItem->Size = System::Drawing::Size(77, 20);
+ this->logViewerToolStripMenuItem->Text = L"Log Viewer";
+ //
+ // Form1
+ //
+ this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
+ this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
+ this->ClientSize = System::Drawing::Size(284, 264);
+ this->Controls->Add(this->menuStrip1);
+ this->Controls->Add(this->label4);
+ this->Controls->Add(this->label3);
+ this->Controls->Add(this->label2);
+ this->Controls->Add(this->PerfCPU);
+ this->Controls->Add(this->label1);
+ this->Icon = (cli::safe_cast(resources->GetObject(L"$this.Icon")));
+ this->MainMenuStrip = this->menuStrip1;
+ this->MinimizeBox = false;
+ this->Name = L"Form1";
+ this->Text = L"NeoStats Control Panel";
+ this->contextMenuStrip1->ResumeLayout(false);
+ (cli::safe_cast(this->performanceCounter1))->EndInit();
+ (cli::safe_cast(this->performanceCounter2))->EndInit();
+ this->menuStrip1->ResumeLayout(false);
+ this->menuStrip1->PerformLayout();
+ this->ResumeLayout(false);
+ this->PerformLayout();
+
+ }
+#pragma endregion
+ private: System::Void openControlPanelToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
+ if (this->Visible == true) {
+ this->Hide();
+ this->openControlPanelToolStripMenuItem->Text = L"&Open Control Panel";
+ this->PerfUpdate->Enabled = false;
+ } else {
+ this->openControlPanelToolStripMenuItem->Text = L"&Close Control Panel";
+ this->Show();
+ this->PerfUpdate->Enabled = true;
+ }
+ }
+ private: System::Void exitToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
+ this->Close();
+ Application::Exit();
+ };
+private: System::Void notifyIcon1_MouseDoubleClick(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
+ openControlPanelToolStripMenuItem_Click(sender, e);
+ }
+private: System::Void PerfUpdate_Tick(System::Object^ sender, System::EventArgs^ e) {
+ try {
+ this->PerfCPU->Value = this->performanceCounter1->NextValue();
+ } catch(...) {
+ this->PerfCPU->Value = 0;
+ }
+ try {
+ this->label4->Text = (this->performanceCounter2->NextValue()/1024/1024).ToString("N01") + "Mb";
+ } catch(...) {
+ this->label4->Text = "0";
+ }
+ this->label1->Text= this->PerfCPU->Value.ToString();
+ switch (serviceController1->Status) {
+ case System::ServiceProcess::ServiceControllerStatus::Running:
+ notifyIcon1->BalloonTipText = "NeoStats Running";
+ this->PerfUpdate->Enabled = true;
+ this->startToolStripMenuItem->Enabled = false;
+ this->stopToolStripMenuItem->Enabled = true;
+ this->debugToolStripMenuItem->Enabled = false;
+ this->installToolStripMenuItem->Enabled = false;
+ this->unInstallToolStripMenuItem->Enabled = false;
+ break;
+ case System::ServiceProcess::ServiceControllerStatus::StartPending:
+ notifyIcon1->BalloonTipText = "NeoStats Starting";
+ this->PerfUpdate->Enabled = true;
+ this->startToolStripMenuItem->Enabled = false;
+ this->stopToolStripMenuItem->Enabled = true;
+ this->debugToolStripMenuItem->Enabled = false;
+ this->installToolStripMenuItem->Enabled = false;
+ this->unInstallToolStripMenuItem->Enabled = false;
+ break;
+ default:
+ notifyIcon1->BalloonTipText = "NeoStats Stopped";
+ this->startToolStripMenuItem->Enabled = true;
+ this->stopToolStripMenuItem->Enabled = false;
+ this->debugToolStripMenuItem->Enabled = true;
+ this->installToolStripMenuItem->Enabled = false;
+ this->unInstallToolStripMenuItem->Enabled = true;
+ this->PerfUpdate->Enabled = false;
+ }
+ }
+
+
+private: System::Void quitNeoStatsControlPanelToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
+ exitToolStripMenuItem_Click(sender, e);
+ }
+private: System::Void stopToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
+ try {
+ serviceController1->Stop();
+ } catch(InvalidOperationException^ e ) {
+ MessageBox::Show(e->Message + ":\r\n" + e->InnerException->Message, "Error Stopping Service");
+ }
+ }
+private: System::Void startToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
+ try {
+ serviceController1->Start();
+ } catch(InvalidOperationException^ e ) {
+ MessageBox::Show(e->Message + ":\r\n" + e->InnerException->Message, "Error Starting Service");
+ }
+ }
+};
+}
+
diff --git a/src/win32/Gui/Form1.resx b/src/win32/Gui/Form1.resx
new file mode 100644
index 00000000..87081b52
--- /dev/null
+++ b/src/win32/Gui/Form1.resx
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+
+
+ AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAAAIAAAAAAAAAAAAAEAAAABAA
+ AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//
+ AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIiAAAAAAAAACIiIiAAAB3d3cAAA
+ AAAAAId3d3cAAAd3d3gAAAAAAAh3d3d3gAAHd3d4AAAAAACId3d3d4AAB3d3eAAAAAAIh3d3d3eAAAd3
+ d3gAAAAAiHd3d3d3gAAHd3d4AAAAAId3d3d3d4AAB3d3eAAAAAh3d3d3d3eAAAd3d3gAAACId3d3d3d3
+ gAAHd3d4AAAIh3d3d3d3d4AAB3d3eAAACHd3d3d3d3eAAAd3d3gAAId3d3d3d3d3gAAHd3d4AAh3d3d3
+ h3d3d4AAB3d3eACId3d3eId3d3eAAAd3d3gIh3d3d4iHd3d3gAAHd3d4iHd3d3eIh3d3d4AAB3d3eId3
+ d3d4gId3d3eAAAd3d3h3d3d3iACHd3d3gAAHd3d4d3d3eIAAh3d3d4AAB3d3d3d3d4gAAId3d3eAAAd3
+ d3d3d3eAAACHd3d3gAAHd3d3d3d4AAAAh3d3d4AAB3d3d3d3gAAAAId3d3eAAAd3d3d3eIAAAACHd3d3
+ gAAHd3d3d3gAAAAAh3d3d4AAB3d3d3eAAAAAAAd3d3eAAAd3d3d4AAAAAAAHd3d3gAAHd3dwgAAAAAAA
+ AAd3cIAAAAAACAAAAAAAAAAAAAAAAACIiIAAAAAAAAAACIiAAAAAAAAAAAAAAAAAAACAAAAIgAAAAIAA
+ AACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAA
+ AACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAgAgAAIAIEADhD+AA/wAAAAAA==
+
+
+
+ 132, 25
+
+
+ 287, 25
+
+
+ 437, 25
+
+
+ 609, 25
+
+
+ 722, 25
+
+
+ 17, 64
+
+
+ True
+
+
+
+ AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAAAIAAAAAAAAAAAAAEAAAABAA
+ AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//
+ AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIiIiAAAAAAAAACIiIiAAAB3d3cAAA
+ AAAAAId3d3cAAAd3d3gAAAAAAAh3d3d3gAAHd3d4AAAAAACId3d3d4AAB3d3eAAAAAAIh3d3d3eAAAd3
+ d3gAAAAAiHd3d3d3gAAHd3d4AAAAAId3d3d3d4AAB3d3eAAAAAh3d3d3d3eAAAd3d3gAAACId3d3d3d3
+ gAAHd3d4AAAIh3d3d3d3d4AAB3d3eAAACHd3d3d3d3eAAAd3d3gAAId3d3d3d3d3gAAHd3d4AAh3d3d3
+ h3d3d4AAB3d3eACId3d3eId3d3eAAAd3d3gIh3d3d4iHd3d3gAAHd3d4iHd3d3eIh3d3d4AAB3d3eId3
+ d3d4gId3d3eAAAd3d3h3d3d3iACHd3d3gAAHd3d4d3d3eIAAh3d3d4AAB3d3d3d3d4gAAId3d3eAAAd3
+ d3d3d3eAAACHd3d3gAAHd3d3d3d4AAAAh3d3d4AAB3d3d3d3gAAAAId3d3eAAAd3d3d3eIAAAACHd3d3
+ gAAHd3d3d3gAAAAAh3d3d4AAB3d3d3eAAAAAAAd3d3eAAAd3d3d4AAAAAAAHd3d3gAAHd3dwgAAAAAAA
+ AAd3cIAAAAAACAAAAAAAAAAAAAAAAACIiIAAAAAAAAAACIiAAAAAAAAAAAAAAAAAAACAAAAIgAAAAIAA
+ AACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAA
+ AACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAgAgAAIAIEADhD+AA/wAAAAAA==
+
+
+
\ No newline at end of file
diff --git a/src/win32/Gui/NeoStats Control Panel.cpp b/src/win32/Gui/NeoStats Control Panel.cpp
new file mode 100644
index 00000000..4f1feb89
--- /dev/null
+++ b/src/win32/Gui/NeoStats Control Panel.cpp
@@ -0,0 +1,23 @@
+// NeoStats Control Panel.cpp : main project file.
+
+#include "stdafx.h"
+#include "Form1.h"
+
+using namespace NeoStatsControlPanel;
+
+[STAThreadAttribute]
+int main(array ^args)
+{
+ Form1 ^ NeoStatsGui;
+ // Enabling Windows XP visual effects before any controls are created
+ Application::EnableVisualStyles();
+ Application::SetCompatibleTextRenderingDefault(false);
+
+ // Create the main window and run it
+ NeoStatsGui = gcnew Form1();
+ NeoStatsGui->Hide();
+
+ Application::Run();
+ // Application::Run(gcnew Form1());
+ return 0;
+}
diff --git a/src/win32/Gui/NeoStats Control Panel.sln b/src/win32/Gui/NeoStats Control Panel.sln
new file mode 100644
index 00000000..075eb974
--- /dev/null
+++ b/src/win32/Gui/NeoStats Control Panel.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual C++ Express 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NeoStats Control Panel", "NeoStats Control Panel.vcproj", "{FACB5498-CC3E-415A-96E5-91737F986A52}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {FACB5498-CC3E-415A-96E5-91737F986A52}.Debug|Win32.ActiveCfg = Debug|Win32
+ {FACB5498-CC3E-415A-96E5-91737F986A52}.Debug|Win32.Build.0 = Debug|Win32
+ {FACB5498-CC3E-415A-96E5-91737F986A52}.Release|Win32.ActiveCfg = Release|Win32
+ {FACB5498-CC3E-415A-96E5-91737F986A52}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/src/win32/Gui/NeoStats Control Panel.vcproj b/src/win32/Gui/NeoStats Control Panel.vcproj
new file mode 100644
index 00000000..39354537
--- /dev/null
+++ b/src/win32/Gui/NeoStats Control Panel.vcproj
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/win32/Gui/app.ico b/src/win32/Gui/app.ico
new file mode 100644
index 00000000..3a5525fd
Binary files /dev/null and b/src/win32/Gui/app.ico differ
diff --git a/src/win32/Gui/app.rc b/src/win32/Gui/app.rc
new file mode 100644
index 00000000..b6e512df
--- /dev/null
+++ b/src/win32/Gui/app.rc
@@ -0,0 +1,63 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon placed first or with lowest ID value becomes application icon
+
+LANGUAGE 9, 18
+#pragma code_page(1252)
+1 ICON "app.ico"
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+ "\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/src/win32/Gui/resource.h b/src/win32/Gui/resource.h
new file mode 100644
index 00000000..1f2251c2
--- /dev/null
+++ b/src/win32/Gui/resource.h
@@ -0,0 +1,3 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by app.rc
diff --git a/src/win32/Gui/stdafx.cpp b/src/win32/Gui/stdafx.cpp
new file mode 100644
index 00000000..1846834b
--- /dev/null
+++ b/src/win32/Gui/stdafx.cpp
@@ -0,0 +1,7 @@
+// stdafx.cpp : source file that includes just the standard includes
+// NeoStats Control Panel.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+
diff --git a/src/win32/Gui/stdafx.h b/src/win32/Gui/stdafx.h
new file mode 100644
index 00000000..bab74c01
--- /dev/null
+++ b/src/win32/Gui/stdafx.h
@@ -0,0 +1,6 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+#pragma once
+
+// TODO: reference additional headers your program requires here