1
0
mirror of https://github.com/mastercodeon314/KsDumper-11.git synced 2024-11-12 01:20:51 +01:00

Main upload

This commit is contained in:
Mastercodeon 2023-01-21 19:32:57 -06:00
parent 8a58155a34
commit a4212e042b
67 changed files with 4410 additions and 74 deletions

100
DarkControls/BlankForm.Designer.cs generated Normal file
View File

@ -0,0 +1,100 @@
namespace DarkControls
{
partial class BlankForm
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BlankForm));
this.transparentLabel1 = new DarkControls.Controls.TransparentLabel();
this.closeBtn = new DarkControls.Controls.WindowsDefaultTitleBarButton();
this.appIcon1 = new DarkControls.Controls.AppIcon();
((System.ComponentModel.ISupportInitialize)(this.appIcon1)).BeginInit();
this.SuspendLayout();
//
// transparentLabel1
//
this.transparentLabel1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.transparentLabel1.Location = new System.Drawing.Point(32, 4);
this.transparentLabel1.Name = "transparentLabel1";
this.transparentLabel1.Size = new System.Drawing.Size(108, 20);
this.transparentLabel1.TabIndex = 8;
this.transparentLabel1.Text = "Form1";
//
// closeBtn
//
this.closeBtn.ButtonType = DarkControls.Controls.WindowsDefaultTitleBarButton.Type.Close;
this.closeBtn.ClickColor = System.Drawing.Color.Red;
this.closeBtn.ClickIconColor = System.Drawing.Color.Black;
this.closeBtn.HoverColor = System.Drawing.Color.OrangeRed;
this.closeBtn.HoverIconColor = System.Drawing.Color.Black;
this.closeBtn.IconColor = System.Drawing.Color.Black;
this.closeBtn.IconLineThickness = 2;
this.closeBtn.Location = new System.Drawing.Point(776, 0);
this.closeBtn.Name = "closeBtn";
this.closeBtn.Size = new System.Drawing.Size(40, 40);
this.closeBtn.TabIndex = 7;
this.closeBtn.Text = "windowsDefaultTitleBarButton1";
this.closeBtn.UseVisualStyleBackColor = true;
//
// appIcon1
//
this.appIcon1.AppIconImage = ((System.Drawing.Image)(resources.GetObject("appIcon1.AppIconImage")));
this.appIcon1.Image = ((System.Drawing.Image)(resources.GetObject("appIcon1.Image")));
this.appIcon1.Location = new System.Drawing.Point(0, 1);
this.appIcon1.Name = "appIcon1";
this.appIcon1.Scale = 3.5F;
this.appIcon1.Size = new System.Drawing.Size(28, 28);
this.appIcon1.TabIndex = 9;
this.appIcon1.TabStop = false;
//
// Form1
//
this.AllowDrop = true;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(33)))), ((int)(((byte)(33)))));
this.ClientSize = new System.Drawing.Size(816, 489);
this.Controls.Add(this.appIcon1);
this.Controls.Add(this.transparentLabel1);
this.Controls.Add(this.closeBtn);
this.DoubleBuffered = true;
this.ForeColor = System.Drawing.Color.Silver;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "Form1";
this.Text = "Basic File Box";
((System.ComponentModel.ISupportInitialize)(this.appIcon1)).EndInit();
this.ResumeLayout(false);
}
#endregion
private DarkControls.Controls.WindowsDefaultTitleBarButton closeBtn;
private DarkControls.Controls.TransparentLabel transparentLabel1;
private DarkControls.Controls.AppIcon appIcon1;
}
}

48
DarkControls/BlankForm.cs Normal file
View File

@ -0,0 +1,48 @@
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
using DarkControls;
namespace DarkControls
{
public partial class BlankForm : Form
{
protected override CreateParams CreateParams
{
get
{
// Activate double buffering at the form level. All child controls will be double buffered as well.
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
public BlankForm()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.None;
this.Region = Region.FromHrgn(Utils.CreateRoundRectRgn(0, 0, Width, Height, 10, 10));
this.closeBtn.Region = Region.FromHrgn(Utils.CreateRoundRectRgn(0, 0, closeBtn.Width, closeBtn.Height, 10, 10));
}
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == Utils.WM_NCHITTEST)
m.Result = (IntPtr)(Utils.HT_CAPTION);
}
}
}

239
DarkControls/BlankForm.resx Normal file
View File

