diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7964536 --- /dev/null +++ b/.gitignore @@ -0,0 +1,189 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +x64/ +build/ +bld/ +[Bb]in/ +[Oo]bj/ + +# Roslyn cache directories +*.ide/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +#NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding addin-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +## TODO: Comment the next line if you want to checkin your +## web deploy settings but do note that will include unencrypted +## passwords +#*.pubxml + +# NuGet Packages Directory +packages/* +## TODO: If the tool you use requires repositories.config +## uncomment the next line +#!packages/repositories.config + +# Enable "build/" folder in the NuGet Packages folder since +# NuGet packages use it for MSBuild targets. +# This line needs to be after the ignore of the build folder +# (and the packages folder if the line above has been uncommented) +!packages/build/ + +# Windows Azure Build Output +csx/ +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# LightSwitch generated files +GeneratedArtifacts/ +_Pvt_Extensions/ +ModelManifest.xml \ No newline at end of file diff --git a/MangaColor/MangaColor.sln b/MangaColor/MangaColor.sln new file mode 100644 index 0000000..b758122 --- /dev/null +++ b/MangaColor/MangaColor.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.31101.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MangaColor", "MangaColor\MangaColor.csproj", "{4F2A4383-A018-4EE3-AC7C-8836307467AF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4F2A4383-A018-4EE3-AC7C-8836307467AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4F2A4383-A018-4EE3-AC7C-8836307467AF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4F2A4383-A018-4EE3-AC7C-8836307467AF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4F2A4383-A018-4EE3-AC7C-8836307467AF}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/MangaColor/MangaColor/Fmark.Designer.cs b/MangaColor/MangaColor/Fmark.Designer.cs new file mode 100644 index 0000000..74851e6 --- /dev/null +++ b/MangaColor/MangaColor/Fmark.Designer.cs @@ -0,0 +1,70 @@ +namespace MangaColor2 +{ + partial class Fmark + { + /// + /// Variable del diseñador requerida. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Limpiar los recursos que se estén utilizando. + /// + /// true si los recursos administrados se deben eliminar; false en caso contrario, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Código generado por el Diseñador de Windows Forms + + /// + /// Método necesario para admitir el Diseñador. No se puede modificar + /// el contenido del método con el editor de código. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Fmark)); + this.cpanel = new System.Windows.Forms.Panel(); + this.SuspendLayout(); + // + // cpanel + // + this.cpanel.Location = new System.Drawing.Point(23, 0); + this.cpanel.Name = "cpanel"; + this.cpanel.Size = new System.Drawing.Size(20, 10); + this.cpanel.TabIndex = 0; + // + // Fmark + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.ClientSize = new System.Drawing.Size(105, 24); + this.Controls.Add(this.cpanel); + this.Cursor = System.Windows.Forms.Cursors.Default; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Fmark"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Text = "Fmark"; + this.TransparencyKey = System.Drawing.Color.White; + this.Paint += new System.Windows.Forms.PaintEventHandler(this.Fmark_Paint); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel cpanel; + } +} \ No newline at end of file diff --git a/MangaColor/MangaColor/Fmark.cs b/MangaColor/MangaColor/Fmark.cs new file mode 100644 index 0000000..f47f9f7 --- /dev/null +++ b/MangaColor/MangaColor/Fmark.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using XWolf.Aero; + +namespace MangaColor2 +{ + public partial class Fmark : Form + { + public string HTML; + private Font fnt = new Font("SmallFont", 7); + private Brush fntw = new SolidBrush(Color.WhiteSmoke); + private Brush fntb = new SolidBrush(Color.Black); + + public Fmark() + { + InitializeComponent(); + TopMost = true; + } + + public Color Color + { + set + { + cpanel.BackColor = value; + } + } + + private void Fmark_Paint(object sender, PaintEventArgs e) + { + e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit; + int sz = 23; + int szh = 15; + e.Graphics.DrawString(HTML, fnt, fntw, sz, szh); + e.Graphics.DrawString(HTML, fnt, fntw, sz+2, szh); + e.Graphics.DrawString(HTML, fnt, fntw, sz+1, szh-1); + e.Graphics.DrawString(HTML, fnt, fntw, sz + 1, szh + 1); + e.Graphics.DrawString(HTML, fnt, fntb, sz + 1, szh); + } + } +} diff --git a/MangaColor/MangaColor/Fmark.resx b/MangaColor/MangaColor/Fmark.resx new file mode 100644 index 0000000..c28a2c7 --- /dev/null +++ b/MangaColor/MangaColor/Fmark.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAIAAAAmdTLBAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRy + oQAAAEdJREFUOE9j+I8XMDAwEFAwqh9fCAxo+AEthwA8LiQUveTFP6aduFwBdyMWBtzZRClC9iQJ9tMw + /Q5c+COH3Gj+xZtBKYx/AOVWopYTTKNKAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/MangaColor/MangaColor/Form1.Designer.cs b/MangaColor/MangaColor/Form1.Designer.cs new file mode 100644 index 0000000..2b9eb0d --- /dev/null +++ b/MangaColor/MangaColor/Form1.Designer.cs @@ -0,0 +1,192 @@ +namespace MangaColor2 +{ + partial class Form1 + { + /// + /// Variable del diseñador requerida. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Limpiar los recursos que se estén utilizando. + /// + /// true si los recursos administrados se deben eliminar; false en caso contrario, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Código generado por el Diseñador de Windows Forms + + /// + /// Método necesario para admitir el Diseñador. No se puede modificar + /// el contenido del método con el editor de código. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.t = new System.Windows.Forms.Timer(this.components); + this.panel = new System.Windows.Forms.Panel(); + this.lb_a = new System.Windows.Forms.Label(); + this.lbHint = new System.Windows.Forms.Label(); + this.lb_b = new System.Windows.Forms.Label(); + this.lb_g = new System.Windows.Forms.Label(); + this.lb_r = new System.Windows.Forms.Label(); + this.lb_cs = new System.Windows.Forms.Label(); + this.lb_html2 = new System.Windows.Forms.Label(); + this.lb_html = new System.Windows.Forms.Label(); + this.cpanel = new System.Windows.Forms.Panel(); + this.panel.SuspendLayout(); + this.SuspendLayout(); + // + // t + // + this.t.Enabled = true; + this.t.Interval = 10; + this.t.Tick += new System.EventHandler(this.t_Tick); + // + // panel + // + this.panel.Controls.Add(this.lb_a); + this.panel.Controls.Add(this.lbHint); + this.panel.Controls.Add(this.lb_b); + this.panel.Controls.Add(this.lb_g); + this.panel.Controls.Add(this.lb_r); + this.panel.Controls.Add(this.lb_cs); + this.panel.Controls.Add(this.lb_html2); + this.panel.Controls.Add(this.lb_html); + this.panel.Controls.Add(this.cpanel); + this.panel.Location = new System.Drawing.Point(147, 0); + this.panel.Name = "panel"; + this.panel.Size = new System.Drawing.Size(273, 141); + this.panel.TabIndex = 0; + // + // lb_a + // + this.lb_a.AutoSize = true; + this.lb_a.Font = new System.Drawing.Font("Lucida Console", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lb_a.Location = new System.Drawing.Point(88, 3); + this.lb_a.Name = "lb_a"; + this.lb_a.Size = new System.Drawing.Size(55, 13); + this.lb_a.TabIndex = 8; + this.lb_a.Text = "label1"; + // + // lbHint + // + this.lbHint.Location = new System.Drawing.Point(3, 107); + this.lbHint.Name = "lbHint"; + this.lbHint.Size = new System.Drawing.Size(267, 34); + this.lbHint.TabIndex = 4; + this.lbHint.Text = "label1"; + this.lbHint.TextAlign = System.Drawing.ContentAlignment.BottomRight; + // + // lb_b + // + this.lb_b.AutoSize = true; + this.lb_b.Font = new System.Drawing.Font("Lucida Console", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lb_b.Location = new System.Drawing.Point(88, 48); + this.lb_b.Name = "lb_b"; + this.lb_b.Size = new System.Drawing.Size(55, 13); + this.lb_b.TabIndex = 7; + this.lb_b.Text = "label1"; + // + // lb_g + // + this.lb_g.AutoSize = true; + this.lb_g.Font = new System.Drawing.Font("Lucida Console", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lb_g.Location = new System.Drawing.Point(88, 33); + this.lb_g.Name = "lb_g"; + this.lb_g.Size = new System.Drawing.Size(55, 13); + this.lb_g.TabIndex = 6; + this.lb_g.Text = "label1"; + // + // lb_r + // + this.lb_r.AutoSize = true; + this.lb_r.Font = new System.Drawing.Font("Lucida Console", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lb_r.Location = new System.Drawing.Point(88, 18); + this.lb_r.Name = "lb_r"; + this.lb_r.Size = new System.Drawing.Size(55, 13); + this.lb_r.TabIndex = 5; + this.lb_r.Text = "label1"; + // + // lb_cs + // + this.lb_cs.AutoSize = true; + this.lb_cs.Font = new System.Drawing.Font("Lucida Console", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lb_cs.Location = new System.Drawing.Point(3, 94); + this.lb_cs.Name = "lb_cs"; + this.lb_cs.Size = new System.Drawing.Size(55, 13); + this.lb_cs.TabIndex = 3; + this.lb_cs.Text = "label1"; + // + // lb_html2 + // + this.lb_html2.AutoSize = true; + this.lb_html2.Font = new System.Drawing.Font("Lucida Console", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lb_html2.Location = new System.Drawing.Point(3, 79); + this.lb_html2.Name = "lb_html2"; + this.lb_html2.Size = new System.Drawing.Size(55, 13); + this.lb_html2.TabIndex = 2; + this.lb_html2.Text = "label1"; + // + // lb_html + // + this.lb_html.AutoSize = true; + this.lb_html.Font = new System.Drawing.Font("Lucida Console", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lb_html.Location = new System.Drawing.Point(3, 64); + this.lb_html.Name = "lb_html"; + this.lb_html.Size = new System.Drawing.Size(55, 13); + this.lb_html.TabIndex = 1; + this.lb_html.Text = "label1"; + // + // cpanel + // + this.cpanel.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.cpanel.Location = new System.Drawing.Point(3, 3); + this.cpanel.Name = "cpanel"; + this.cpanel.Size = new System.Drawing.Size(79, 58); + this.cpanel.TabIndex = 0; + this.cpanel.DoubleClick += new System.EventHandler(this.cpanel_DoubleClick); + // + // Form1 + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(556, 168); + this.Controls.Add(this.panel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "Form1"; + this.Text = "MangaColor2 (C) XWolf 2012"; + this.Load += new System.EventHandler(this.Form1_Load); + this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint); + this.MouseClick += new System.Windows.Forms.MouseEventHandler(this.Form1_MouseClick); + this.Resize += new System.EventHandler(this.Form1_Resize); + this.panel.ResumeLayout(false); + this.panel.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Timer t; + private System.Windows.Forms.Panel panel; + private System.Windows.Forms.Panel cpanel; + private System.Windows.Forms.Label lb_html; + private System.Windows.Forms.Label lb_html2; + private System.Windows.Forms.Label lb_cs; + private System.Windows.Forms.Label lbHint; + private System.Windows.Forms.Label lb_a; + private System.Windows.Forms.Label lb_b; + private System.Windows.Forms.Label lb_g; + private System.Windows.Forms.Label lb_r; + } +} + diff --git a/MangaColor/MangaColor/Form1.cs b/MangaColor/MangaColor/Form1.cs new file mode 100644 index 0000000..5510acd --- /dev/null +++ b/MangaColor/MangaColor/Form1.cs @@ -0,0 +1,284 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using XWolf.Aero; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using Win32; + +namespace MangaColor2 +{ + public partial class Form1 : XGlassForm + { + private const int TTLMAX = 15; + private int ttl; + private Point amouse; + private int sz = 17; + private int magnify = 7; + private int szm; + private int szh; + private Bitmap mask; + private bool auto = true; + private Color cl; + private string cl_html; + private string cl_html2; + private string cl_cs; + private const string hint1 = "Doble click en el color para seleccionarlo manualmente, ALT+F12 para parar el automatico"; + private const string hint2 = "Click en la lupa para reiniciar el modo automatico"; + private byte[,] nmask; + private KeyboardHook hook = new KeyboardHook(); + private Fmark mini; + + public Form1() + { + InitializeComponent(); + szm = sz * magnify; + szh = sz / 2; + GlassMargins = new GlassMargins(szm + 5, 0, 0, 0); + mask = new Bitmap(szm, szm); + using (Graphics g = Graphics.FromImage(mask)) + { + Pen p = new Pen(Color.Black); + int szmd2 = szm / 2; + g.DrawRectangle(p, (szm - magnify) / 2, (szm - magnify) / 2, magnify - 1, magnify - 1); + g.DrawLine(p, 0, szmd2, szmd2 - magnify, szmd2); + g.DrawLine(p, szmd2, 0, szmd2, szmd2 - magnify); + + g.DrawLine(p, szm, szmd2, szmd2 + magnify, szmd2); + g.DrawLine(p, szmd2, szm, szmd2, szmd2 + magnify); + } + TopMost = true; + panel.Left = szm + 5; + ClientSize = new Size(panel.Right, Math.Max(panel.Height, szm)); + GenerateAlphamask(); + hook.KeyPressed += new EventHandler(hook_KeyPressed); + hook.RegisterHotKey(Win32.ModifierKeys.Alt, Keys.F12); + GlassDrag = false; + } + + void hook_KeyPressed(object sender, KeyPressedEventArgs e) + { + SetAuto(false); + Clipboard.SetText(cl_html); + } + + private void SetAuto(bool auto) + { + this.auto = auto; + lbHint.Text = auto ? hint1 : hint2; + } + + private void GenerateAlphamask() + { + nmask = new byte[szm, szm]; + int c = szm / 2; + for (int y = 0; y < szm; y++) + for (int x = 0; x < szm; x++) + { + int dist = (int)((Math.Sqrt(Math.Pow(x - c, 2) + Math.Pow(y - c, 2)) * 300) / c); + if (dist > 255) + dist = 255; + nmask[x, y] = (byte)(255 - dist); + } + } + + private String hex(int val) + { + String result = val.ToString("X"); + while (result.Length < 2) + result = "0" + result; + return result; + } + + private void SetCl(Color color) + { + cl = color; + cpanel.BackColor = cl; + string XR = hex(cl.R); + string XG = hex(cl.G); + string XB = hex(cl.B); + string XA = hex(cl.A); + cl_html = "#" + XR + XG + XB; + cl_html2 = "#" + XA + XR + XG + XB; + cl_cs = "(int) 0x" + XA + XR + XG + XB; + if (mini != null) + { + mini.Color = cl; + mini.HTML = cl_html; + mini.Invalidate(); + } + else + { + lb_html.Text = "HTML:" + cl_html; + lb_html2.Text = "HTML:" + cl_html2; + lb_cs.Text = "C#:" + cl_cs; + lb_a.Text = "A: " + XA + "(" + cl.A + ")"; + lb_r.Text = "R: " + XR + "(" + cl.R + ")"; + lb_g.Text = "G: " + XG + "(" + cl.G + ")"; + lb_b.Text = "B: " + XB + "(" + cl.B + ")"; + } + } + + private Point MouseScreenPosition(int offs) + { + Point src = System.Windows.Forms.Cursor.Position; + src.X -= offs; + src.Y -= offs; + return src; + } + + private Bitmap ZoomImage(Bitmap bmp, InterpolationMode inter) + { + Bitmap result = new Bitmap(szm, szm, PixelFormat.Format32bppArgb); + using (Graphics g = Graphics.FromImage(result)) + { + g.PixelOffsetMode = PixelOffsetMode.Half; + g.InterpolationMode = inter; + g.DrawImage(bmp, 0, 0, szm, szm); + } + return result; + } + + private Bitmap CaptureImage(Point src) + { + Bitmap result = new Bitmap(sz, sz, PixelFormat.Format32bppArgb); + Point dst = new Point(1, 1); + Size size = new Size(sz - 2, sz - 2); + using (Graphics g = Graphics.FromImage(result)) + { + g.CopyFromScreen(src, dst, size); + } + return result; + } + + private Color CaptureColor(Point src) + { + Color result; + using ( + Bitmap bmp = new Bitmap(1, 1, PixelFormat.Format32bppArgb)) + { + Point dst = new Point(0, 0); + Size size = new Size(1, 1); + using (Graphics g = Graphics.FromImage(bmp)) + { + g.CopyFromScreen(src, dst, size); + } + result = bmp.GetPixel(0, 0); + } + return result; + } + + private void MaskImage(Bitmap bmp, byte[,] mask) + { + BitmapData bdata = bmp.LockBits(new Rectangle(0, 0, szm, szm), ImageLockMode.ReadWrite, bmp.PixelFormat); + unsafe + { + byte* p0 = (byte*)bdata.Scan0.ToPointer(); + for (int y = 0; y < szm; y++) + for (int x = 0; x < szm; x++) + { + int posalpha = (((y * szm) + x) * 4) + 3; + *(p0 + posalpha) = (byte)(mask[x, y] * (*(p0 + posalpha)) / 255); + } + } + bmp.UnlockBits(bdata); + } + + private void Work(Graphics bg) + { + if (mini != null) + { + mini.Location = MouseScreenPosition(10); + SetCl(CaptureColor(System.Windows.Forms.Cursor.Position)); + } + else + { + Point src = MouseScreenPosition(szh - 1); + using (Bitmap bmp = CaptureImage(src)) + { + if (auto) + SetCl(bmp.GetPixel(szh, szh)); + if (bg != null) + { + using (Bitmap blur = ZoomImage(bmp, InterpolationMode.HighQualityBilinear)) + { + bg.DrawImage(blur, 0, 0, szm, szm); + } + using (Bitmap clear = ZoomImage(bmp, InterpolationMode.NearestNeighbor)) + { + MaskImage(clear, nmask); + bg.DrawImage(clear, 0, 0, szm, szm); + } + bg.DrawImage(mask, 0, 0, szm, szm); + } + } + } + } + + private void Form1_Paint(object sender, PaintEventArgs e) + { + Work(e.Graphics); + } + + private void t_Tick(object sender, EventArgs e) + { + Point src = System.Windows.Forms.Cursor.Position; + ttl++; + if (src == amouse && ttl < TTLMAX) + return; + amouse = src; + ttl = 0; + if (mini == null) + Invalidate(); + else + Work(null); + } + + private void Form1_Load(object sender, EventArgs e) + { + lbHint.Text = hint1; + } + + private void Form1_MouseClick(object sender, MouseEventArgs e) + { + if (!auto) + { + SetAuto(true); + } + } + + private void cpanel_DoubleClick(object sender, EventArgs e) + { + ColorDialog cd = new ColorDialog(); + cd.Color = cl; + if (cd.ShowDialog() == DialogResult.OK) + { + SetAuto(false); + SetCl(cd.Color); + } + } + + private void Form1_Resize(object sender, EventArgs e) + { + if (WindowState == FormWindowState.Minimized) + { + if (mini == null) + { + mini = new Fmark(); + mini.Visible = true; + } + } + else + { + if (mini != null) + { + mini.Dispose(); + mini = null; + } + } + } + } +} diff --git a/MangaColor/MangaColor/Form1.resx b/MangaColor/MangaColor/Form1.resx new file mode 100644 index 0000000..42091b1 --- /dev/null +++ b/MangaColor/MangaColor/Form1.resx @@ -0,0 +1,380 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAqBAAAJ4EAAAwMAAAAQAgAKglAABGFQAAKAAAABAA + AAAgAAAAAQAgAAAAAABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAMwAAAAoAAAAwAAAAMwAAADMAAAAzAAAAMwAA + ADMAAAAzAAAAMwAAADMAAAAzAAAAMwAAADMAAAAzOW6h/ztunv8hP1pdw5E/8sSPOP/EjTT/xI00/8SN + NP/FjDT/xY41/8iROP/LlT3/zZg//8+ZP//Zmjf/K2ur/ymy//9EyP//OoPM/8SOOP////////////// + ///////////////////e4On/dHmE/1xibv9eY27/Z2dt/39zbP86xv//Vdv//zeAzP/EjTT//////yep + i/+Enpn/DaiC/wDcp/8mu5v/cGdp/+XEj///7af///Wy/+jVo/92cG3/nI+J/yh/2P8rgdkAxY00//// + //8AoXH/VJOD/5aFiP8zrJD/a3Z1/+rAh///5qb//+em///vs///+bv/6Naj/3d3fP////8A1pg2AMWN + NP//////AMCK/wDOm/82pon/q6Gj/3xyd///4p///+/K///ns///6av//++y///0sP9vc3//////AMqX + QgDFjTX//////wDAi/8HzZr/DLiJ/xDprP+FeXr//9+Y///35P//7cj//+ey///mpf//7Kb/dHmG//// + /wDIlkQAxY01//////8AoHP/B66B/xKzjP8cONn/f3KM/++/fv//9dv///fk///uyv//5aX/6MuX/4OC + g/////8AyJZEAMWNNf//////AMGL/wjQl/8fVsH/Jkf9/zzNnv+ShIH/675////dmP//357/6MWN/4aG + i/+ykFb/////AMeWRQDFjTb////6/wDCiv8I0Zf/EqOR/xfWqf956e7/lbXR/42UoP+Eh5L/goaS/5CP + if/j3d3/x5E4/////wDHlkUAxY42////9f8Ap2//EnOn/w6viP9GvLD/ksHs/6rBwP/Zs1//2rNZ/9qz + Wf/Xr1P////6/8OPOP////8Ax5ZFAMWONv///u7/ALGW/ywP//8Tu4j/md7//8Hc3f/arVD//dBq//vQ + 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 + yv/m2s3/7trJ//bezf//5dX/vKqa/8a2p/9qYE//ODU3/z89PigAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA8NBueOzIb3TYtHf8wJx7/IBsg/x4aIP4fGh//o5B8/5eHeP/b2Nn/zsvL/9HLxP/Xz77/3NK5/+TW + uP/t3Ln/7dy5/+3bvf/v3ML/9NnC//fcyf/qzb3/uqmY/4uBd/8/PT//MzEyVXFucAAAAAAAAAAAAAAA + AAAAAAAAIRwfzB8aIP4fGiD/IBsf/x0ZIP8YFiH/HRsf/1NHNP+plIH/wbKb/+3dvf/y4bb/8N6y/+za + r//p1qz/5NCj/+PPov/k0Kn/5tOx/+rXuv/u1bv/89fA//vbyP+xnIr/rZuL/0dFR/8tLC2BAAAAAAAA + AAAAAAAAAAAAAAAAAAAhHB+6Ix8f/04/Gf97YRf/pYEW/8+gFv/ttxj/tZZM/6CLev/l0az/8d61/+7a + rv/r16j/5c6Y/+DHjf/fx4//38iU/+HKnf/izab/5dCw/+rOsf/v0rn/9dbB/7mfi/+wnIn/XVpZ/i8v + L60AAAAAAAAAAAAAAAAAAAAAAAAAABESIqLlsA7/87wX/+u1G//lsh3/4a8g/96uIv+ymF//opGA/+/Z + sf/t2K3/6dOi/+DHiv/bwYH/2L19/9a8gP/Xv4j/2cKS/93Dmf/hxJ7/5smo/+zOs//y0rv/u52I/6iU + gP9vamj/MjEy1wAAAAAAAAAAAAAAAAAAAAAAAAAAFRMhibqRFv/mshv/4rAf/96uIf/arCT/16sm/7ie + Zf+xoZH/59Gp/+nRof/gxov/2r5//9O3c//Osm7/zrJz/9C0ev/TtoP/17qN/93BnP/jzK//6cux/+zL + s/+1l4D/ppF+/3x3df86OTr/AAAAAAAAAAAAAAAAAAAAAAAAAAAdGSNtmnka/+CvIP/crSP/2Kom/9So + Kf/Qpiz/up5a/8e2p//Su5X/48iU/9vBh//VuHn/zK5q/8WlXf/Gp2T/yqty/86ygf/Tu5P/2cOh/+DK + rv/nya7/5cCm/6WLdv+gjHr/eHNr/0RERP/Kx8gKAAAAAAAAAAAAAAAAAAAAAC4pLk9/ZyH/2qwl/9Wp + J//Spyr/zqUt/8ujMP+/nkH/0cG2/7+rj//hx5b/2byE/9GxdP/JqWj/xKRj/8Ona//HrXn/zLOH/9G6 + lP/XwKH/38mu/+TDqf/Tq4z/nIl2/4l4ZP91bFf/VlZW/2VlZjIAAAAAAAAAAAAAAAAAAAAAOjY5L2xa + Kv/Wqir/0KYs/8ykLv/JoTL/xqE2/7mOFP/ArpH/ybus/9a8kP/YvYv/0bR//8qveP/GrHb/xax5/8iv + gf/LtIz/0bmY/9jBpP/ex6//17GU/6aIcP+qlYL/ZlQz/3JmTP9tbG3/WlpaWN3c3QAAAAAAAAAAAAAA + AAA1MjUPY1c8/9GnMP/IoTL/w50w/7uUI/+whgv/q4EH/6eFKP/f0cf/v7Cc/9W7jv/TuYz/zbOF/8qw + g//JsIX/yrKL/862lP/TvJ7/2MKn/9S2m/+yjnH/oY58/4l4Zv9SPw//Z1o8/4SEhf9YWFh9AAAAAAAA + AAAAAAAAAAAAAAAAAABcV03/vIwB/7GFBf+sgQT/qH4H/6N7CP+fdwn/m3QG/6qTXf/n2s3/wbGe/8iv + h//Qt4//zraP/861kv/Ot5b/0Lmb/9G5nf/St57/p4lt/5+Mef+ah3f/VEIb/048Ev9XSir/np6g/lhY + WKIAAAAAAAAAAAAAAAAAAAAAAAAAAHd3feuvgwP/qH4H/6R7CP+feAn/mnQJ/5VwCv+QbQr/imcF/6OO + YP/n2s7/1Me5/7uokP+6o4P/wKaE/8Ooif+8oob/spuD/6SRfv+vm4n/lYNy/15OLf9aSyX/WEop/09C + Jv+mpqj/MjEyxAAAAAAAAAAAAAAAAAAAAAAAAAAAVFRex5hyBf+feAj/mnQJ/5VwCP+RbQn/jGoJ/4dm + Cv+CYgv/fF4I/4ZtL//CtKH/5tjM/+HTxv/Sw7X/yLqr/8m6q//Kuan/uKiZ/4JzXf9dTiv/W0wq/1ZH + Kv9RRCr/QjUe/7SztP8lJSXmAAAAAAAAAAAAAAAAAAAAAAAAAABeXWWigWIL/phyCf+Tbgn/jmsK/4hn + Cv+CYwr/fl8L/3pcDP91WA3/cFUN/2hNB/9zXSn/i3pY/5yNc/+ekHj/k4Rs/3prTv9gUCz/Wksn/1ZI + Kf9RRCj/TEAo/0Y8KP89MyL/qqim/ywsLP8AAAAAAAAAAAAAAAAAAAAAAAAAAGZkan1zWhT/mHIK/5Nv + C/+Oawv/iWgM/4RkDf98Xg3/dVkN/21TDv9nTg7/Y0wP/15ID/9ZRA//VUEQ/1tJIP9YSCP/Vkck/1NE + Jf9QQib/Sz8m/0c8Jv9COCb/PTMl/zYuI/+Oi4n/Ojo6/////wcAAAAAAAAAAAAAAABjYGIAc3BzV2ZT + If+QbAv/i2kM/4ZlDP+BYg3/fF4N/3ZaDv9yVw//bVMP/2hPEP9gSRD/WEQQ/1RBFP9ZSCL/VUQi/09B + Iv9LPiH/Rjkh/0E2If88MiH/Ny4g/zIqIf8uJiD/KCIg/3Btbv9TU1P/fn5+JQAAAAAAAAAAAAAAAAAA + AAB+e30wYFMx/4loDP+DYw3/fl8N/3lcDv9zWA//b1QP/2lREP9lTRD/X0kQ/11IFf9fSx7/Xkwk/1ZF + Iv9OPyD/Rzog/0E1H/88Mh//OC4f/zIqHv8uJh7/KCIe/yQeHv8hHR//UU5Q/3R0dP9YWFhBAAAAAAAA + AAAAAAAAAAAAAJeRlQhfV0P/iGoX/35hFP94XBP/c1kS/25VFP9qUhX/ZlAX/2ROG/9iTiD/Xkwi/1hI + If9TQyD/TUAh/0g7IP9DNyD/PjMg/zcuH/8yKR//LCQe/ychHv8jHR//IRwf/yAcHv80MTP/mZiZ/0RE + RFwAAAAAAAAAAAAAAAAAAAAAAAAAAF9bVP2GaiD/fmQi/3lhIf90XCH/cFkh/2pVIf9lUSD/YE0f/1pI + H/9VRB//T0Ae/0k6Hf9CNBv/PC8a/zUqGP8uJBf/Jx8X/yAaFf8aFRX/FhIU/xURE/8UEBP/FxMV/xQR + E/+8vLz/Nzc3dgAAAAAAAAAAAAAAAAAAAAAAAAAAZGNl1F1MIP9eUC3/ZFg5/2tgRv9wZ1H/bmZT/2tk + Vf9oY1b/bGde/nBsZf92c2//fXt4/4aFg/+Pjo7/mZiZ/6OjpP+urq//urq6/8bGxv/S0tL/39/f/+vq + 6v/r6+v/9fT1/+bl5v9dXV2SAAAAAAAAAAAAAAAAAAAAAAAAAACamJmEoJ+hw6SipLynpae2qqipsK2r + rKuxr7CktbO0nbm4uZe8u7ySv76/jMPBwYXGxcZ+ysnKeM7NznHS0tJr1tXWY9va21zf3t9V4+LiTufm + 50jr6utA7+/vOvX09TP5+fkr////NPf39x0AAAAAAAAAAAAAAAD/////////4f///8H/gA+B/gAHAfwA + AAP4AAAH+AAAD/wAAAf4AAAHwAAAP8AAAB+AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAA8AAAAPAAAADwAA + AA+AAAAPgAAAD4AAAA+AAAAPgAAAB4AAAAeAAAAHgAAAB8AAAAfAAAAHwAAABygAAAAwAAAAYAAAAAEA + IAAAAAAAgCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAABQUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAXFxckAAAAGAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFBQWpaWlryZ2dn3zg4OFYAAAAJOzs7AAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTExMX3h4ePy3t7f+gICA/zMz + M/8eHh5dAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAGAAAABgAAAAcAAAAHAAAABQAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAABNTU1ffHx89bOz + s/+Pj4//UVFR/jQ0NP8tLS3lJSUlFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAwAAAATAAAAGwAAACgAAABIAAAAYwAAAHEAAABwAAAAZQAA + AEwAAAAsAAAAIAAAABsAAAARAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElJ + SWt4eHj8srKy/4uLi/5PT0//Nzc3/khISP9ERETbAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAkAAAAZAAAANwAAAF0AAACiAwMD3QUFBf8JCQn/DQ0N/xAQ + EP8UExP/Ghoa/xsbG/8ODg7/CQkJzwcHB3gAAABAAAAAJQAAABAAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACTU1NX3h4ePy0tLT+j4+P/09PT/81NTX/RkZG/1tbW+MnJycaAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAQEBEQAAADkAAACWExMT3BgYGP8mJib/NDQ0/z8/ + P/9ERET+REND/0BAQP88Ozz/NjY2/zQzNP47Ozv/NTU1/yMjI/8UFBTVAAAAXQAAACoAAAANAAAAAAAA + AAAAAAAAWFhYAAAAAABMTExgfHx89bKysv+Pj4//T09P/zc3N/5GRkb/WFhY0UVFRSMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAASWtra9teXl7+QUFB/0dH + R/9KSkr+S0pK/0pKSv9JSUn/R0dH/0NDQ/8/Pz//Ozs7/zU1Nf8uLS7/JiYm/iEgIf4ZGRn/Dg4OxQAA + ADwAAAAXAAAAAwAAAAQAAAAKAAAACUJCQnR4eHj8srKy/4uLi/5PT0//Nzc3/kZGRv9bW1vkRUVFIgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAnFhYWn25u + bv9dXV3+SklK/01NTf9OTk7/UE9Q/1BPUP9PTk//TEtM/0dHR/9CQkL/Pz4+/zs5Ov82NDT/LSws/yQk + I/8ZGBn/DQ0N6wEBAUQAAAAgAAAAGAAAAB4AAAAlPT09dXh4eP21tbX+j4+P/09PT/81NTX/RkZG/1tb + W+MxMTEZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAYAAAAuNDQ0oUhISP9LS0v/T05P/1FRUf9TUlP/VVVV/1NTU/9JSUr/SEhH/1tWUf9vZ1//g3hv/5GG + ev+YjID/lIh+/4R6cf9oYFr/Qz88+x0cG2IAAAAwAAAAKwAAACYlJysuoqOk07Kysv+Ojo7/T09P/zc3 + N/5GRkb/WFhY0URERCIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAfNzc3bTw8PPtLS0v/U1NT/lVVVf9YWFj/VlZX/0ZGRv9gV1D/kIBy/6yZ + iP+7p5X/wq+c/8WyoP/ItqT/zbuq/9LAr//UwrH/xrao/6+ilvOCeXC5ExMRZBgXFH8vKh27gnFk9svI + xv9NTU3/Nzc3/kZGRv9aWlrlNTU1LQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAHkNDQ3QmJibqMDAw/Dk5Of87Ozv+SkdD/oV2 + Zv+lkX7/rZmE/6mXhP+nlob/pJWH/6qcj/+ypJj/sqOV/7Wll//BsaH/zbys/9jHt/7Pv7D/oJSH/2FT + K/9xWj7/hW9d/7epnP6XlpX/QkND/1hYWO0bGxswAAAAEgAAAAsAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEABAQEBgAAABAJCQkvJCQkfikq + KrhZUkv/l4Rz/6uWg/+ciHX/oJGD/r22r//V0c7/6ujm//Tx7v/38Oz/+vDp//Xo4P/l1s3/1sW5/8S0 + pv/Gtqb/2ci4/66fk/9yX0//uKqf/9nMwv9vY1v/RURG/zAvMLEAAAAMAAAAEwAAAA8AAAAHAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAHAAAADQAA + ABYAAAAhAAAAKWVaTbGciXj/qZWB/498avu5sqv84eHg/+fn5v/r6eT/7Ojh/+zm4f/s5uH/7OTh/+/j + 3f/z493/9uXd//bi2v/ayLv/u6yc/9bFtP+xoZH/q56T/3BkXv9ZVlj/PTs9/ysqK+IAAAADAAAACgAA + AAYAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAwAAAASAAAAGgAA + ACMAAAAqAAAAMgAAADgCAgFDUEY8hpqHdvuqlYH+lYRz/8/Kw/3q6eP/5eLd/uHf3P/e3Nr/3NnZ/97Z + 2P/g29n/49za/+bf2//r3Nb/797X//Th2P/75tv/4Mu//72snf/UwrH/qpuN/316dv/Bv7r/SEVI/ysq + K//i0dgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAIgAA + ADAAAAA0AAAANQAAAUMVEw1jLCYShEI2FKREOBvFh3Zm9KuWgv+Vg3L/wry3/t3c2//X1db+19bX/9TS + 1P/T0dH/1NHQ/9bS0P/Y0tH/29TS/97X1P/i2dT/5tfR/+3a0f/039L//uXZ/9/Iu/+3p5f/z76u/6GT + gP9+bDz/TElQ/ikoKf9JRUgpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1Lh0AAAAAAAAA + AAAAAAAAAAAAEBMRDUwnIxWQPzUYx05AGOlJOxnzPjIb+iojHP9SRz3/qJSA/5qHdP6to5v/3t3d/97d + 3f/b2tv/1dPT/8zJyv/LyMj/zMjI/8vHx//Mx8f/08zG/97Ux//o28n/79/J//Pdx//23sr/+d/N//3j + 0//Vvq//vKua/8Gxof+BdF7/U1BU/yopKv84NzhcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAANS8cFjoyHF88MxupRDka70Q4Gv89Mhv/LyYe/x8aIP8eGiD+Hxog/x4ZHf+OfWz/qZSB/49/ + cf/f2tv/08/P/8vIyP/Oysn/0MzJ/83JxP/OyL7/1sy5/+HTuf/s27r/8N+9/+/evf/t3L7/797D//Hb + wv/02sL/9tvH//ney//12cn/uaSU/8e1pP+ekIP/XFhY/y0sLf8zMTKOAAAAAHFubwAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAgHCBCJyIfzDEpHf8tJR7/Ih0f/x4aIP8fGiD/Hxsg/yAbH/8gGyD/GxYe/0A4 + Nv+lkX7/mYZz/7yyqP/c1Mn/3tXE/+TZwf/j17r/5Naz/+rasv/t3LL/7Nu0/+rYsv/o1a7/59St/+jV + sP/p17b/69i6/+3bwP/w17z/89jA//baxv/53Mr/yrGg/7uol/+yoZH/bGZi/zU0Nf8wLzC+AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhGx+lIBsg/yAbIP8gGyD/IBsf/yAbH/8eGiD/Gxgh/xgX + If8dHCD/QDUV/3ZmUP+qlYL/nox2/+rZuv/y4b7/8eG6//Hftf/v3bL/7duu/+zZrf/q16v/5dCg/+PO + nf/jzZ//486j/+PPqP/l0a3/59Oz/+rWuv/s1rv/8NS6//PXwP/32cb/3L6r/66bif+6ppX/e3Fr/0A+ + P/8qKSrgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhHB+OIBsg/yMeH/8qJB7/MSof/zwz + Hv9hTxj/knIT/8GUEf/nshL/6bQX/5uFZf+rloP/q5iA/+/cuP/y4Lj/8N2z/+7arv/s2ar/6tam/+bR + nP/iypD/4MmQ/+DJkv/gyZb/4cqa/+LMoP/jzab/5NCs/+bStP/q0LT/7dC1//HUu//11sH/7Mq0/6KP + fP+2oo//h3tx/09NTv4oKCjpa2hrFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeGiBxRzsb/5t5 + FP+7kBL/2KYS//G4E//zuxf/7bgc/+ezH//isCD/1Kcl/6OQdf+tmYf/taKH//Dctv/w3LP/7dmt/+vX + qf/o0p7/4sqQ/97Fh//dw4X/28KG/9rCiP/bw4z/3MSS/93Gmf/fyaD/4sul/+XKpv/oy6r/682x/+7Q + t//y073/8c22/56Id/+vmof/i31x/19cXf8rKivwS0pMMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAcGSBVYE0Z/+q0FP/uuBf/67YZ/+izG//ksh3/4rAf/9+uIf/drSP/zqQp/6yZfv+0oo//u6iO/+/a + s//t2K3/69Wo/+XOmP/gxon/3MKC/9m+ff/XvHv/1bp8/9W6fv/VvYT/17+L/9nBkv/bwZT/3sGZ/+HE + n//lx6b/6Mut/+zNtP/x0rr/7ciw/5+Idf+qlYL/intu/3Btbv8uLS32RENETgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAbGCA4TD0a/+CtGP/otBr/5bIc/+KwH//gryD/3a4i/9qsJP/Yqyb/zqUs/7Ge + hP+9q5r/vKmO/+3Xr//s1Kn/5c2X/+DFi//bwIL/17x7/9O3dP/QtHD/z7Ry/9C0dv/Qt3z/0reC/9W3 + hv/Xuo3/276V/9/Bnf/jyKn/586y/+vMsv/vz7b/58Gn/5yFcv+plYH/h3hr/398ff81NDX8QkJCagAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbFyAjOjAb/9eoGv/ksR3/4bAf/96uIf/crCP/2asl/9aq + J//UqCn/zqQp/7CehP/ItqX/uqeP/+jQqP/nzZv/4ceP/9zChv/YvH3/07d1/86xbP/JrGb/yKtm/8qs + a//MrXL/zrB5/9Gzgf/UuIv/2L6X/9zFpP/gyq3/5Mux/+nKr//sy7L/27OY/5qEcf+qlYL/fXBk/4iF + hv9DQkP/QUFBhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhHSUZKyYg+NChGv/gryH/3a0i/9qr + JP/Yqib/1ako/9KnKv/Qpiz/zqQp/7Ccd//Qv67/tqWR/+HInP/jyZb/38SN/9m/hf/VuXz/z7Jw/8qq + Zf/EpFz/w6Re/8amZv/IqW//y655/860hv/SupH/1r+a/9rDo//eyKz/48mv/+jJrv/lwaf/xaGG/56K + d/+ok4D/bF9L/46Kiv9VVFX/Q0JCoI2LiwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsJywUJCMq48OY + G//crCP/2Ksl/9apJ//UqCn/0acr/86lLf/NpC//y6Mu/7ecWf/MvbH/va6e/9S8kv/ix5f/3cKO/9i6 + gf/Ts3b/za1u/8ioZv/Eo2H/wqNi/8Smav/HrHX/yrGA/821if/RuZL/1L2a/9nCo//ex6z/4siu/+XE + qv/btZj/sJF4/6WRff+einj/XU0t/5KPi/9oZmf/Q0NDu2dnZwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA1MTUPKCg0zquGG//Yqyf/1Kgo/9KnKv/QpSz/zaQu/8ujMP/JojL/x6E2/7yXLP+9r6P/1cW3/7ak + jP/ix5b/3MKQ/9e5gv/Ssnn/za5z/8iqbv/GqGz/xKhv/8WrdP/HrXv/ybCD/8y0i//QuJP/1L2c/9jB + pP/dx63/4sWs/9u5nP/NpYf/nYVw/6uWgv+Jd2X/VEAR/46Khf99fHz/RURF1FxbXBEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAA7ODoKODlDuY5xHv/Wqir/0KYr/86lLf/Moy7/yaIx/8ehM//FoDf/vpcm/7KF + B/+wllj/2szB/8a4qv/CrIf/3sSU/9e8i//St4T/zrJ+/8qvev/HrXj/xqx4/8atfP/HroH/ybGI/821 + j//RuZf/1L2f/9nCpv/dx67/27ug/9Gqi/+riW//n4x6/6OPff9rW0H/Uz0H/4J9dP+TkpP/R0dH7lhY + WBbc3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAA8OTwFTExWpHZgI//SqC3/y6Mu/8ihMP/GoDL/w50y/8Gb + L/+3jhj/roMG/6uBCP+oghT/xrai/+LTxP++r5//zLSK/9e9kf/TuYz/z7WG/8yygv/JsID/yK+B/8iv + hP/JsYj/zLOO/862lP/Rupv/1b+i/9nDqf/ZwKf/z6iK/7aQcf+SgW//qpaD/4V1Zf9TQBP/Uz4M/3py + Y/+lo6X/TExM/2JiYh8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXFBUAVlRdjmpdNP/Gmhr/v5Uc/7yT + Hf+4jxn/sokR/6yBB/+pfgb/pn4I/6R8CP+iegj/qIxG/9jKvP/h08T/v6+b/8euh//Vu5D/0biO/862 + i//Ms4n/y7KK/8yzjP/MtJD/zbeU/9C6mv/TvKD/1b6j/9S8o//PsJT/r4tt/5WBbf+qlYL/lYNy/1xL + Kf9SPxD/TjsO/3FnUv+urrD/VFRU/3Z2djsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATEpQd2Zf + TP+8jAH/soYH/6+EBv+sggb/qX8H/6Z8B/+jewj/n3gI/511Cf+Zcwn/lnAH/6qVaP/d0cb/49bG/8K0 + pP+4ooD/zrSL/8+1j//OtpH/zraS/862lP/Pt5b/z7iZ/8+3mv/Pt5v/z7Wa/8+0mf+hhGj/l4Nw/6uW + gv+biHf/ZlY7/1A9Ev9OPBP/SDcP/2FWPf+4uLr+Xl5e/3JycmIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAT01QYYKBgfq0hgX/rIIG/6l/B/+mfQj/o3sI/594Cf+cdQn/mXMJ/5VxCv+Sbwr/j2wL/4pm + Av+mk2r/283A/+nbzP/Pw7X/tqSN/7+nhf/GrIr/xq2L/8eujf/Iro//x62P/8Wrj//Dqo7/tp6E/5mG + dP+jkYD/rZiF/5iFdP9rXEX/U0EZ/1dIIv9XSSb/Vkgo/1VIL/+2tbj/UE9Q/1JSUocAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAVVJUSXR1fPWheQf/p30H/6J6CP+feAj/nHUJ/5lzCP+WcQn/k28J/5Bs + Cv+Magn/iWgK/4dmC/+BYQn/loBL/8q8rP/n2s7/5dfK/8/Cs//AsJ3/uaeR/7aii/+0oIr/sp6I/7Cd + if+vnYv/s6KR/72qmP+zoI//kH9u/2laP/9cTin/Xk8t/1pMLP9XSSv/U0Ys/0M3Hv+6ubz/UlFR/zo6 + Oq4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATkpMMltbYu+HZwn/oXkH/5x2CP+adAn/lnEJ/5Nv + CP+QbQn/jWoJ/4poCf+GZQr/g2MK/4BgC/99Xwv/eVwM/3xgGv+djGf/y7+1/+HTx//o2Mv/5NXG/93O + vv/Yybn/1sa2/9TDs//OvKz/v66f/6SViP96bFT/YVEv/1xNKf9aSyr/V0gq/1RFKv9QQyr/TUEq/z8z + Hv+opqX/ZWVl/zc3N9MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUlBSGV9eZOpxVw/+nXYH/5hy + Cf+Ubwn/kG0J/45qCv+KaAr/h2YK/4NjC/+AYgv/fV8M/3pcDP93Wg3/dFgN/3BVDf9rUAn/blUW/4p4 + U/+nmYX/t6qZ/76woP+9sKD/t6iZ/6mcjP+ViHX/eWpQ/2BPK/9bTCb/Wksp/1dIKP9TRSn/UEMo/01A + KP9JPSj/Rjso/z0yIv+Pi4f/enp6/zU1NfYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBwrAWFf + ZORgTRf/n3cI/5hyCv+VcAr/km4K/45rC/+KaAv/hWUL/4FiC/98Xgz/eFsM/3RXDP9wVg3/blQN/2tR + Df9oTw7/ZEwN/15HCv9aQgj/XEYS/11LHP9jUSf/ZFQt/2BPJ/9bSiH/W0sk/1tLKP9XSCj/VEYo/1BD + J/9NQCf/Sj0n/0Y7Jv9DOCf/PzYm/zkwI/9va2f/kJCR/y4uLv////8CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAGdkaM9TRiP/nXYI/5ZwCv+Sbgv/j2wL/4xpC/+IaAz/hWQM/4FiDf99Xw3/elwN/3Va + Dv9wVQ7/aU8O/2VMDv9iSw//X0kP/1xGD/9ZRBD/VUAP/1hFGP9dSyP/Wkkj/1dHI/9URST/UUMj/05A + JP9NQCT/Sz4l/0k9Jf9GOiX/Qzkm/z82Jv87MiX/ODAk/zMrI/9NSUX/p6eo/ykpKf+/v78fAAAAAAAA + AAAAAAAAAAAAAAAAAABjYGEAAAAAAG1rbqlIQS//mHII/5BsC/+Magz/iWgM/4ZlDP+CYw3/f2EN/3xe + Df94XA7/dVkP/3JXD/9vVQ//bFIQ/2dPEP9hSRD/W0YQ/1dDD/9UQBD/VkQY/1pJIv9XRiL/U0Qi/1BC + Iv9NPyL/Sj0i/0Y6If9DNyH/QDUh/z0zIP85MCH/Ni0h/zMrIf8wKCD/LCYg/ykjIP83MzL/tbW2/ysr + K/94eHhBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRxc31MRz3/jGkJ/4tpC/+HZwz/hGQN/4Fh + Df99Xw7/el0O/3daDv90WA//cFYP/21TD/9qURD/Z04Q/2NLEP9gShH/XEcR/1pGFf9bSR3/Wkki/1RE + If9QQSH/TT8h/0o9IP9HOiD/RDcg/0A1IP89MiD/OjAg/zYuIP80Kx//MCgf/ywmH/8qIx//JiAf/yMe + Hv8vKy3/ubi5/y8vL/9dXV1hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHp3eVFYVE7/fF4K/4Zm + DP+CYw3/f2AN/3xdDf94XA7/dVkO/3JWDv9uVA//a1IP/2dPEP9lTRD/YUoQ/11HEP9dSBX/YEwe/19N + Iv9cSyP/WUgj/1VFIv9QQSH/Sz0g/0U4H/9ANB7/PTIf/zovH/83Lh7/NCse/zAoHv8tJh3/KiMe/yUg + Hv8kHh7/Ih0f/yEdH/8rJyr/urm6/zY2Nv9QUFCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIF+ + gCRmY17/blQN/oJjD/99YA//el0P/3daEP9zWA//cFYQ/21TEf9pURH/Z08S/2NNEv9iSxX/Yk0a/2NP + IP9hTiL/XUsi/1lIIf9VRSH/UkMh/05AIf9LPSD/Rzog/0Q4IP9BNSD/PDEg/zguH/80Kx//Lyge/ywk + Hv8pIx//JiAe/yMeH/8hHB//IRwe/yAbHv8nIiX/sbCx/0xMTP9FRUWeAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAB0cW//ZlEZ/4drIv+CZyD/fWMf/3lgHf92XR3/clod/29YHf9tVh7/alQf/2hT + If9lUSH/YU4g/15LIP9aSCD/VkYg/1JDIP9PQB//TD0f/0g6H/9ENx//QTUf/z0yH/86Lx//Ni0f/zIq + Hv8vJx7/KyQe/yghHv8kHh//IRwe/yEbH/8hGx//IBse/yAbHv8iHSD/n52e/2xsbP8/Pz+7AAAAAP// + /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB9ennmXkwe/4BmIP99YyH/eWAh/3ZfIP9yWyD/cFkg/21W + IP9pVCD/ZVEg/2JOH/9fTB//W0kf/1dGH/9UQx//UEAe/0w9Hf9HORz/QzUb/z4xGv87Lhn/NisY/zEo + F/8tIxb/KCAW/yQcFv8fGRX/HBYV/xgTFf8WEhT/FRIU/xQREv8UERP/FhQV/xoXGf8cGhv/j46O/5CP + kP81NTXSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAfoC4WUso/3JZHP9uWB7/a1Yf/2hU + If9lUiP/YVAl/11NJv9YSSb/UkUn/05CJ/9JPyf/Rz4p/0M8K/5CPC3/Qz4y/0VAN/9JRT3/T0xH/1ZU + Uf9eXFr/ZmZl/29vb/95eXn/g4OE/42Njv+ZmJn/o6Sk/66vr/+6urr/xsbH/9PT0//e3t7/5eXl/+Xk + 5P/u7u7/9/X3/729vf86OjrjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMioyLcnFw/3Fw + b/92dXb/fn1//4aGif+PkJT/mZmd/6CgpP+jpKf/pqap/6mprP+sq67/sbGz/7e2uf+9vL7/wsHD/8fG + yP/Lysz/zs3O/9HQ0f/T0tP/1dTW/NjX2Pra2drz3dzd8N/e3+rh4eHm4+Pj4Obl5d3n5+fX6unq1Ozr + 7M/u7e3L7u7uxuzs7MDy8fK89vf2tvr6+sqoqaiwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACXlZYympmaop2bnZSgnp+Lo6GihaWjpX2opqd3qaipbqyrrGqvra5gsrCxWrSztFK4trdMubi5Qr28 + vT2/vr43wcDBMMPBwivGxcYkyMfIIsvKyx/NzM0d0M/QGtPT0xnV1NUY2dfZF9vb2xbd3d0V4eDhE+Pj + 4xPl5eUR6ejpEOvr6w/t7u4O8vHyDfX19Qz4+PgL+fn5Cf///xPz8/MQAAAAAAAAAAAAAAAAAAAAAAAA + AAD///////8AAP//////xwAA//////+DAAD//////gEAAP//AB/+AQAA//AAA/wBAAD/wAAB8AMAAP+A + AAHwBwAA/4AAAAAPAAD/AAAAAB8AAP8AAAAAPwAA/wAAAAA/AAD/gAAAAB8AAP/AAAAADwAA/gAAAAAf + AADgAAAAAP8AAOAAAAAA/wAA8AAAAAD/AACAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAH8AAAAA + AAAAfwAAAAAAAAB/AAAAAAAAAH8AAAAAAAAAfwAAAAAAAAA/AAAAAAAAAD8AAAAAAAAAPwAAAAAAAAA/ + AAAAAAAAAD8AAIAAAAAAPwAAgAAAAAA/AACAAAAAAD8AAIAAAAAAPwAAgAAAAAA/AACAAAAAAD8AAIAA + AAAAHwAAwAAAAAAfAADAAAAAAB8AAMAAAAAAHwAAwAAAAAAfAADAAAAAAB8AAOAAAAAAHwAA4AAAAAAf + AADgAAAAAB8AAOAAAAAAHwAA4AAAAAAfAAA= + + + \ No newline at end of file diff --git a/MangaColor/MangaColor/Hotkeys.cs b/MangaColor/MangaColor/Hotkeys.cs new file mode 100644 index 0000000..ad0152e --- /dev/null +++ b/MangaColor/MangaColor/Hotkeys.cs @@ -0,0 +1,149 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace Win32 +{ + public sealed class KeyboardHook : IDisposable + { + // Registers a hot key with Windows. + [DllImport("user32.dll")] + private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk); + // Unregisters the hot key with Windows. + [DllImport("user32.dll")] + private static extern bool UnregisterHotKey(IntPtr hWnd, int id); + /// + /// Represents the window that is used internally to get the messages. + /// + private class Window : NativeWindow, IDisposable + { + private static int WM_HOTKEY = 0x0312; + + public Window() + { + // create the handle for the window. + this.CreateHandle(new CreateParams()); + } + + /// + /// Overridden to get the notifications. + /// + /// + protected override void WndProc(ref Message m) + { + base.WndProc(ref m); + + // check if we got a hot key pressed. + if (m.Msg == WM_HOTKEY) + { + // get the keys. + Keys key = (Keys)(((int)m.LParam >> 16) & 0xFFFF); + ModifierKeys modifier = (ModifierKeys)((int)m.LParam & 0xFFFF); + + // invoke the event to notify the parent. + if (KeyPressed != null) + KeyPressed(this, new KeyPressedEventArgs(modifier, key)); + } + } + + public event EventHandler KeyPressed; + + #region IDisposable Members + + public void Dispose() + { + this.DestroyHandle(); + } + + #endregion + } + + private Window _window = new Window(); + private int _currentId; + + public KeyboardHook() + { + // register the event of the inner native window. + _window.KeyPressed += delegate(object sender, KeyPressedEventArgs args) + { + if (KeyPressed != null) + KeyPressed(this, args); + }; + } + + /// + /// Registers a hot key in the system. + /// + /// The modifiers that are associated with the hot key. + /// The key itself that is associated with the hot key. + public void RegisterHotKey(ModifierKeys modifier, Keys key) + { + // increment the counter. + _currentId = _currentId + 1; + + // register the hot key. + if (!RegisterHotKey(_window.Handle, _currentId, (uint)modifier, (uint)key)) + throw new InvalidOperationException("Couldn’t register the hot key."); + } + + /// + /// A hot key has been pressed. + /// + public event EventHandler KeyPressed; + + #region IDisposable Members + + public void Dispose() + { + // unregister all the registered hot keys. + for (int i = _currentId; i > 0; i--) + { + UnregisterHotKey(_window.Handle, i); + } + + // dispose the inner native window. + _window.Dispose(); + } + + #endregion + } + + /// + /// Event Args for the event that is fired after the hot key has been pressed. + /// + public class KeyPressedEventArgs : EventArgs + { + private ModifierKeys _modifier; + private Keys _key; + + internal KeyPressedEventArgs(ModifierKeys modifier, Keys key) + { + _modifier = modifier; + _key = key; + } + + public ModifierKeys Modifier + { + get { return _modifier; } + } + + public Keys Key + { + get { return _key; } + } + } + + /// + /// The enumeration of possible modifiers. + /// + [Flags] + public enum ModifierKeys : uint + { + Alt = 1, + Control = 2, + Shift = 4, + Win = 8 + } +} diff --git a/MangaColor/MangaColor/MangaColor.csproj b/MangaColor/MangaColor/MangaColor.csproj new file mode 100644 index 0000000..aebcdda --- /dev/null +++ b/MangaColor/MangaColor/MangaColor.csproj @@ -0,0 +1,132 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {4F2A4383-A018-4EE3-AC7C-8836307467AF} + WinExe + Properties + MangaColor2 + MangaColor2 + v2.0 + 512 + mag2.ico + + + + + 3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + true + + + + + + + + + + + + Glass.cs + Form + + + Form + + + Fmark.cs + + + + Form1.cs + + + + + + Fmark.cs + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + + + \ No newline at end of file diff --git a/MangaColor/MangaColor/Program.cs b/MangaColor/MangaColor/Program.cs new file mode 100644 index 0000000..91c4c9a --- /dev/null +++ b/MangaColor/MangaColor/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace MangaColor2 +{ + static class Program + { + /// + /// Punto de entrada principal para la aplicación. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/MangaColor/MangaColor/Properties/AssemblyInfo.cs b/MangaColor/MangaColor/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4c579f8 --- /dev/null +++ b/MangaColor/MangaColor/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// La información general sobre un ensamblado se controla mediante el siguiente +// conjunto de atributos. Cambie estos atributos para modificar la información +// asociada con un ensamblado. +[assembly: AssemblyTitle("MangaColor2")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("HP")] +[assembly: AssemblyProduct("MangaColor2")] +[assembly: AssemblyCopyright("Copyright © HP 2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Si establece ComVisible como false, los tipos de este ensamblado no estarán visibles +// para los componentes COM. Si necesita obtener acceso a un tipo de este ensamblado desde +// COM, establezca el atributo ComVisible como true en este tipo. +[assembly: ComVisible(false)] + +// El siguiente GUID sirve como identificador de typelib si este proyecto se expone a COM +[assembly: Guid("18fe3895-6bc1-4374-ae47-e3e22911ee91")] + +// La información de versión de un ensamblado consta de los cuatro valores siguientes: +// +// Versión principal +// Versión secundaria +// Número de versión de compilación +// Revisión +// +// Puede especificar todos los valores o establecer como predeterminados los números de versión de compilación y de revisión +// mediante el asterisco ('*'), como se muestra a continuación: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MangaColor/MangaColor/Properties/Resources.Designer.cs b/MangaColor/MangaColor/Properties/Resources.Designer.cs new file mode 100644 index 0000000..a51f612 --- /dev/null +++ b/MangaColor/MangaColor/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34209 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MangaColor2.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [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("MangaColor2.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/MangaColor/MangaColor/Properties/Resources.resx b/MangaColor/MangaColor/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/MangaColor/MangaColor/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MangaColor/MangaColor/Properties/Settings.Designer.cs b/MangaColor/MangaColor/Properties/Settings.Designer.cs new file mode 100644 index 0000000..f6db0e4 --- /dev/null +++ b/MangaColor/MangaColor/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.34209 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MangaColor2.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/MangaColor/MangaColor/Properties/Settings.settings b/MangaColor/MangaColor/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/MangaColor/MangaColor/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/MangaColor/MangaColor/app.config b/MangaColor/MangaColor/app.config new file mode 100644 index 0000000..0df7832 --- /dev/null +++ b/MangaColor/MangaColor/app.config @@ -0,0 +1,3 @@ + + + diff --git a/MangaColor/MangaColor/mag2.ico b/MangaColor/MangaColor/mag2.ico new file mode 100644 index 0000000..e27178a --- /dev/null +++ b/MangaColor/MangaColor/mag2.ico Binary files differ