@ -0,0 +1,239 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="appIcon1.AppIconImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EQAACxEBf2RfkQAAFCZJREFUeF7tXQl0lFWaDTraYzvTdJ8ZbRfEFpFNNgk7gSAECFsgQBaSACKLEPal
XRuxu1EYQA5JUeACsp2wJOyETTAhUaGitEoGgTmSEefM6T5OZ0bbdoOq4s79Ku9V3v+nQqUSSALWPeee
1P+++33ve+/W++tPHYMRYYQRRhhhhBFGGGGEEUYYYYQRRhhhhBFGGGGEETrunYZ+98/AlvtmoIg/998/
HZMiJ+M2Fa4ztFqI2++ficnsK1d6I7Pum44YFb4JsRC3PDANjgemAwF44r5p+BelrHXI3NKDrSfNTOld
SW8WoEHjaVj94DSgMjZOxyf3Tsa/qoRaQ+Op+NWD6fgwUE+a7H3dDW1Kkylo/VA6nm8yFZvIdU3SsY+E
wQ9+k44x1Gy0jE/Fxy1q8aTIXDKnrYdN0htff2AZlzXIWhiXtT2cjkdVmfqLZnyHN52KveQVEoH48FQU
tkrHP6mUCF4vtsSn1I4pMofMZZl7KpaocETbebiT8QIzbuOVplOwR9asUuoXWj6FR5o9hYvNpwBXYYFp
hkbzp7DYonvq+poitWUO25x+MzTapuFOxgosOhtlzbJ2lVI/0GwiHmo5Gf/NxlAZWzwV2AwNahbb9NfF
FKkptc25yApmaIgp0rtNbyXXLnugUuoWXefgjkcn42MSlXLS1c3QoHaxLfdkqwTcrsI1RtMZ+Blruixz
TKrcDA0xRdZgybNzEj56cBz+UaXUHdpOxNy2k4BKObFqZmi0mYjFZn6bSUhXoRqDtaeZtcmgZmiIKbIW
W76FrD9byesO7SfiPIlAbBeiGRrtJ2C9UeNtNVxjsNYxo7+31HCVIabImowaFrabgHNKWjfonIpfdJiA
KyQCsFpmCLi4UUadT9RwjdHhSZzWdWUONRwSxBTmF+g6Nl7p/iT+WUlrH49NQNNOTwJ2dhxffTPkM4P5
eUat3SpUY7DeHl2303jky2eKCoUEMUXW6K9lMHIsHlay2kdUCn7V5QnAxoLoapoRyw3qMg77zXqdxiJe
hWsM1h5p1iZzZU4VDgliCvMLbPUge6IktQP5IpALi+w6DlO6jsWBbuMATY4VSKNKGhJkY1gv16zXbSwO
qfA1Ahqwx8PmHDJnTUyRNdvqHZC9kT26Ll+aRo1Hkx5jMbbHGGSQ70WNxfckAvDd6t4/5TYVNQZ7A9S8
1CMNQ5Wsxug5BgO4hh/s83DsUHQ1H1m56T9n73n2mj6OwWXu3afkJnJWFE0K6Tuxnml4qFcqEnuNwbJe
aThOfsPXCEpq+9XgZLBGrq3mFf2aPf1A9lHyaiMqFX1Z58dAcyhW+6TI2n37Za0XmLKnZdplstey56pM
GTjYqXca9pN/JVEVRqfiR9LVOxWO3ilIio7GP6hyIUE2IDoNubbaO6LHIIrjXxtjX8byiU6lhQzJZa//
468ntVPQg69z9Jgar7YpsgeyF749ScNJ/vzBrB2Esvf7ue6OEX1SUdw3Fagq+6Rg8bW4N8bG4meslWur
vUPXZoNdeP2dP5aKNF9iNdA3DWONOb6V2jIum9g3BTk6puK50psvsQaQdbDWYrN2MIoXEf1ScJiE5oBU
uGc+fwULVnqxZIsXC7Z5LnC81NC4Y5KRqOatFmTBrJNr1BT6zdCIGY1tOs7XL6rhkBGTgoX+OinYqoZ9
EFNYO0fHFWtsiuwR67h1zf6p+Gp5lqf0tQ0eLF3mxdNPX/HttY4rHooYlIB7BozG2djRgOb8p715b+93
Y8dhD9a/48Efd3lKYmmKoXEPqKYpslDm5xq1EJtc0QzeZhqxr78YmidVKGSw9wm6jtTsn4QHVMgHMYXj
Of65ylhtU2RvmO/210rBV5nbPV/tPejG8T1ufJTjxgvzvYX+OCkeiBe+AvJiYDIHkgHNZ2jKsX1u7Drk
wUaasminp2TQaJQaGjcZkimywIFJyDVqYFBSRTNkwxi7YOoGp6CJCoeM2CQ8bNYiLwQyhb3kmDrpNVRT
mJdIyt74arDvrzO2e74VM/L3lpnxO5qh40Lf3mszNOLTcPfgRJwZkgRoPjvfm5/HIlJs8zEPlux0lwxJ
xpc6PjgJHuakqhJXRQIfbYckYq9Zn/kBTwbHPzN1iqe4uJB/6YpJQEPO66pQLxEXhyXhN0rmA3u8levJ
sumq/Eg8OBmjmOPWuXGjvX/jyfhxD9/UYsafaMbC+d7j/tok13o+Lhn3qRJWxMfj7mEJODMsEdB8fq43
X47ZfpqSdZT3vxx3CRfypY7HJcJDXtUUMYPavTrHl5eAHZNtZnD+Rox9ZupMcp6QTOG8DbkeV6BaQtYL
aArHs2zaoKZwPaOoc+uc4aPxzcpst0fMkDe1mPEHmqHjipWbocGG7okfhbPxCYDm7+Z58wppyoEDbmx9
m6Zke0riE1FqaNzDEwLfvmSBjO83tGD9CmZwYx7g+AVTx5pz+dNhjpEu2WiVVilEQ22Rmct6mapmeT3O
KXOrNB/k9kVdjqnjda6sRUksYCyRGrfWjhiNv/M2dWW3MuMUzXhpnrdQx33kHsteqxJXhwhHjsTZkaMA
zYVzvXnv7XbjUK4b24948Op2TwnHSw2NmzkVTOHkcYYGI0bhSCAzmHvB1PF6TlkUDfjaYcZY46qmSGzE
SBSZOayRKbUkLrVtsYCmSK823TAV9oNjiYy5tSYhCd9mZnt9n73v8DP41A6eDJrhr1FWp+pmaMjtK2EE
ziSOBGcs40uzvfkndrlxhE9gOTQlY5u7JHEUvvRrRsDDa8vti2NLzBqs+bfEeHRV4YikYXgggRti0zyr
wgpoQE2mqWHdUykBbl9iBvNdppbXr2kzNNjDbFNDXmQv/tsX60Qy7/8sGq5FhX1IiMcojrt1fHQyvveZ
wadTeSD6kGa8Mtd73J9fVuN8clyQ21RlEBeTR+AsCc0/zvbmuXa6cZSm7OTEGVs9JRwvNTTuZOOkJMfj
mBErYzy+ThrOW+gI9OD1BVtMnQw70IAxh6lNireeFHmdNAJFFs2I8pNhB2NzTS15QXoaPQLDpUdbTGq9
o1IjZI0cc+tYShJ+yMzx+vZEzPiAZiya6y3UccXQT4YdUiAlHmdJaC6a5c2TCeVIyn3SscVTwvFSQ+NO
Hi6moEHKcHxtjF8xXlfg6HgUVrZ5ZWA9mmLL85ki5OsiS2x45WaUwVfvXUtORZb3zLUsXIhbZG28duvx
Mcm4lKHMOKrMeGWOt9CfV8aam6ExjoXShuHsmOGcXHExTZH7ozzOyWPxappCTamhcY8ZhgX+62HwpHIh
/Pm9oanIYVgVbBOpcdjyXJy7yBxLq4IZ1DjNnApkr6pnjzEma3Lr63GJuCy3KfklWswo4t1jCc3w60nZ
O9lDNfG1wbhBuGdcHAsPYxOKS2Z68+QXnQJ5LOYT2JosTwk1pabGzzj8u9QZH492Y+Owj2Pfcux7/jzK
n6dM7dgqmEKdw8wxyfyMoPlxcNpyPmBfx1RP35J7xw5FW1FL76ZWczwfc7UZ8s2GmLF0lrfQopM94975
pr3WkMJPDMXZ8XFsRnEpTfkk2413+QQmj8Wvb/aUcLzU1AifiMN6VaYCJvN2w7oui35ocFOoWWPmqLyg
ZlDntOTE4URqbOXfJkvvpl44kb8UZ9AMebgRM+RzdRnNMDWyV9fNDI0pfPqaMARnJg5lU4pLp3vzi7e7
8b56LH4ry3NhYhy+NDUThmKqKhEQsiGse9KW80ZlmysmUu8y9WSFpykr0GDiEDhsOVc1QzBpCNLNnMkJ
Xq98gGfTDHniFDNW8gnU1HCe809W92kqVKTT9cmDcW7yEDanuHy6N+/MNjdOqsfitevd/2nGuahOKr1S
TI5BQ2pdlrzBFU8KbwW/ZL0iU8d+gp4MapxmDmufmBHEDIH0buZlbC8z4zDXKetdPsObb8Zlb2SPVHrt
YEo/3D1lEM5MHQxorpjmPf4pTZF7ac5bHv/41EG4xIVX6Us62SDmnPTnkpzHf1LEtCmD4TLjZNCTwR4c
lpxBVTNDwKej2znnjzp33WYvDvNOIGZkzvTmW+oOxvlptXUy7BBTptEUEporpnrzxZSsl73+MfIDlVIl
yEYx56SRL3xjFk/GtIFwWcYHBjeDOoeZkz6w6mZo8B3/oc5/fakX8gvyKpph1iXrzgwNOZozBuIcCc3M
dG/e6lle/zXpVPIqQ07C9Fi4jBrg9V/NazLobYoapy0nZDMEZp2Vc7x02FuorxVr/zZVGeazkVmxODc7
FtCcOxCX9es5/TFeSUPCMzRl9gC4zLoGg5oxawCctpxqmSGQNeg6cweVr00oa5c9UNL6AWlozgCcmzuA
Dds4rx9aK1nImBmDxtyMS5aa/YObQY3TlvPdzD74tRKEDFmDpZ6irLnemaHBpu8mz8zvDxj8Oz8UA35t
HQxyQpjvMuvN6x/8M2N+PzjMHIMF6dHV+68q5SsTru0bsx6vz/82po4/M4JhfjTueToG557pB/gYgzwV
CgliBlnkr1NWK+jJoMZpy/lfy3U/HFs4BD9XCSGBtfJ0HVmjrFWF6jek0ef6ouDZvvgvNt9LDVcZXHjD
Z2nGczGAwaBmUOO05ZxYGI1fstZGc5x9VcsU5kbLmsjjN4wZNYWY8XxfuF7oC2jyOuhtijqHmfNCH5qh
PsDldvN8H2ww46xZQLOqdfv6yUDMeLEPXCQ0Fzwe3IwXH4fDzOG13wwNMYW1Npi6BX3CplSKJTRj4eNw
vfQ4oMnr13AVMyT2Um84LDm9K5qhIaaw5gZTz/ywKXaIGb+PRtEfegN+RiMjmBnUOC055O97Y6mSBISY
wrk2WvKiq/9Bf9NBzFjUC66XowHNRdHBT8bLveAwcyzsFcSUCNzCOTbY8sInRcx4pReKFvcC/OwZ/GRQ
4zRzXumJk2SxOUbNIpUSEGIKczZacnrxpET+RE+KmLE0CkVLewKa/1YFM6hzWnKicCKjM37xchTuYr1i
S6wKplCz0cwhf3qmiBnLe8C1PAowuSwK23jbCPi3JmIGNQ5bjs8MJYnIoCmse9qi6VH57Ss7Abdyzo0W
fVlOwaqfyu1rSSQavtodrhU9gEpYwRQxY0V3OEzdqz2sZmiIKax/2tSSFUwRM1hzo03nJ+vf/Ka8TjNW
dkdRRndAk9eryKPG9cUVPXGvSvGZwXGnjvvYLbAZGmIK6xSbOSu7WW9fqzrhHo5/7o+zB3KTvlY8xp5v
ztuXmJHZDS5HN8Cg72nq1a64g6+POrrii9VR5X92IDGOOww9Mrte3QwNMYXznTZzSctJWdkDjVmvhCxY
1hZ3ymcKczZYcrqi8KY7KWLGqi4ocnYFDP5lbffyv9oVU5wdy//7WjFjVVc4LTldqmaGhpjCnGKzBmta
TgrrNZK51aWvV+pKzRzWuHlOiixwTWe4XusCVGBnvGeaoiFmMO4wtWtCNENjHU3hPKdttQJ+0G/iKaE2
39QavPFPipjxemcUvdEZ0OT1GfOazFJyH8QMjjltmmqZobGuPe56oxOKbTUrPBJzLMumuWC7vnFPipjx
Zie41nYCDL4m92mOO9X1F+s6Wj8zOOZQMR/f7IgTm2tghoaYsrYjTltqd7KeFPbcmGMlat618rTHnA1m
Dq8LV7W6wU6KmPFWRxSt7who8nqtbLjE5SevF63vUv6f/8vY+kg4LTmR18YMDTGFdYstc7APFfZBepIx
3au8gdjHVktO5A10UsSMDZFwbYwETHLs4vp21j8f05DFb+wAh01/Tc3QEFNY/7Rtrkp/eWQPjRj/zNSr
nMLs+n5SsmnG5sfg2twBCMRNHSqaImYw5rBpr4sZGmIK5zhtzrnpsYqmbG6DRox9ZupMMqf+miJmbHkM
RSQ0s9ojc0t7zPOPtcfFrYYhYgbHnf54mea6mqGRTVM4V7FtbsvtS3rNegyf63hWO/yWa9pk5vD62L76
dvsSM7a1h4uE5tb25V+hb2mHOVzcF1ltrB/g1DksOe1qxwwNMWVbO5w2eyAtJ4Vra8yxEvI5uZbPFPa5
wdAL689JYSO3Z7dDYU47wGCmNkNjT/Py3zckltMWTktO29o1Q0NM4fzFtl4sJ8W+2fI9GHWbLDntsFfM
UpK6w842eGlnW0BzR5uKZpiQ2A6aYcmpIzM0xBT2UGz2RFb4PcWEmMK1bzJzWGOCCtcN+ER1267W+Gp3
G0C4iw3Khq9+93Lk6uPuP68ucH++5nj5v/osMeqdWq944mDTujNDQ0xhb8WW3lpbTXnjKJq9mef+fG2e
+89vHbvUQUyh5pCh9/2VWJ1hT0t02dcaULwknyUyvvug+1X5Y1DhroMe3584ixl7aYahx95H64cZGgdp
yr5HUWzp0TDlwP7Lzx3MdUNxuYzlPoqWpn5Xi7r7325EsPmhbAjC/a1wXg1HnNx1OerkzsvfnNh5ufT9
nZdaixmMO7XWx1b1ywwNMYW9Fpu98tpnyp9yLrX9ePvl0o+2X/7m422Xe8iYfG4w7tZamtJCxusEB1sh
ioTi9/kPlv97IGeycfup13GbmHGAZhg68LpemqHB3u5in8W2nn2myJpkbT4hwVgrU3e0Lk/IiUa440gL
fHekJaDoO8Ya2RG4lfHVRlxYr83QEFMOt0SxrfclsiYliZA3IDVHdFz0KlR34DtiJSnvDB/fboFD5ERy
Oq8/tMSa3xhmaIgp7LvYXAMpa1pALuJ6/sMYx9Hm1f9H1q4ZZIPfaY5PSVyVzW4sMzQKaQr7P11hPTYe
a4499eL3EMGxh/Dr481wnEQl3HKkbfX+Gdn6gKNN0PD4I9gdYF3IbwYvf67hm63G/3DmNYV8ePPdNITc
UPgI3ufPwoJHsLqwGXxPIzcDCh5Gd65pBbmfa9xb0BQv5zep/l+HhRFGGGGEEUYYYYQRRhhhhBFGGGGE
EUYYYYRxcyIi4v8Bgkd5YGjdFSgAAAAASUVORK5CYII=
</value>
</data>
<data name="appIcon1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAACxEAAAsRAX9kX5EAAASJSURBVEhL7ZVrUJRVGMdfK7WaJhomMvvApQkhLnKHhQV2
WWFZYDF2YRWWkOW2EkoiQQVoENhFRYRABBHiXojg1BgOiMOUM6iTOCjkNFLhTE3f+NQ0xVD/p3N2jlAw
CNjUJ39f9jn///95zp5333df6SH/OzYF9LwoV2Qt2SW8+DocHfbgiH0hJuxy0CYRrRPWUpjHMzzrkIOj
vFc4K2OXSo87Z6PTNZ/IMRvDTrvJ3nE3upyy0e9ioA0iNo9LKW3gniXDs6yH9/IZfJaILY97JrICi4g8
zBjQ5GKjkCW3DFz0yMBesZyHa26ZuCiWkkaDjbyXz3BPR5aQl2KjoKeC0xAQaMLNQDbAbKb1wpKC0vGC
PB3T/iYyCGkernGPZ4QkmX1ofSD7gnyWPBUyaw2eFpYkhRnxXowZQyoTfpQbcUeZhhKDy8KlU6SSvTIZ
42EZ6Gefp/7xW5bSI1xTZaKPZ3hWOBKfoUxFiTwJU9tM+FmbhSG+lxSqR8Oet4hqOkGxabjr7g4n0SOF
G8g2KhHfRRjJEKmn8OgkzAhrHq5FJSCCZ1h2SptCtsKSnJ2xJS4Td1vbifLeJApme1kMdTSqS0uImjrn
EJ+CmRAZvLkel4A72h1IM8SRD6vH9IkY1Ceg2dLEiE/Aaa7FGXCDZ2INZNIlYIp7QX7kudOEme5PiA4V
E0VoUW1puodGhZr32Uk72v9AchKm9RE4YNRhNkWHc0Y9kVGPMJ5L1GMwKQ5VyTo07tRjiGs7mMczlmw8
fterUfJqMn76tIfoQzZTzWbz3BJ0ClRXFRCd/Xhudt8uol2RKE7VISb9FXyQEYurZgNZ8VzadsyZtmOY
1xlqWGdocdXEMjzLeoryMon4ySrZLF3IopMtJkmOmgYWrNpHlOALhZClbC0O5ERjMDeaWl+LRi/XzOFk
lROF0ewYHLSEGEYvhB5h/bXsZClBy5xsMXuVOFmgZj90JDYLyUK+Gt/na/Alr3PZrV4YiR+Y9q3FFBTF
YhPvzVWIG2S1FKoQVspue7GUDqrQVrwNn/G6VEHPFKtwuURNbzOti3nzNxKxx4b3iuWDURGKk+VKDPCa
b3ZIgdsVCvx6RqJHuVamxFC5AnW8/tdUylHVEEZUFwi7YzI8URmEycMhKDwcjP3Mu1XD/sqOB5A9zxwL
wlHR9mDUy9BSK8MvJ0IQ85EcHnUBuFEjwzvCllhdUSej63VyuNYHQ3uCZwPQJOy10eqH9tN++KbRFwU9
Mlg3++LrJv+Fze7BtIoWX1xr9CGrU74oZD232/zQIuzV0e2B+l5XjHV4UNmIgh7r8sJEuzdKhb2EDm9U
dHniJkm0rsOLys64YLx7K2qFfX/6XLC/1x/XOqbnlH2BeK7fDRO9Wxees+U464Hyc24Y/9yHnu2Z/E3F
Zoz1OSNH2MvzhTN6Lvj9+e5g+2zigCsmzzsvvYzLcf5llA+44NZI82zSBR8cZ70rX9pBR/IcccToFVuM
Dm9BnpBXzbAT3uC9lxxx+ZLTwpvnvlzfTE9eccAmsVwzX70Em8m/vVMf8h8iSX8BwCCUC3RVqvIAAAAA
SUVORK5CYII=
</value>
</data>
</root>

View File

@ -0,0 +1,171 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.ComponentModel;
namespace DarkControls.Controls
{
public class AppIcon : PictureBox
{
private float _Scale = 3.5f;
[
Description("The value used to scale down the icon"),
DefaultValue("3.5"),
RefreshProperties(RefreshProperties.All)
]
public float Scale
{
get
{
return _Scale;
}
set
{
_Scale = value;
this.Size = Size.Empty;
}
}
[
DefaultValue("50, 50"),
RefreshProperties(RefreshProperties.All)
]
public new Size Size
{
get
{
return base.Size;
}
set
{
SizeF sz = calcImgSize();
this.Image = ResizeImage(appIconImg, (int)sz.Width, (int)sz.Height);
base.Size = new Size((int)sz.Width, (int)sz.Height);
}
}
private bool drag = false; // determine if we should be moving the form
private Point startPoint = new Point(0, 0); // also for the moving
public Form DragForm { get; set; } = null;
private Image appIconImg = Properties.Resources.icons8_crossed_axes_100;
[
Description("The image that will be used for the icon"),
RefreshProperties(RefreshProperties.All)
]
public Image AppIconImage
{
get
{
return appIconImg;
}
set
{
appIconImg = value;
}
}
public AppIcon()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
//BackColor = Color.Transparent;
this.MouseDown += AppLogo_MouseDown;
this.MouseUp += AppLogo_MouseUp;
this.MouseMove += AppLogo_MouseMove;
SizeF sz = calcImgSize();
this.Image = ResizeImage(appIconImg, (int)sz.Width, (int)sz.Height);
this.Size = new Size((int)sz.Width, (int)sz.Height);
if (this.DesignMode == false)
{
if (DragForm != null) DragForm.Load += DragForm_Load;
}
}
private SizeF calcImgSize()
{
float scale = 3.5f;
SizeF sz = new SizeF(appIconImg.Width, appIconImg.Height);
float x = sz.Width / (float)scale;
float y = sz.Height / (float)scale;
return new SizeF(x, y);
}
private void DragForm_Load(object sender, EventArgs e)
{
SizeF sz = calcImgSize();
this.Image = ResizeImage(appIconImg, (int)sz.Width, (int)sz.Height);
this.Size = new Size((int)sz.Width, (int)sz.Height);
this.Invalidate();
}
private void AppLogo_MouseMove(object sender, MouseEventArgs e)
{
if (this.drag)
{ // if we should be dragging it, we need to figure out some movement
Point p1 = new Point(e.X, e.Y);
Point p2 = DragForm.PointToScreen(p1);
Point p3 = new Point(p2.X - this.startPoint.X,
p2.Y - this.startPoint.Y);
DragForm.Location = p3;
}
}
private void AppLogo_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.drag = false;
}
}
private void AppLogo_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.startPoint = e.Location;
this.drag = true;
}
}
/// <summary>
/// Resize the image to the specified width and height.
/// </summary>
/// <param name="image">The image to resize.</param>
/// <param name="width">The width to resize to.</param>
/// <param name="height">The height to resize to.</param>
/// <returns>The resized image.</returns>
public static Bitmap ResizeImage(Image image, int width, int height)
{
var destRect = new Rectangle(0, 0, width, height);
var destImage = new Bitmap(width, height);
destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);
using (var graphics = Graphics.FromImage(destImage))
{
graphics.CompositingMode = CompositingMode.SourceCopy;
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
using (var wrapMode = new ImageAttributes())
{
wrapMode.SetWrapMode(WrapMode.TileFlipXY);
graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
}
}
return destImage;
}
}
}

View File

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DarkControls.Controls
{
public class CloseButton : WindowsDefaultTitleBarButton
{
public CloseButton()
{
this.ButtonType = DarkControls.Controls.WindowsDefaultTitleBarButton.Type.Close;
this.ClickColor = System.Drawing.Color.Red;
this.ClickIconColor = System.Drawing.Color.Black;
this.HoverColor = System.Drawing.Color.OrangeRed;
this.HoverIconColor = System.Drawing.Color.Black;
this.IconColor = System.Drawing.Color.Black;
this.IconLineThickness = 2;
this.Size = new System.Drawing.Size(40, 40);
this.UseVisualStyleBackColor = true;
}
}
}

View File

@ -0,0 +1,101 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Text;
using System.Drawing.Drawing2D;
namespace DarkControls.Controls
{
public class CustomCheckedListBox : CheckedListBox
{
public CustomCheckedListBox()
{
//this.SetStyle(
// ControlStyles.OptimizedDoubleBuffer |
// ControlStyles.ResizeRedraw,
// //ControlStyles.UserPaint,
// true);
//this.DrawMode = DrawMode.OwnerDrawFixed;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(33)))), ((int)(((byte)(33)))));
this.ForeColor = Color.Silver;
this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.CheckedItemColor = System.Drawing.Color.Silver;
this.CheckOnClick = true;
}
protected override void OnPaint(PaintEventArgs e)
{
Region iRegion = new Region(e.ClipRectangle);
e.Graphics.FillRegion(new SolidBrush(this.BackColor), iRegion);
if (this.Items.Count > 0)
{
for (int i = 0; i < this.Items.Count; ++i)
{
System.Drawing.Rectangle irect = this.GetItemRectangle(i);
if (e.ClipRectangle.IntersectsWith(irect))
{
if ((this.SelectionMode == SelectionMode.One && this.SelectedIndex == i)
|| (this.SelectionMode == SelectionMode.MultiSimple && this.SelectedIndices.Contains(i))
|| (this.SelectionMode == SelectionMode.MultiExtended && this.SelectedIndices.Contains(i)))
{
OnDrawItem(new DrawItemEventArgs(e.Graphics, this.Font,
irect, i,
DrawItemState.Selected, this.ForeColor,
this.BackColor));
}
else
{
OnDrawItem(new DrawItemEventArgs(e.Graphics, this.Font,
irect, i,
DrawItemState.Default, this.ForeColor,
this.BackColor));
}
iRegion.Complement(irect);
}
}
}
base.OnPaint(e);
}
protected override void OnDrawItem(DrawItemEventArgs e)
{
Size checkSize = CheckBoxRenderer.GetGlyphSize(e.Graphics, System.Windows.Forms.VisualStyles.CheckBoxState.CheckedNormal);
int dx = (e.Bounds.Height - checkSize.Width) / 2;
e.DrawBackground();
//e.DrawFocusRectangle();
if (this.Items.Count > 0)
{
//var isChecked = GetItemChecked(e.Index) ? CheckState.Checked : CheckState.Unchecked;
bool isChecked = GetItemChecked(e.Index);//For some reason e.State doesn't work so we have to do this instead.
//CheckBoxRenderer.DrawCheckBox(e.Graphics, new Point(dx, e.Bounds.Top + dx), isChecked ? System.Windows.Forms.VisualStyles.CheckBoxState.CheckedNormal : System.Windows.Forms.VisualStyles.CheckBoxState.UncheckedNormal);
DarkCheckBox.DrawCheckBox(e.Graphics, new Point(dx, e.Bounds.Top + dx), this.GetItemCheckState(e.Index));
using (StringFormat sf = new StringFormat { LineAlignment = StringAlignment.Center })
{
using (Brush brush = new SolidBrush(isChecked ? CheckedItemColor : ForeColor))
{
e.Graphics.DrawString(Items[e.Index].ToString(), Font, brush, new Rectangle(e.Bounds.Height, e.Bounds.Top, e.Bounds.Width - e.Bounds.Height, e.Bounds.Height), sf);
}
}
}
//base.OnDrawItem(e);
}
Color checkedItemColor = Color.Green;
public Color CheckedItemColor
{
get { return checkedItemColor; }
set
{
checkedItemColor = value;
//Invalidate();
}
}
}
}

View File

@ -0,0 +1,342 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms.VisualStyles;
using System.Windows.Forms;
namespace DarkControls.Controls
{
public class CustomScrollBar : Control
{
private Rectangle clickedBarRectangle;
private Rectangle thumbRectangle;
private Rectangle leftArrowRectangle;
private Rectangle rightArrowRectangle;
private bool leftArrowClicked = false;
private bool rightArrowClicked = false;
private bool leftBarClicked = false;
private bool rightBarClicked = false;
private bool thumbClicked = false;
private ScrollBarState thumbState = ScrollBarState.Normal;
private ScrollBarArrowButtonState leftButtonState =
ScrollBarArrowButtonState.LeftNormal;
private ScrollBarArrowButtonState rightButtonState =
ScrollBarArrowButtonState.RightNormal;
// This control does not allow these widths to be altered.
private int thumbWidth = 15;
private int arrowWidth = 17;
// Set the right limit of the thumb's right border.
private int thumbRightLimitRight = 0;
// Set the right limit of the thumb's left border.
private int thumbRightLimitLeft = 0;
// Set the left limit of thumb's left border.
private int thumbLeftLimit = 0;
// Set the distance from the left edge of the thumb to the
// cursor tip.
private int thumbPosition = 0;
// Set the distance from the left edge of the scroll bar track
// to the cursor tip.
private int trackPosition = 0;
// This timer draws the moving thumb while the scroll arrows or
// track are pressed.
private Timer progressTimer = new Timer();
public CustomScrollBar()
: base()
{
this.Location = new Point(10, 10);
this.Width = 200;
this.Height = 20;
this.DoubleBuffered = true;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(33)))), ((int)(((byte)(33)))));
SetUpScrollBar();
progressTimer.Interval = 20;
progressTimer.Tick += new EventHandler(progressTimer_Tick);
}
// Calculate the sizes of the scroll bar elements.
private void SetUpScrollBar()
{
clickedBarRectangle = ClientRectangle;
thumbRectangle = new Rectangle(
ClientRectangle.X + ClientRectangle.Width / 2,
ClientRectangle.Y, thumbWidth,
ClientRectangle.Height);
leftArrowRectangle = new Rectangle(
ClientRectangle.X, ClientRectangle.Y,
arrowWidth, ClientRectangle.Height);
rightArrowRectangle = new Rectangle(
ClientRectangle.Right - arrowWidth,
ClientRectangle.Y, arrowWidth,
ClientRectangle.Height);
// Set the default starting thumb position.
thumbPosition = thumbWidth / 2;
// Set the right limit of the thumb's right border.
thumbRightLimitRight = ClientRectangle.Right - arrowWidth;
// Set the right limit of the thumb's left border.
thumbRightLimitLeft = thumbRightLimitRight - thumbWidth;
// Set the left limit of the thumb's left border.
thumbLeftLimit = ClientRectangle.X + arrowWidth;
}
// Draw the scroll bar in its normal state.
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.Clear(BackColor);
base.OnPaint(e);
// Visual styles are not enabled.
if (!ScrollBarRenderer.IsSupported)
{
this.Parent.Text = "CustomScrollBar Disabled";
return;
}
this.Parent.Text = "CustomScrollBar Enabled";
// Draw the scroll bar track.
ScrollBarRenderer.DrawRightHorizontalTrack(e.Graphics,
ClientRectangle, ScrollBarState.Normal);
// Draw the thumb and thumb grip in the current state.
ScrollBarRenderer.DrawHorizontalThumb(e.Graphics,
thumbRectangle, thumbState);
ScrollBarRenderer.DrawHorizontalThumbGrip(e.Graphics,
thumbRectangle, thumbState);
// Draw the scroll arrows in the current state.
ScrollBarRenderer.DrawArrowButton(e.Graphics,
leftArrowRectangle, leftButtonState);
ScrollBarRenderer.DrawArrowButton(e.Graphics,
rightArrowRectangle, rightButtonState);
// Draw a highlighted rectangle in the left side of the scroll
// bar track if the user has clicked between the left arrow
// and thumb.
if (leftBarClicked)
{
clickedBarRectangle.X = thumbLeftLimit;
clickedBarRectangle.Width = thumbRectangle.X - thumbLeftLimit;
ScrollBarRenderer.DrawLowerVerticalTrack(e.Graphics,
clickedBarRectangle, ScrollBarState.Pressed);
}
// Draw a highlighted rectangle in the right side of the scroll
// bar track if the user has clicked between the right arrow
// and thumb.
else if (rightBarClicked)
{
clickedBarRectangle.X =
thumbRectangle.X + thumbRectangle.Width;
clickedBarRectangle.Width =
thumbRightLimitRight - clickedBarRectangle.X;
ScrollBarRenderer.DrawRightHorizontalTrack(e.Graphics,
clickedBarRectangle, ScrollBarState.Pressed);
}
}
// Handle a mouse click in the scroll bar.
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
if (!ScrollBarRenderer.IsSupported)
return;
// When the thumb is clicked, update the distance from the left
// edge of the thumb to the cursor tip.
if (thumbRectangle.Contains(e.Location))
{
thumbClicked = true;
thumbPosition = e.Location.X - thumbRectangle.X;
thumbState = ScrollBarState.Pressed;
}
// When the left arrow is clicked, start the timer to scroll
// while the arrow is held down.
else if (leftArrowRectangle.Contains(e.Location))
{
leftArrowClicked = true;
leftButtonState = ScrollBarArrowButtonState.LeftPressed;
progressTimer.Start();
}
// When the right arrow is clicked, start the timer to scroll
// while the arrow is held down.
else if (rightArrowRectangle.Contains(e.Location))
{
rightArrowClicked = true;
rightButtonState = ScrollBarArrowButtonState.RightPressed;
progressTimer.Start();
}
// When the scroll bar is clicked, start the timer to move the
// thumb while the mouse is held down.
else
{
trackPosition = e.Location.X;
if (e.Location.X < this.thumbRectangle.X)
{
leftBarClicked = true;
}
else
{
rightBarClicked = true;
}
progressTimer.Start();
}
Invalidate();
}
// Draw the track.
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
if (!ScrollBarRenderer.IsSupported)
return;
// Update the thumb position, if the new location is within
// the bounds.
if (thumbClicked)
{
thumbClicked = false;
thumbState = ScrollBarState.Normal;
if (e.Location.X > (thumbLeftLimit + thumbPosition) &&
e.Location.X < (thumbRightLimitLeft + thumbPosition))
{
thumbRectangle.X = e.Location.X - thumbPosition;
thumbClicked = false;
}
}
// If one of the four thumb movement areas was clicked,
// stop the timer.
else if (leftArrowClicked)
{
leftArrowClicked = false;
leftButtonState = ScrollBarArrowButtonState.LeftNormal;
progressTimer.Stop();
}
else if (rightArrowClicked)
{
rightArrowClicked = false;
rightButtonState = ScrollBarArrowButtonState.RightNormal;
progressTimer.Stop();
}
else if (leftBarClicked)
{
leftBarClicked = false;
progressTimer.Stop();
}
else if (rightBarClicked)
{
rightBarClicked = false;
progressTimer.Stop();
}
Invalidate();
}
// Track mouse movements if the user clicks on the scroll bar thumb.
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if (!ScrollBarRenderer.IsSupported)
return;
// Update the thumb position, if the new location is
// within the bounds.
if (thumbClicked)
{
// The thumb is all the way to the left.
if (e.Location.X <= (thumbLeftLimit + thumbPosition))
{
thumbRectangle.X = thumbLeftLimit;
}
// The thumb is all the way to the right.
else if (e.Location.X >= (thumbRightLimitLeft + thumbPosition))
{
thumbRectangle.X = thumbRightLimitLeft;
}
// The thumb is between the ends of the track.
else
{
thumbRectangle.X = e.Location.X - thumbPosition;
}
Invalidate();
}
}
// Recalculate the sizes of the scroll bar elements.
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
SetUpScrollBar();
}
// Handle the timer tick by updating the thumb position.
private void progressTimer_Tick(object sender, EventArgs myEventArgs)
{
if (!ScrollBarRenderer.IsSupported)
return;
// If an arrow is clicked, move the thumb in small increments.
if (rightArrowClicked && thumbRectangle.X < thumbRightLimitLeft)
{
thumbRectangle.X++;
}
else if (leftArrowClicked && thumbRectangle.X > thumbLeftLimit)
{
thumbRectangle.X--;
}
// If the track bar to right of the thumb is clicked, move the
// thumb to the right in larger increments until the right edge
// of the thumb hits the cursor.
else if (rightBarClicked &&
thumbRectangle.X < thumbRightLimitLeft &&
thumbRectangle.X + thumbRectangle.Width < trackPosition)
{
thumbRectangle.X += 3;
}
// If the track bar to left of the thumb is clicked, move the
// thumb to the left in larger increments until the left edge
// of the thumb hits the cursor.
else if (leftBarClicked &&
thumbRectangle.X > thumbLeftLimit &&
thumbRectangle.X > trackPosition)
{
thumbRectangle.X -= 3;
}
Invalidate();
}
}
}

View File

@ -0,0 +1,52 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DarkControls.Controls
{
public class CustomStatusStrip : StatusStrip
{
protected override void OnPaint(PaintEventArgs e)
{
// Set the background color to RGB value 33, 33, 33
this.BackColor = Color.FromArgb(33, 33, 33);
// Set the foreground color to Silver
this.ForeColor = Color.Silver;
e.Graphics.Clear(this.BackColor);
// Call the base OnPaint method to handle the actual rendering
base.OnPaint(e);
}
//protected override void OnRender (ToolStripRenderEventArgs e)
//{
// // Set the background color to RGB value 33, 33, 33
// e.Graphics.Clear(Color.FromArgb(33, 33, 33));
// base.OnRenderToolStripBackground(e);
//}
//protected override void OnRenderToolStripContentPanelBackground(ToolStripContentPanelRenderEventArgs e)
//{
// e.Graphics.Clear(Color.FromArgb(33, 33, 33));
// base.OnRenderToolStripContentPanelBackground(e);
//}
//protected override void OnRenderItem(ToolStripItemRenderEventArgs e)
//{
// // Set the background color to RGB value 33, 33, 33
// e.Item.BackColor = Color.FromArgb(33, 33, 33);
// // Set the foreground color to Silver
// e.Item.ForeColor = Color.Silver;
// // Call the base OnRenderItem method to handle the actual rendering
// base.OnRenderItem(e);
//}
}
}

View File

@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
namespace DarkControls.Controls
{
public class DarkButton : Button
{
public DarkButton()
{
this.BackColor = Color.FromArgb(33, 33, 33);
this.ForeColor = Color.Silver;
this.Size = new Size(75, 23);
this.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.UseVisualStyleBackColor = true;
}
}
}

View File

@ -0,0 +1,274 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Runtime.InteropServices;
using SystemMath = System.Math;
namespace DarkControls.Controls
{
public class DarkCheckBox : CheckBox
{
[DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")]
private static extern IntPtr CreateRoundRectRgn
(
int nLeftRect, // x-coordinate of upper-left corner
int nTopRect, // y-coordinate of upper-left corner
int nRightRect, // x-coordinate of lower-right corner
int nBottomRect, // y-coordinate of lower-right corner
int nWidthEllipse, // width of ellipse
int nHeightEllipse // height of ellipse
);
public Color CheckColor { get; set; } = Color.CornflowerBlue;
public Color BoxFillColor { get; set; } = Color.FromArgb(33, 33, 33);
public Color BoxBorderColor { get; set; } = Color.DarkSlateBlue;
public DarkCheckBox()
{
Appearance = System.Windows.Forms.Appearance.Button;
FlatStyle = System.Windows.Forms.FlatStyle.Flat;
TextAlign = ContentAlignment.MiddleRight;
FlatAppearance.BorderSize = 0;
AutoSize = false;
Height = 16;
}
public static GraphicsPath RoundedRect(Rectangle bounds, int radius)
{
int diameter = radius * 2;
Size size = new Size(diameter, diameter);
Rectangle arc = new Rectangle(bounds.Location, size);
GraphicsPath path = new GraphicsPath();
if (radius == 0)
{
path.AddRectangle(bounds);
return path;
}
// top left arc
path.AddArc(arc, 180, 90);
// top right arc
arc.X = bounds.Right - diameter;
path.AddArc(arc, 270, 90);
// bottom right arc
arc.Y = bounds.Bottom - diameter;
path.AddArc(arc, 0, 90);
// bottom left arc
arc.X = bounds.Left;
path.AddArc(arc, 90, 90);
path.CloseFigure();
return path;
}
bool mouseEntered = false;
bool mouseDown = false;
protected override void OnMouseEnter(EventArgs eventargs)
{
mouseEntered = true;
base.OnMouseEnter(eventargs);
}
protected override void OnMouseLeave(EventArgs eventargs)
{
mouseEntered = false;
base.OnMouseLeave(eventargs);
}
protected override void OnMouseDown(MouseEventArgs mevent)
{
if (mevent.Button == MouseButtons.Left)
{
mouseDown = true;
this.Invalidate();
}
base.OnMouseDown(mevent);
}
//protected override void OnMouseMove(MouseEventArgs mevent)
//{
// if (mevent.Button == MouseButtons.Left)
// {
// mouseDown = true;
// this.Invalidate();
// }
// base.OnMouseMove(mevent);
//}
protected override void OnMouseUp(MouseEventArgs mevent)
{
if (mevent.Button == MouseButtons.Left)
{
mouseDown = false;
this.Invalidate();
}
base.OnMouseUp(mevent);
}
public static void DrawCheckBox(Graphics g, Point p, CheckState Checked)
{
Color BoxFillColor = Color.FromArgb(33, 33, 33);
//using (SolidBrush brush = new SolidBrush(BoxFillColor))
// g.DrawString(Text, Font, brush, 26, 6);
Point pt = new Point(4, 4);
Rectangle rect = new Rectangle(p, new Size(12, 12));
//if (mouseEntered)
//{
// if (mouseDown)
// {
// Color col = Color.FromArgb(BoxFillColor.R - 4, BoxFillColor.G - 4, BoxFillColor.B - 4);
// using (GraphicsPath path = RoundedRect(rect, 4))
// {
// g.FillPath(new SolidBrush(col), path);
// }
// }
// else
// {
// Color col = Color.FromArgb(BoxFillColor.R + 22, BoxFillColor.G + 22, BoxFillColor.B + 22);
// using (GraphicsPath path = RoundedRect(rect, 4))
// {
// g.FillPath(new SolidBrush(col), path);
// }
// }
//}
//else
{
using (GraphicsPath path = RoundedRect(rect, 4))
{
g.FillPath(new SolidBrush(BoxFillColor), path);
}
}
if (Checked == CheckState.Checked)
{
using (SolidBrush brush = new SolidBrush(Color.CornflowerBlue))
using (Font wing = new Font("Wingdings", 12f))
g.DrawString("ü", wing, brush, p.X - 2f, p.Y - 2f);
}
else if (Checked == CheckState.Indeterminate)
{
using (GraphicsPath path = RoundedRect(rect, 4))
{
g.FillPath(new SolidBrush(Color.CornflowerBlue), path);
}
}
using (GraphicsPath path = RoundedRect(rect, 4))
{
g.DrawPath(new Pen(Color.Silver), path);
}
}
protected override void OnPaint(PaintEventArgs pevent)
{
//base.OnPaint(pevent);
pevent.Graphics.Clear(BackColor);
if (this.Enabled)
{
using (SolidBrush brush = new SolidBrush(ForeColor))
pevent.Graphics.DrawString(Text, Font, brush, 26, 6);
Point pt = new Point(4, 4);
Rectangle rect = new Rectangle(pt, new Size(16, 16));
if (mouseEntered)
{
if (mouseDown)
{
Color col = Color.FromArgb(BoxFillColor.R - 4, BoxFillColor.G - 4, BoxFillColor.B - 4);
using (GraphicsPath path = RoundedRect(rect, 4))
{
pevent.Graphics.FillPath(new SolidBrush(col), path);
}
}
else
{
Color col = Color.FromArgb(BoxFillColor.R + 22, BoxFillColor.G + 22, BoxFillColor.B + 22);
using (GraphicsPath path = RoundedRect(rect, 4))
{
pevent.Graphics.FillPath(new SolidBrush(col), path);
}
}
}
else
{
using (GraphicsPath path = RoundedRect(rect, 4))
{
pevent.Graphics.FillPath(new SolidBrush(BoxFillColor), path);
}
}
if (Checked)
{
using (SolidBrush brush = new SolidBrush(CheckColor))
using (Font wing = new Font("Wingdings", 12f))
pevent.Graphics.DrawString("ü", wing, brush, 3, 5);
}
using (GraphicsPath path = RoundedRect(rect, 4))
{
pevent.Graphics.DrawPath(new Pen(BoxBorderColor), path);
}
}
else
{
double brightnessDim = 0.4;
double[] hsbForeColor = SimpleColorTransforms.RgBtoHsb(ForeColor);
double[] hsBoxFillColor = SimpleColorTransforms.RgBtoHsb(BoxFillColor);
double[] hsBoxBorderColor = SimpleColorTransforms.RgBtoHsb(BoxBorderColor);
double[] hsCheckColor = SimpleColorTransforms.RgBtoHsb(CheckColor);
hsbForeColor[1] = 0.0;
hsbForeColor[2] -= brightnessDim;
hsBoxFillColor[1] = 0.0;
//hsBoxFillColor[2] -= brightnessDim;
hsBoxBorderColor[1] = 0.0;
hsBoxBorderColor[2] -= brightnessDim;
hsCheckColor[1] = 0.0;
hsCheckColor[2] -= brightnessDim;
Color foreColor = SimpleColorTransforms.HsBtoRgb(hsbForeColor[0], hsbForeColor[1], hsbForeColor[2]);
Color boxFillColor = SimpleColorTransforms.HsBtoRgb(hsBoxFillColor[0], hsBoxFillColor[1], hsBoxFillColor[2]);
Color boxBorderColor = SimpleColorTransforms.HsBtoRgb(hsBoxBorderColor[0], hsBoxBorderColor[1], hsBoxBorderColor[2]);
Color checkColor = SimpleColorTransforms.HsBtoRgb(hsCheckColor[0], hsCheckColor[1], hsCheckColor[2]);
using (SolidBrush brush = new SolidBrush(foreColor))
pevent.Graphics.DrawString(Text, Font, brush, 26, 6);
Point pt = new Point(4, 4);
Rectangle rect = new Rectangle(pt, new Size(16, 16));
pevent.Graphics.FillRectangle(new SolidBrush(boxFillColor), rect);
if (Checked)
{
using (SolidBrush brush = new SolidBrush(checkColor))
using (Font wing = new Font("Wingdings", 12f))
pevent.Graphics.DrawString("ü", wing, brush, 3, 5);
}
using (GraphicsPath path = RoundedRect(rect, 4))
{
pevent.Graphics.DrawPath(new Pen(boxBorderColor), path);
}
}
}
}
}

View File

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
namespace DarkControls.Controls
{
public class DarkSelectFileButton : Button
{
public DarkSelectFileButton()
{
this.BackColor = Color.FromArgb(33, 33, 33);
this.ForeColor = Color.Silver;
this.FlatAppearance.BorderColor = System.Drawing.Color.Silver;
this.FlatAppearance.BorderSize = 0;
this.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Silver;
this.Image = Properties.Resources.selectFileBtn_Image;
this.Size = new Size(75, 23);
this.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.UseVisualStyleBackColor = true;
}
}
}

View File

@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
using System.Windows.Forms.VisualStyles;
using System.Diagnostics;
namespace DarkControls.Controls
{
public class DarkTextBox : System.Windows.Forms.TextBox
{
public DarkTextBox()
{
// Initialize the renderer
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(33)))), ((int)(((byte)(33)))));
this.ForeColor = Color.Silver;
this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
}
protected override void OnPaint(PaintEventArgs e)
{
//Debugger.Break();
if (ScrollBarRenderer.IsSupported)
{
Debugger.Break();
// Draw the custom scrollbar
ScrollBarRenderer.DrawUpperVerticalTrack(e.Graphics, new Rectangle(this.Right - 18, this.Top, 18, this.Height), ScrollBarState.Normal);
ScrollBarRenderer.DrawLowerVerticalTrack(e.Graphics, new Rectangle(this.Right - 18, this.Top, 18, this.Height), ScrollBarState.Normal);
ScrollBarRenderer.DrawVerticalThumb(e.Graphics, new Rectangle(this.Right - 18, this.Top, 18, this.Height), ScrollBarState.Normal);
ScrollBarRenderer.DrawVerticalThumbGrip(e.Graphics, new Rectangle(this.Right - 18, this.Top, 18, this.Height), ScrollBarState.Normal);
}
base.OnPaint(e);
}
//protected override void WndProc(ref Message m)
//{
// base.WndProc(ref m);
// if (m.Msg == 0x00F7)
// {
// m.Result = (IntPtr)1;
// }
//}
}
}

View File

@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DarkControls.Controls
{
internal class FlatScrollBar
{
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DarkControls.Controls
{
public class MaximizeButton : WindowsDefaultTitleBarButton
{
public MaximizeButton()
{
this.ButtonType = DarkControls.Controls.WindowsDefaultTitleBarButton.Type.Maximize;
this.ClickColor = System.Drawing.Color.Red;
this.ClickIconColor = System.Drawing.Color.Black;
this.HoverColor = System.Drawing.Color.OrangeRed;
this.HoverIconColor = System.Drawing.Color.Black;
this.IconColor = System.Drawing.Color.Black;
this.IconLineThickness = 2;
this.Size = new System.Drawing.Size(40, 40);
this.UseVisualStyleBackColor = true;
}
}
}

View File

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DarkControls.Controls
{
public class MinimizeButton : WindowsDefaultTitleBarButton
{
public MinimizeButton()
{
this.ButtonType = DarkControls.Controls.WindowsDefaultTitleBarButton.Type.Minimize;
this.ClickColor = System.Drawing.Color.Red;
this.ClickIconColor = System.Drawing.Color.Black;
this.HoverColor = System.Drawing.Color.OrangeRed;
this.HoverIconColor = System.Drawing.Color.Black;
this.IconColor = System.Drawing.Color.Black;
this.IconLineThickness = 2;
this.Size = new System.Drawing.Size(40, 40);
this.UseVisualStyleBackColor = true;
}
}
}

View File

@ -0,0 +1,24 @@
using System.ComponentModel;
using System.Windows.Forms;
namespace DarkControls.Controls
{
/// <summary>
/// Modified button which has no focus rectangles when the form which contains this button loses fucus while the button was focused.
/// </summary>
[ToolboxItem(typeof(NoFocusCueBotton))]
public class NoFocusCueBotton : Button
{
protected override bool ShowFocusCues => false;
/// <summary>
/// Creates a new instance of a <see cref="NoFocusCueBotton"/>
/// </summary>
public NoFocusCueBotton() { }
public override void NotifyDefault(bool value)
{
base.NotifyDefault(false);
}
}
}

View File

@ -0,0 +1,49 @@
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace DarkControls.Controls
{
public class ProgressBarEx : ProgressBar
{
public ProgressBarEx()
{
this.SetStyle(ControlStyles.UserPaint, true);
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
// None... Helps control the flicker.
}
protected override void OnPaint(PaintEventArgs e)
{
const int inset = 2; // A single inset value to control teh sizing of the inner rect.
using (Image offscreenImage = new Bitmap(this.Width, this.Height))
{
using (Graphics offscreen = Graphics.FromImage(offscreenImage))
{
offscreen.Clear(this.BackColor);
Rectangle rect = new Rectangle(0, 0, this.Width, this.Height);
offscreen.DrawRectangle(new Pen(Color.Silver, 2), rect);
//if (ProgressBarRenderer.IsSupported)
// ProgressBarRenderer.DrawHorizontalBar(offscreen, rect);
rect.Inflate(new Size(-inset, -inset)); // Deflate inner rect.
rect.Width = (int)(rect.Width * ((double)this.Value / this.Maximum));
if (rect.Width == 0) rect.Width = 1; // Can't draw rec with width of 0.
//LinearGradientBrush brush = new LinearGradientBrush(rect, this.BackColor, this.ForeColor, LinearGradientMode.Horizontal);
SolidBrush brush = new SolidBrush(this.ForeColor);
offscreen.FillRectangle(brush, inset, inset, rect.Width, rect.Height);
e.Graphics.DrawImage(offscreenImage, 0, 0);
}
}
}
}
}

View File

@ -0,0 +1,403 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Runtime.InteropServices;
using SystemMath = System.Math;
namespace DarkControls.Controls
{
/// <summary>
/// Static methods for transforming argb spaces and argb values.
/// </summary>
public static class SimpleColorTransforms
{
private static double tolerance
=> 0.000000000000001;
/// <summary>
/// Defines brightness levels.
/// </summary>
public enum Brightness
: byte
{
Bright = 255,
MediumBright = 210,
Medium = 142,
Dim = 98,
XDim = 50
}
/// <summary>
/// Defines alpha levels.
/// </summary>
public enum Alpha
: byte
{
Opaque = 255,
MediumHigh = 230,
Medium = 175,
MediumLow = 142,
Low = 109,
XLow = 45
}
/// <summary>
/// Defines hint alpha levels.
/// </summary>
public enum HintAlpha
: byte
{
Low = 64,
XLow = 48,
XxLow = 32,
XxxLow = 16
}
/// <summary>
/// Specifies a mode for argb transformations.
/// </summary>
public enum ColorTransformMode
: byte
{
Hsl,
Hsb
}
/// <summary>
/// Converts RGB to HSL. Alpha is ignored.
/// Output is: { H: [0, 360], S: [0, 1], L: [0, 1] }.
/// </summary>
/// <param name="color">The color to convert.</param>
public static double[] RgBtoHsl(Color color)
{
double h = 0D;
double s = 0D;
double l;
// normalize red, green, blue values
double r = color.R / 255D;
double g = color.G / 255D;
double b = color.B / 255D;
double max = SystemMath.Max(r, SystemMath.Max(g, b));
double min = SystemMath.Min(r, SystemMath.Min(g, b));
// hue
if (SystemMath.Abs(max - min) < SimpleColorTransforms.tolerance)
h = 0D; // undefined
else if ((SystemMath.Abs(max - r) < SimpleColorTransforms.tolerance)
&& (g >= b))
h = (60D * (g - b)) / (max - min);
else if ((SystemMath.Abs(max - r) < SimpleColorTransforms.tolerance)
&& (g < b))
h = ((60D * (g - b)) / (max - min)) + 360D;
else if (SystemMath.Abs(max - g) < SimpleColorTransforms.tolerance)
h = ((60D * (b - r)) / (max - min)) + 120D;
else if (SystemMath.Abs(max - b) < SimpleColorTransforms.tolerance)
h = ((60D * (r - g)) / (max - min)) + 240D;
// luminance
l = (max + min) / 2D;
// saturation
if ((SystemMath.Abs(l) < SimpleColorTransforms.tolerance)
|| (SystemMath.Abs(max - min) < SimpleColorTransforms.tolerance))
s = 0D;
else if ((0D < l)
&& (l <= .5D))
s = (max - min) / (max + min);
else if (l > .5D)
s = (max - min) / (2D - (max + min)); //(max-min > 0)?
return new[]
{
SystemMath.Max(0D, SystemMath.Min(360D, double.Parse($"{h:0.##}"))),
SystemMath.Max(0D, SystemMath.Min(1D, double.Parse($"{s:0.##}"))),
SystemMath.Max(0D, SystemMath.Min(1D, double.Parse($"{l:0.##}")))
};
}
/// <summary>
/// Converts HSL to RGB, with a specified output Alpha.
/// Arguments are limited to the defined range:
/// does not raise exceptions.
/// </summary>
/// <param name="h">Hue, must be in [0, 360].</param>
/// <param name="s">Saturation, must be in [0, 1].</param>
/// <param name="l">Luminance, must be in [0, 1].</param>
/// <param name="a">Output Alpha, must be in [0, 255].</param>
public static Color HsLtoRgb(double h, double s, double l, int a = 255)
{
h = SystemMath.Max(0D, SystemMath.Min(360D, h));
s = SystemMath.Max(0D, SystemMath.Min(1D, s));
l = SystemMath.Max(0D, SystemMath.Min(1D, l));
a = SystemMath.Max(0, SystemMath.Min(255, a));
// achromatic argb (gray scale)
if (SystemMath.Abs(s) < SimpleColorTransforms.tolerance)
{
return Color.FromArgb(
a,
SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{l * 255D:0.00}")))),
SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{l * 255D:0.00}")))),
SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{l * 255D:0.00}")))));
}
double q = l < .5D
? l * (1D + s)
: (l + s) - (l * s);
double p = (2D * l) - q;
double hk = h / 360D;
double[] T = new double[3];
T[0] = hk + (1D / 3D); // Tr
T[1] = hk; // Tb
T[2] = hk - (1D / 3D); // Tg
for (int i = 0; i < 3; i++)
{
if (T[i] < 0D)
T[i] += 1D;
if (T[i] > 1D)
T[i] -= 1D;
if ((T[i] * 6D) < 1D)
T[i] = p + ((q - p) * 6D * T[i]);
else if ((T[i] * 2D) < 1)
T[i] = q;
else if ((T[i] * 3D) < 2)
T[i] = p + ((q - p) * ((2D / 3D) - T[i]) * 6D);
else
T[i] = p;
}
return Color.FromArgb(
a,
SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{T[0] * 255D:0.00}")))),
SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{T[1] * 255D:0.00}")))),
SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{T[2] * 255D:0.00}")))));
}
/// <summary>
/// Converts RGB to HSB. Alpha is ignored.
/// Output is: { H: [0, 360], S: [0, 1], B: [0, 1] }.
/// </summary>
/// <param name="color">The color to convert.</param>
public static double[] RgBtoHsb(Color color)
{
// normalize red, green and blue values
double r = color.R / 255D;
double g = color.G / 255D;
double b = color.B / 255D;
// conversion start
double max = SystemMath.Max(r, SystemMath.Max(g, b));
double min = SystemMath.Min(r, SystemMath.Min(g, b));
double h = 0D;
if ((SystemMath.Abs(max - r) < SimpleColorTransforms.tolerance)
&& (g >= b))
h = (60D * (g - b)) / (max - min);
else if ((SystemMath.Abs(max - r) < SimpleColorTransforms.tolerance)
&& (g < b))
h = ((60D * (g - b)) / (max - min)) + 360D;
else if (SystemMath.Abs(max - g) < SimpleColorTransforms.tolerance)
h = ((60D * (b - r)) / (max - min)) + 120D;
else if (SystemMath.Abs(max - b) < SimpleColorTransforms.tolerance)
h = ((60D * (r - g)) / (max - min)) + 240D;
double s = SystemMath.Abs(max) < SimpleColorTransforms.tolerance
? 0D
: 1D - (min / max);
return new[]
{
SystemMath.Max(0D, SystemMath.Min(360D, h)),
SystemMath.Max(0D, SystemMath.Min(1D, s)),
SystemMath.Max(0D, SystemMath.Min(1D, max))
};
}
/// <summary>
/// Converts HSB to RGB, with a specified output Alpha.
/// Arguments are limited to the defined range:
/// does not raise exceptions.
/// </summary>
/// <param name="h">Hue, must be in [0, 360].</param>
/// <param name="s">Saturation, must be in [0, 1].</param>
/// <param name="b">Brightness, must be in [0, 1].</param>
/// <param name="a">Output Alpha, must be in [0, 255].</param>
public static Color HsBtoRgb(double h, double s, double b, int a = 255)
{
h = SystemMath.Max(0D, SystemMath.Min(360D, h));
s = SystemMath.Max(0D, SystemMath.Min(1D, s));
b = SystemMath.Max(0D, SystemMath.Min(1D, b));
a = SystemMath.Max(0, SystemMath.Min(255, a));
double r = 0D;
double g = 0D;
double bl = 0D;
if (SystemMath.Abs(s) < SimpleColorTransforms.tolerance)
r = g = bl = b;
else
{
// the argb wheel consists of 6 sectors. Figure out which sector
// you're in.
double sectorPos = h / 60D;
int sectorNumber = (int)SystemMath.Floor(sectorPos);
// get the fractional part of the sector
double fractionalSector = sectorPos - sectorNumber;
// calculate values for the three axes of the argb.
double p = b * (1D - s);
double q = b * (1D - (s * fractionalSector));
double t = b * (1D - (s * (1D - fractionalSector)));
// assign the fractional colors to r, g, and b based on the sector
// the angle is in.
switch (sectorNumber)
{
case 0:
r = b;
g = t;
bl = p;
break;
case 1:
r = q;
g = b;
bl = p;
break;
case 2:
r = p;
g = b;
bl = t;
break;
case 3:
r = p;
g = q;
bl = b;
break;
case 4:
r = t;
g = p;
bl = b;
break;
case 5:
r = b;
g = p;
bl = q;
break;
}
}
return Color.FromArgb(
a,
SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{r * 255D:0.00}")))),
SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{g * 255D:0.00}")))),
SystemMath.Max(0, SystemMath.Min(255, Convert.ToInt32(double.Parse($"{bl * 250D:0.00}")))));
}
/// <summary>
/// Multiplies the Color's Luminance or Brightness by the argument;
/// and optionally specifies the output Alpha.
/// </summary>
/// <param name="color">The color to transform.</param>
/// <param name="colorTransformMode">Transform mode.</param>
/// <param name="brightnessTransform">The transformation multiplier.</param>
/// <param name="outputAlpha">Can optionally specify the Alpha to directly
/// set on the output. If null, then the input <paramref name="color"/>
/// Alpha is used.</param>
public static Color TransformBrightness(
Color color,
ColorTransformMode colorTransformMode,
double brightnessTransform,
byte? outputAlpha = null)
{
double[] hsl = colorTransformMode == ColorTransformMode.Hsl
? SimpleColorTransforms.RgBtoHsl(color)
: SimpleColorTransforms.RgBtoHsb(color);
if ((SystemMath.Abs(hsl[2]) < SimpleColorTransforms.tolerance)
&& (brightnessTransform > 1D))
hsl[2] = brightnessTransform - 1D;
else
hsl[2] *= brightnessTransform;
return colorTransformMode == ColorTransformMode.Hsl
? SimpleColorTransforms.HsLtoRgb(hsl[0], hsl[1], hsl[2], outputAlpha ?? color.A)
: SimpleColorTransforms.HsBtoRgb(hsl[0], hsl[1], hsl[2], outputAlpha ?? color.A);
}
/// <summary>
/// Multiplies the Color's Saturation, and Luminance or Brightness by the argument;
/// and optionally specifies the output Alpha.
/// </summary>
/// <param name="color">The color to transform.</param>
/// <param name="colorTransformMode">Transform mode.</param>
/// <param name="saturationTransform">The transformation multiplier.</param>
/// <param name="brightnessTransform">The transformation multiplier.</param>
/// <param name="outputAlpha">Can optionally specify the Alpha to directly
/// set on the output. If null, then the input <paramref name="color"/>
/// Alpha is used.</param>
public static Color TransformSaturationAndBrightness(
Color color,
ColorTransformMode colorTransformMode,
double saturationTransform,
double brightnessTransform,
byte? outputAlpha = null)
{
double[] hsl = colorTransformMode == ColorTransformMode.Hsl
? SimpleColorTransforms.RgBtoHsl(color)
: SimpleColorTransforms.RgBtoHsb(color);
if ((SystemMath.Abs(hsl[1]) < SimpleColorTransforms.tolerance)
&& (saturationTransform > 1D))
hsl[1] = saturationTransform - 1D;
else
hsl[1] *= saturationTransform;
if ((SystemMath.Abs(hsl[2]) < SimpleColorTransforms.tolerance)
&& (brightnessTransform > 1D))
hsl[2] = brightnessTransform - 1D;
else
hsl[2] *= brightnessTransform;
return colorTransformMode == ColorTransformMode.Hsl
? SimpleColorTransforms.HsLtoRgb(hsl[0], hsl[1], hsl[2], outputAlpha ?? color.A)
: SimpleColorTransforms.HsBtoRgb(hsl[0], hsl[1], hsl[2], outputAlpha ?? color.A);
}
/// <summary>
/// Creates a new Color by combining R, G, and B from each Color, scaled by the Color's Alpha.
/// The R, G, B of each Color is scaled by the Color's Alpha. The R, G, B of both results is
/// then added together and divided by 2. The valuea are limited to [0, 255].
/// The Alpha of the output Color is specified; and is also limited to [0, 255]
/// (does not raise exceptions).
/// </summary>
/// <param name="color1">Combined by scaling RGB by the A.</param>
/// <param name="color2">Combined by scaling RGB by the A.</param>
/// <param name="outputAlpha">The Alpha of the output Color.</param>
public static Color AlphaCombine(Color color1, Color color2, byte outputAlpha)
{
double a1 = color1.A / 255D;
double a2 = color2.A / 255D;
return Color.FromArgb(
outputAlpha,
(byte)SystemMath.Max(0D, SystemMath.Min(255D, ((color1.R * a1) + (color2.R * a2)) * .5D)),
(byte)SystemMath.Max(0D, SystemMath.Min(255D, ((color1.G * a1) + (color2.G * a2)) * .5D)),
(byte)SystemMath.Max(0D, SystemMath.Min(255D, ((color1.B * a1) + (color2.B * a2)) * .5D)));
}
}
}

View File

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DarkControls.Controls
{
public class TransparentLabel : Label
{
protected override void WndProc(ref Message m)
{
const int WM_NCHITTEST = 0x0084;
const int HTTRANSPARENT = (-1);
if (m.Msg == WM_NCHITTEST)
{
m.Result = (IntPtr)HTTRANSPARENT;
}
else
{
base.WndProc(ref m);
}
}
}
}

View File

@ -0,0 +1,325 @@
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace DarkControls.Controls
{
/// <summary>
/// Button which represents the default close, minimize or maximize buttons of the windows 10 aero theme.
/// </summary>
[ToolboxItem(true)]
public class WindowsDefaultTitleBarButton : NoFocusCueBotton
{
/// <summary>
/// Represents the 3 possible types of the windows border buttons.
/// </summary>
public enum Type
{
Close,
Maximize,
Minimize
}
private Pen activeIconColorPen;
private Brush activeIconColorBrush;
private Brush activeColorBrush;
/// <summary>
/// The type which defines the buttons behaviour.
/// </summary>
[RefreshProperties(System.ComponentModel.RefreshProperties.All)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(true)]
[Category("Appearance")]
[Description("The type which defines the buttons behaviour.")]
public Type ButtonType { get; set; }
/// <summary>
/// The background color of the button when the mouse is inside the buttons bounds.
/// </summary>
[RefreshProperties(System.ComponentModel.RefreshProperties.All)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(true)]
[Category("Appearance")]
[Description("The background color of the button when the mouse is inside the buttons bounds.")]
public Color HoverColor { get; set; }
/// <summary>
/// The background color of the button when the button is clicked.
/// </summary>
[RefreshProperties(System.ComponentModel.RefreshProperties.All)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(true)]
[Category("Appearance")]
[Description("The background color of the button when the button is clicked.")]
public Color ClickColor { get; set; }
/// <summary>
/// The default color of the icon.
/// </summary>
[RefreshProperties(System.ComponentModel.RefreshProperties.All)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(true)]
[Category("Appearance")]
[Description("The default color of the icon.")]
public Color IconColor { get; set; }
/// <summary>
/// The color of the icon when the mouse is inside the buttons bounds.
/// </summary>
[RefreshProperties(System.ComponentModel.RefreshProperties.All)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(true)]
[Category("Appearance")]
[Description("The color of the icon when the mouse is inside the buttons bounds.")]
public Color HoverIconColor { get; set; }
/// <summary>
/// The color of the icon when the mouse is inside the buttons bounds.
/// </summary>
[RefreshProperties(System.ComponentModel.RefreshProperties.All)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(true)]
[Category("Appearance")]
[DefaultValue("2")]
[Description("The thickness of the lines making up the icon")]
public int IconLineThickness { get; set; }
/// <summary>
/// The color of the icon when the button is clicked.
/// </summary>
[RefreshProperties(System.ComponentModel.RefreshProperties.All)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(true)]
[Category("Appearance")]
[Description("The color of the icon when the button is clicked.")]
public Color ClickIconColor { get; set; }
/// <summary>
/// Property which returns the active background color of the button depending on if the button is clicked or hovered.
/// </summary>
///
[RefreshProperties(System.ComponentModel.RefreshProperties.All)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Browsable(true)]
public virtual Color ActiveColor
{
get
{
if (this.DesignMode == false)
{
if (this.Clicked)
return this.ClickColor;
if (this.Hovered)
return this.HoverColor;
return BackColor;
}
else
{
return this.HoverColor;
/* switch (this.ButtonType)
{
case Type.Close:
{
return Color.Red;
}
case Type.Maximize:
{
return Color.SkyBlue;
}
case Type.Minimize:
{
return Color.SkyBlue;
}
}*/
}
return Color.Empty;
}
}
/// <summary>
/// Property which returns the active color of the buttons icon depending on if the button is clicked or hovered.
/// </summary>
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[RefreshProperties(System.ComponentModel.RefreshProperties.All)]
[EditorBrowsable(EditorBrowsableState.Never)]
[Browsable(false)]
public virtual Color ActiveIconColor
{
get
{
if (this.DesignMode == false)
{
if (this.Clicked)
return this.ClickIconColor;
if (this.Hovered)
return this.HoverIconColor;
return IconColor;
}
else
{
return Color.Black;
}
}
}
/// <summary>
/// Property which indicates if the mouse is currently inside the bounds of the button.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
[Browsable(false)]
[DefaultValue(false)]
public bool Hovered { get; set; }
/// <summary>
/// Property which indicates if the left mouse button was pressed down inside the buttons bounds. Can be true before the click event is triggered.
/// </summary>
[EditorBrowsable(EditorBrowsableState.Never)]
[Browsable(false)]
[DefaultValue(false)]
public bool Clicked { get; set; }
public WindowsDefaultTitleBarButton() { }
protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseEnter(e);
Hovered = true;
}
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
Hovered = false;
}
protected override void OnMouseDown(MouseEventArgs mevent)
{
base.OnMouseDown(mevent);
Clicked = true;
}
protected override void OnMouseUp(MouseEventArgs mevent)
{
base.OnMouseUp(mevent);
Clicked = false;
}
protected override void OnClick(EventArgs e)
{
if (ButtonType == Type.Close)
this.FindForm()?.Close();
else if (ButtonType == Type.Maximize)
this.FindForm().WindowState = this.FindForm().WindowState == FormWindowState.Maximized ? FormWindowState.Normal : FormWindowState.Maximized;
else
this.FindForm().WindowState = FormWindowState.Minimized;
base.OnClick(e);
}
protected override void OnPaint(PaintEventArgs pevent)
{
System.Diagnostics.Trace.WriteLine(pevent.ClipRectangle.ToString());
activeColorBrush?.Dispose();
activeColorBrush = new SolidBrush(ActiveColor);
pevent.Graphics.FillRectangle(new SolidBrush(ActiveColor), pevent.ClipRectangle);
pevent.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
activeIconColorBrush?.Dispose();
activeIconColorPen?.Dispose();
activeIconColorBrush = new SolidBrush(ActiveIconColor);
activeIconColorPen = new Pen(activeIconColorBrush, IconLineThickness);
if (ButtonType == Type.Close)
{
drawCloseIcon(pevent, new Rectangle(0, 0, this.Width, this.Height));
}
else if (ButtonType == Type.Maximize)
{
drawMaximizeIcon(pevent, new Rectangle(0, 0, this.Width, this.Height));
}
else
{
drawMinimizeIcon(pevent, new Rectangle(0, 0, this.Width, this.Height));
}
}
protected virtual void drawCloseIcon(PaintEventArgs e, Rectangle drawRect)
{
int size = 12;
e.Graphics.DrawLine(
activeIconColorPen,
drawRect.X + drawRect.Width / 2 - (size / 2),
drawRect.Y + drawRect.Height / 2 - (size / 2),
drawRect.X + drawRect.Width / 2 + (size / 2),
drawRect.Y + drawRect.Height / 2 + (size / 2));
e.Graphics.DrawLine(
activeIconColorPen,
drawRect.X + drawRect.Width / 2 - (size / 2),
drawRect.Y + drawRect.Height / 2 + (size / 2),
drawRect.X + drawRect.Width / 2 + (size / 2),
drawRect.Y + drawRect.Height / 2 - (size / 2));
}
protected virtual void drawMaximizeIcon(PaintEventArgs e, Rectangle drawRect)
{
if (this.FindForm().WindowState == FormWindowState.Normal)
{
int size = 10;
Rectangle rect = new Rectangle(
drawRect.X + drawRect.Width / 2 - (size / 2),
drawRect.Y + drawRect.Height / 2 - (size / 2),
size, size);
Rectangle r2 = new Rectangle(rect.X, rect.Y, rect.Width, 2);
e.Graphics.DrawRectangle(activeIconColorPen, rect);
e.Graphics.FillRectangle(new SolidBrush(activeIconColorPen.Color), r2);
}
else if (this.FindForm().WindowState == FormWindowState.Maximized)
{
e.Graphics.DrawRectangle(
activeIconColorPen,
new Rectangle(
drawRect.X + drawRect.Width / 2 - 3,
drawRect.Y + drawRect.Height / 2 - 5,
8, 8));
Rectangle rect = new Rectangle(
drawRect.X + drawRect.Width / 2 - 5,
drawRect.Y + drawRect.Height / 2 - 3,
8, 8);
e.Graphics.FillRectangle(activeIconColorBrush, rect);
e.Graphics.DrawRectangle(activeIconColorPen, rect);
}
}
protected virtual void drawMinimizeIcon(PaintEventArgs e, Rectangle drawRect)
{
int lower = 3;
e.Graphics.DrawLine(
activeIconColorPen,
drawRect.X + drawRect.Width / 2 - 5,
drawRect.Y + drawRect.Height / 2 + lower,
drawRect.X + drawRect.Width / 2 + 5,
drawRect.Y + drawRect.Height / 2 + lower);
}
}
}

View File

@ -0,0 +1,140 @@
<?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>{66C94ACB-63C7-42A3-9D83-A3801CED4F1C}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>DarkControls</RootNamespace>
<AssemblyName>DarkControls</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<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' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Optimize>true</Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Drawing.Design" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Controls\AppIcon.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\CloseButton.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\CustomCheckedListBox.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\CustomScrollBar.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\DarkButton.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\DarkCheckBox.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\DarkSelectFileButton.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\DarkTextBox.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\FlatScrollBar.cs" />
<Compile Include="Controls\MaximizeButton.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\MinimizeButton.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\NoFocusCueBotton.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\ProgressBarEx.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\SimpleColorTransforms.cs" />
<Compile Include="Controls\TransparentLabel.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\WindowsDefaultTitleBarButton.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="BlankForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="BlankForm.Designer.cs" />
<Compile Include="Controls\CustomStatusStrip.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Utils.cs" />
</ItemGroup>
<ItemGroup>
<None Include="icons8-crossed-axes-100.png" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="BlankForm.resx" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Content Include="selectFileBtn.Image.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View 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("Lib")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Lib")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[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("66c94acb-63c7-42a3-9d83-a3801ced4f1c")]
// 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")]

View File

@ -0,0 +1,103 @@
//------------------------------------------------------------------------------
// <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 DarkControls.Properties {
using System;
/// <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", "17.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 (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DarkControls.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;
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap appIcon1_AppIconImage {
get {
object obj = ResourceManager.GetObject("appIcon1.AppIconImage", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap appIcon1_Image {
get {
object obj = ResourceManager.GetObject("appIcon1.Image", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap icons8_crossed_axes_100 {
get {
object obj = ResourceManager.GetObject("icons8_crossed_axes_100", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap selectFileBtn_Image {
get {
object obj = ResourceManager.GetObject("selectFileBtn_Image", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@ -0,0 +1,245 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="appIcon1.AppIconImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<data name="appIcon1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
EAAACxABrSO9dQAABIlJREFUSEvtlWtQlFUYx18rtZomGiYy+8ClCSEucoeFBXZZYVlgMXZhFZaQ5bYS
SiJBBWgQ2EVFhEAEEeJeiODUGA6Iw5QzqJM4KOQ0UuFMTd/41DTFUP+nc3aOUDAI2NQnf1/2Of///3nO
nnffd1/pIf87NgX0vChXZC3ZJbz4Ohwd9uCIfSEm7HLQJhGtE9ZSmMczPOuQg6O8VzgrY5dKjztno9M1
n8gxG8NOu8necTe6nLLR72KgDSI2j0spbeCeJcOzrIf38hl8logtj3smsgKLiDzMGNDkYqOQJbcMXPTI
wF6xnIdrbpm4KJaSRoONvJfPcE9HlpCXYqOgp4LTEBBows1ANsBspvXCkoLS8YI8HdP+JjIIaR6ucY9n
hCSZfWh9IPuCfJY8FTJrDZ4WliSFGfFejBlDKhN+lBtxR5mGEoPLwqVTpJK9MhnjYRnoZ5+n/vFbltIj
XFNloo9neFY4Ep+hTEWJPAlT20z4WZuFIb6XFKpHw563iGo6QbFpuOvuDifRI4UbyDYqEd9FGMkQqafw
6CTMCGserkUlIIJnWHZKm0K2wpKcnbElLhN3W9uJ8t4kCmZ7WQx1NKpLS4iaOucQn4KZEBm8uR6XgDva
HUgzxJEPq8f0iRjUJ6DZ0sSIT8BprsUZcINnYg1k0iVgintBfuS504SZ7k+IDhUTRWhRbWm6h0aFmvfZ
STva/0ByEqb1EThg1GE2RYdzRj2RUY8wnkvUYzApDlXJOjTu1GOIazuYxzOWbDx+16tR8moyfvq0h+hD
NlPNZvPcEnQKVFcVEJ39eG523y6iXZEoTtUhJv0VfJARi6tmA1nxXNp2zJm2Y5jXGWpYZ2hx1cQyPMt6
ivIyifjJKtksXciiky0mSY6aBhas2keU4AuFkKVsLQ7kRGMwN5paX4tGL9fM4WSVE4XR7BgctIQYRi+E
HmH9texkKUHLnGwxe5U4WaBmP3QkNgvJQr4a3+dr8CWvc9mtXhiJH5j2rcUUFMViE+/NVYgbZLUUqhBW
ym57sZQOqtBWvA2f8bpUQc8Uq3C5RE1vM62LefM3ErHHhveK5YNREYqT5UoM8JpvdkiB2xUK/HpGoke5
VqbEULkCdbz+11TKUdUQRlQXCLtjMjxRGYTJwyEoPByM/cy7VcP+yo4HkD3PHAvCUdH2YNTL0FIrwy8n
QhDzkRwedQG4USPDO8KWWF1RJ6PrdXK41gdDe4JnA9Ak7LXR6of20374ptEXBT0yWDf74usm/4XN7sG0
ihZfXGv0IatTvihkPbfb/NAi7NXR7YH6XleMdXhQ2YiCHuvywkS7N0qFvYQOb1R0eeImSbSuw4vKzrhg
vHsraoV9f/pcsL/XH9c6pueUfYF4rt8NE71bF56z5TjrgfJzbhj/3Iee7Zn8TcVmjPU5I0fYy/OFM3ou
+P357mD7bOKAKybPOy+9jMtx/mWUD7jg1kjzbNIFHxxnvStf2kFH8hxxxOgVW4wOb0GekFfNsBPe4L2X
HHH5ktPCm+e+XN9MT15xwCaxXDNfvQSbyb+9Ux/yHyJJfwHAIJQLdFWq8gAAAABJRU5ErkJggg==
</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="icons8_crossed_axes_100" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\icons8-crossed-axes-100.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="selectFileBtn_Image" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\selectFileBtn.Image.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

26
DarkControls/Utils.cs Normal file
View File

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace DarkControls
{
public class Utils
{
[DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")]
public static extern IntPtr CreateRoundRectRgn
(
int nLeftRect, // x-coordinate of upper-left corner
int nTopRect, // y-coordinate of upper-left corner
int nRightRect, // x-coordinate of lower-right corner
int nBottomRect, // y-coordinate of lower-right corner
int nWidthEllipse, // width of ellipse
int nHeightEllipse // height of ellipse
);
public static int WM_NCHITTEST = 0x84;
public static int HT_CAPTION = 0x2;
}
}

View File

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 B

View File

@ -3,39 +3,55 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.4.33205.214
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KsDumperClient", "KsDumperClient\KsDumperClient.csproj", "{7881B99D-0B5A-44E7-AF34-80A0ECFFD5DB}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KsDumper11", "KsDumper11\KsDumper11.csproj", "{7881B99D-0B5A-44E7-AF34-80A0ECFFD5DB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DarkControls", "..\DarkControls\DarkControls\DarkControls.csproj", "{66C94ACB-63C7-42A3-9D83-A3801CED4F1C}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DarkControls", "DarkControls\DarkControls.csproj", "{66C94ACB-63C7-42A3-9D83-A3801CED4F1C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{79B0AE0A-4D49-4102-9971-04F5375BF272}"
ProjectSection(SolutionItems) = preProject
.gitignore = .gitignore
README.md = README.md
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{7881B99D-0B5A-44E7-AF34-80A0ECFFD5DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7881B99D-0B5A-44E7-AF34-80A0ECFFD5DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7881B99D-0B5A-44E7-AF34-80A0ECFFD5DB}.Debug|x64.ActiveCfg = Debug|x64
{7881B99D-0B5A-44E7-AF34-80A0ECFFD5DB}.Debug|x64.Build.0 = Debug|x64
{7881B99D-0B5A-44E7-AF34-80A0ECFFD5DB}.Debug|x86.ActiveCfg = Debug|x86
{7881B99D-0B5A-44E7-AF34-80A0ECFFD5DB}.Debug|x86.Build.0 = Debug|x86
{7881B99D-0B5A-44E7-AF34-80A0ECFFD5DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7881B99D-0B5A-44E7-AF34-80A0ECFFD5DB}.Release|Any CPU.Build.0 = Release|Any CPU
{7881B99D-0B5A-44E7-AF34-80A0ECFFD5DB}.Release|x64.ActiveCfg = Release|x64
{7881B99D-0B5A-44E7-AF34-80A0ECFFD5DB}.Release|x64.Build.0 = Release|x64
{7881B99D-0B5A-44E7-AF34-80A0ECFFD5DB}.Release|x86.ActiveCfg = Release|x86
{7881B99D-0B5A-44E7-AF34-80A0ECFFD5DB}.Release|x86.Build.0 = Release|x86
{66C94ACB-63C7-42A3-9D83-A3801CED4F1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{66C94ACB-63C7-42A3-9D83-A3801CED4F1C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{66C94ACB-63C7-42A3-9D83-A3801CED4F1C}.Debug|x64.ActiveCfg = Debug|x64
{66C94ACB-63C7-42A3-9D83-A3801CED4F1C}.Debug|x64.Build.0 = Debug|x64
{66C94ACB-63C7-42A3-9D83-A3801CED4F1C}.Debug|x86.ActiveCfg = Debug|Any CPU
{66C94ACB-63C7-42A3-9D83-A3801CED4F1C}.Debug|x86.Build.0 = Debug|Any CPU
{66C94ACB-63C7-42A3-9D83-A3801CED4F1C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{66C94ACB-63C7-42A3-9D83-A3801CED4F1C}.Release|Any CPU.Build.0 = Release|Any CPU
{66C94ACB-63C7-42A3-9D83-A3801CED4F1C}.Release|x64.ActiveCfg = Release|x64
{66C94ACB-63C7-42A3-9D83-A3801CED4F1C}.Release|x64.Build.0 = Release|x64
{66C94ACB-63C7-42A3-9D83-A3801CED4F1C}.Release|x86.ActiveCfg = Release|Any CPU
{66C94ACB-63C7-42A3-9D83-A3801CED4F1C}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B97C5D1A-00B8-411D-9716-A3805DA64FD6}
SolutionGuid = {EBFFF900-7478-45AA-95F6-F453BC9C3035}
EndGlobalSection
EndGlobal

View File

@ -1,9 +1,9 @@
using System;
using System.IO;
using System.Runtime.InteropServices;
using KsDumperClient.Utility;
using KsDumper11.Utility;
namespace KsDumperClient.Driver
namespace KsDumper11.Driver
{
// Token: 0x02000014 RID: 20
public class DriverInterface

View File

@ -1,7 +1,7 @@
using System;
using KsDumperClient.Utility;
using KsDumper11.Utility;
namespace KsDumperClient.Driver
namespace KsDumper11.Driver
{
// Token: 0x02000015 RID: 21
public static class Operations

View File

@ -1,4 +1,4 @@
namespace KsDumperClient
namespace KsDumper11
{
// Token: 0x02000002 RID: 2
public partial class Dumper : global::System.Windows.Forms.Form
@ -35,7 +35,7 @@
this.refreshBtn = new System.Windows.Forms.Button();
this.autoRefreshCheckBox = new DarkControls.Controls.DarkCheckBox();
this.hideSystemProcessBtn = new System.Windows.Forms.Button();
this.processList = new KsDumperClient.Utility.ProcessListView();
this.processList = new KsDumper11.Utility.ProcessListView();
this.PIDHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.NameHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.PathHeader = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
@ -128,9 +128,8 @@
//
// appIcon1
//
this.appIcon1.AppIconImage = global::KsDumperClient.Properties.Resources.icons8_crossed_axes_100;
this.appIcon1.AppIconImage = global::KsDumper11.Properties.Resources.icons8_crossed_axes_100;
this.appIcon1.DragForm = this;
this.appIcon1.Image = ((System.Drawing.Image)(resources.GetObject("appIcon1.Image")));
this.appIcon1.Location = new System.Drawing.Point(5, 4);
this.appIcon1.Name = "appIcon1";
this.appIcon1.Scale = 3.5F;
@ -315,7 +314,7 @@
private global::System.ComponentModel.IContainer components = null;
// Token: 0x04000013 RID: 19
private global::KsDumperClient.Utility.ProcessListView processList;
private global::KsDumper11.Utility.ProcessListView processList;
// Token: 0x04000014 RID: 20
private global::System.Windows.Forms.ColumnHeader PIDHeader;

View File

@ -8,11 +8,11 @@ using System.Threading.Tasks;
using System.Windows.Forms;
using DarkControls;
using DarkControls.Controls;
using KsDumperClient.Driver;
using KsDumperClient.PE;
using KsDumperClient.Utility;
using KsDumper11.Driver;
using KsDumper11.PE;
using KsDumper11.Utility;
namespace KsDumperClient
namespace KsDumper11
{
// Token: 0x02000002 RID: 2
public partial class Dumper : Form

View File

@ -6,8 +6,8 @@
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{7881B99D-0B5A-44E7-AF34-80A0ECFFD5DB}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>KsDumperClient</RootNamespace>
<AssemblyName>KsDumperClient</AssemblyName>
<RootNamespace>KsDumper11</RootNamespace>
<AssemblyName>KsDumper11</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
@ -154,7 +154,6 @@
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include=".gitignore" />
<Content Include="Driver\drv64.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>

View File

@ -1,9 +1,9 @@
using System.IO;
using System.Runtime.InteropServices;
using static KsDumperClient.PE.NativePEStructs;
using static KsDumper11.PE.NativePEStructs;
namespace KsDumperClient.PE
namespace KsDumper11.PE
{
public class PE32File : PEFile
{

View File

@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using static KsDumperClient.PE.NativePEStructs;
using static KsDumper11.PE.NativePEStructs;
namespace KsDumperClient.PE
namespace KsDumper11.PE
{
public class PE32Header
{

View File

@ -1,9 +1,9 @@
using System.IO;
using System.Runtime.InteropServices;
using static KsDumperClient.PE.NativePEStructs;
using static KsDumper11.PE.NativePEStructs;
namespace KsDumperClient.PE
namespace KsDumper11.PE
{
public class PE64File : PEFile
{

View File

@ -1,9 +1,9 @@
using System.IO;
using System.Linq;
using static KsDumperClient.PE.NativePEStructs;
using static KsDumper11.PE.NativePEStructs;
namespace KsDumperClient.PE
namespace KsDumper11.PE
{
public class PE64Header
{

View File

@ -1,8 +1,8 @@
using System.IO;
using static KsDumperClient.PE.NativePEStructs;
using static KsDumper11.PE.NativePEStructs;
namespace KsDumperClient.PE
namespace KsDumper11.PE
{
public class DOSHeader
{

View File

@ -1,7 +1,7 @@
using System;
using System.Runtime.InteropServices;
namespace KsDumperClient.PE
namespace KsDumper11.PE
{
public static class NativePEStructs
{

View File

@ -2,7 +2,7 @@
using System.IO;
using System.Linq;
namespace KsDumperClient.PE
namespace KsDumper11.PE
{
public abstract class PEFile
{

View File

@ -1,8 +1,8 @@
using System.IO;
using static KsDumperClient.PE.NativePEStructs;
using static KsDumper11.PE.NativePEStructs;
namespace KsDumperClient.PE
namespace KsDumper11.PE
{
public class PESection
{

View File

@ -1,11 +1,11 @@
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using KsDumperClient.Driver;
using KsDumperClient.PE;
using KsDumperClient.Utility;
using KsDumper11.Driver;
using KsDumper11.PE;
using KsDumper11.Utility;
namespace KsDumperClient
namespace KsDumper11
{
// Token: 0x02000003 RID: 3
public class ProcessDumper

View File

@ -3,10 +3,10 @@ using System.Diagnostics;
using System.IO;
using System.Runtime.CompilerServices;
using System.Text;
using KsDumperClient.Driver;
using KsDumperClient.Utility;
using KsDumper11.Driver;
using KsDumper11.Utility;
namespace KsDumperClient
namespace KsDumper11
{
// Token: 0x02000004 RID: 4
public class ProcessSummary

View File

@ -3,9 +3,9 @@ using System.Diagnostics;
using System.IO;
using System.Runtime.CompilerServices;
using System.Windows.Forms;
using KsDumperClient.Driver;
using KsDumper11.Driver;
namespace KsDumperClient
namespace KsDumper11
{
// Token: 0x02000005 RID: 5
internal static class Program

View File

@ -8,7 +8,7 @@
// </auto-generated>
//------------------------------------------------------------------------------
namespace KsDumperClient.Properties {
namespace KsDumper11.Properties {
using System;
@ -39,7 +39,7 @@ namespace KsDumperClient.Properties {
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("KsDumperClient.Properties.Resources", typeof(Resources).Assembly);
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("KsDumper11.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;

View File

@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <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 KsDumper11.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.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;
}
}
}
}

View File

@ -3,7 +3,7 @@ using System.Diagnostics;
using System.Runtime.CompilerServices;
using System.Threading;
namespace KsDumperClient.Utility
namespace KsDumper11.Utility
{
// Token: 0x02000009 RID: 9
public static class Logger

View File

@ -1,7 +1,7 @@
using System;
using System.Runtime.InteropServices;
namespace KsDumperClient.Utility
namespace KsDumper11.Utility
{
// Token: 0x0200000A RID: 10
public static class MarshalUtility

View File

@ -7,7 +7,7 @@ using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace KsDumperClient.Utility
namespace KsDumper11.Utility
{
// Token: 0x0200000B RID: 11
public class ProcessListView : ListView

View File

@ -3,7 +3,7 @@ using System.IO;
using System.Runtime.InteropServices;
using System.Text;
namespace KsDumperClient.Utility
namespace KsDumper11.Utility
{
// Token: 0x02000008 RID: 8
public static class WinApi

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -1,26 +0,0 @@
using System;
using System.CodeDom.Compiler;
using System.Configuration;
using System.Runtime.CompilerServices;
namespace KsDumperClient.Properties
{
// Token: 0x02000007 RID: 7
[CompilerGenerated]
[GeneratedCode("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0")]
internal sealed partial class Settings : ApplicationSettingsBase
{
// Token: 0x1700000C RID: 12
// (get) Token: 0x06000052 RID: 82 RVA: 0x000044A8 File Offset: 0x000026A8
public static Settings Default
{
get
{
return Settings.defaultInstance;
}
}
// Token: 0x04000035 RID: 53
private static Settings defaultInstance = (Settings)SettingsBase.Synchronized(new Settings());
}
}

View File

@ -1 +1,51 @@
# KsDumper-11
# KsDumper
![Demo](https://i.imgur.com/6XyMDxa.gif)
^New Demo gif comming soon
## Features
- Auto dumping of selected exe.
- Auto Refresh (every 100ms)
- Suspend, resume, kill process
- Dump any process main module using a kernel driver (both x86 and x64)
- Rebuild PE32/PE64 header and sections
- Works on protected system processes & processes with stripped handles (anti-cheats)
- Works on WINDOWS 11, it doesnt crash anymore!
![Dev Channel Insider Build Win 11 Ksdumper](https://cdn.discordapp.com/attachments/1022996250037076047/1066526468831723590/image.png)
**Note**: Import table isn't rebuilt.
## Usage
The old way of loading the unsigned ksDumper.sys kernel driver was to use the capcom exploit to map it, this got patched in windows 11.
This one loads the driver with Kernel Driver Utility, or KDU for short.
I could not get the main fork of the program to work when being built from source.
This one does though.
https://github.com/morelli690/KDU_kernel_bypass_/blob/master/Bin/kdu.exe
All driver loading is now automated, i plan on putting in a splash screen till the driver loads.
For now, the client wont open until the driver has been loaded, if it fails, it exits.
I tried to build a logger to output kdu's console output to a file, however it writes black always. Known issue
**Note**: The driver stays loaded until you reboot, so if you close KsDumperClient.exe, you can just reopen it !
**Note2**: Even though it can dump both x86 & x64 processes, this has to run on x64 Windows.
## Disclaimer
This project has been made available for informational and educational purposes only.
The driver source is not included because i couldnt ever get it to compile on my system. The source can be found on the original reop.
Considering the nature of this project, it is highly recommended to run it in a `Virtual Environment`. I am not responsible for any crash or damage that could happen to your system.
**Important**: This tool makes no attempt at hiding itself. If you target protected games, the anti-cheat might flag this as a cheat and ban you after a while. Use a `Virtual Environment` !
## References
- https://github.com/hfiref0x/KDU
- https://github.com/morelli690/KDU_kernel_bypass_/blob/master/Bin/kdu.exe
- https://github.com/not-wlan/drvmap
- https://github.com/Zer0Mem0ry/KernelBhop
- https://github.com/NtQuery/Scylla/
- http://terminus.rewolf.pl/terminus/
- https://www.unknowncheats.me/
## Compile Yourself
- Requires Visual Studio 2022
- Requires .NET 4.8