diff --git a/VAR.Toolbox/Code/GDI32.cs b/VAR.Toolbox/Code/GDI32.cs
new file mode 100644
index 0000000..c401163
--- /dev/null
+++ b/VAR.Toolbox/Code/GDI32.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Runtime.InteropServices;
+
+namespace VAR.Toolbox.Code
+{
+ public class GDI32
+ {
+ public const int SRCCOPY = 0x00CC0020; // BitBlt dwRop parameter
+
+ [DllImport("gdi32.dll")]
+ public static extern bool BitBlt(IntPtr hObject, int nXDest, int nYDest,
+ int nWidth, int nHeight, IntPtr hObjectSource,
+ int nXSrc, int nYSrc, int dwRop);
+ [DllImport("gdi32.dll")]
+ public static extern IntPtr CreateCompatibleBitmap(IntPtr hDC, int nWidth,
+ int nHeight);
+ [DllImport("gdi32.dll")]
+ public static extern IntPtr CreateCompatibleDC(IntPtr hDC);
+ [DllImport("gdi32.dll")]
+ public static extern bool DeleteDC(IntPtr hDC);
+ [DllImport("gdi32.dll")]
+ public static extern bool DeleteObject(IntPtr hObject);
+ [DllImport("gdi32.dll")]
+ public static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject);
+ }
+}
diff --git a/VAR.Toolbox/Code/Screenshooter.cs b/VAR.Toolbox/Code/Screenshooter.cs
new file mode 100644
index 0000000..0bf90c6
--- /dev/null
+++ b/VAR.Toolbox/Code/Screenshooter.cs
@@ -0,0 +1,78 @@
+using System;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace VAR.Toolbox.Code
+{
+ public class Screenshooter
+ {
+
+ /////
+ ///// Creates an Image object containing a screen shot of the entire desktop
+ /////
+ /////
+ //public static Image CaptureScreen()
+ //{
+ // return CaptureWindow(User32.GetDesktopWindow());
+ //}
+
+ public static Bitmap CaptureScreen()
+ {
+ // Determine the size of the "virtual screen", which includes all monitors.
+ int screenLeft = SystemInformation.VirtualScreen.Left;
+ int screenTop = SystemInformation.VirtualScreen.Top;
+ int screenWidth = SystemInformation.VirtualScreen.Width;
+ int screenHeight = SystemInformation.VirtualScreen.Height;
+
+ // Create a bitmap of the appropriate size to receive the screenshot.
+ Bitmap bmp = new Bitmap(screenWidth, screenHeight);
+
+ // Draw the screenshot into our bitmap.
+ using (Graphics g = Graphics.FromImage(bmp))
+ {
+ g.CopyFromScreen(screenLeft, screenTop, 0, 0, bmp.Size);
+ }
+ return bmp;
+ }
+
+ ///
+ /// Creates an Image object containing a screen shot of a specific window
+ ///
+ /// The handle to the window. (In windows forms, this is obtained by the Handle property)
+ ///
+ public static Image CaptureWindow(IntPtr handle)
+ {
+ // get te hDC of the target window
+ IntPtr hdcSrc = User32.GetWindowDC(handle);
+ // get the size
+ User32.RECT windowRect = new User32.RECT();
+ User32.GetWindowRect(handle, ref windowRect);
+ int width = windowRect.right - windowRect.left;
+ int height = windowRect.bottom - windowRect.top;
+ // create a device context we can copy to
+ IntPtr hdcDest = GDI32.CreateCompatibleDC(hdcSrc);
+ // create a bitmap we can copy it to,
+ // using GetDeviceCaps to get the width/height
+ IntPtr hBitmap = GDI32.CreateCompatibleBitmap(hdcSrc, width, height);
+ // select the bitmap object
+ IntPtr hOld = GDI32.SelectObject(hdcDest, hBitmap);
+ // bitblt over
+ GDI32.BitBlt(hdcDest, 0, 0, width, height, hdcSrc, 0, 0, GDI32.SRCCOPY);
+ // restore selection
+ GDI32.SelectObject(hdcDest, hOld);
+ // clean up
+ GDI32.DeleteDC(hdcDest);
+ User32.ReleaseDC(handle, hdcSrc);
+
+ // get a .NET image object for it
+ Image img = Image.FromHbitmap(hBitmap);
+ // free up the Bitmap object
+ GDI32.DeleteObject(hBitmap);
+
+ return img;
+ }
+
+
+
+ }
+}
diff --git a/VAR.Toolbox/Code/User32.cs b/VAR.Toolbox/Code/User32.cs
index c96f2da..32ee234 100644
--- a/VAR.Toolbox/Code/User32.cs
+++ b/VAR.Toolbox/Code/User32.cs
@@ -142,5 +142,23 @@ namespace VAR.Toolbox.Code
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
+
+ [StructLayout(LayoutKind.Sequential)]
+ public struct RECT
+ {
+ public int left;
+ public int top;
+ public int right;
+ public int bottom;
+ }
+
+ [DllImport("user32.dll")]
+ public static extern IntPtr GetDesktopWindow();
+ [DllImport("user32.dll")]
+ public static extern IntPtr GetWindowDC(IntPtr hWnd);
+ [DllImport("user32.dll")]
+ public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC);
+ [DllImport("user32.dll")]
+ public static extern IntPtr GetWindowRect(IntPtr hWnd, ref RECT rect);
}
}
\ No newline at end of file
diff --git a/VAR.Toolbox/UI/FrmScreenshooter.Designer.cs b/VAR.Toolbox/UI/FrmScreenshooter.Designer.cs
new file mode 100644
index 0000000..266057d
--- /dev/null
+++ b/VAR.Toolbox/UI/FrmScreenshooter.Designer.cs
@@ -0,0 +1,79 @@
+namespace VAR.Toolbox.UI
+{
+ partial class FrmScreenshooter
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.btnScreenshoot = new System.Windows.Forms.Button();
+ this.picViewer = new VAR.Toolbox.Controls.CtrImageViewer();
+ ((System.ComponentModel.ISupportInitialize)(this.picViewer)).BeginInit();
+ this.SuspendLayout();
+ //
+ // btnScreenshoot
+ //
+ this.btnScreenshoot.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.btnScreenshoot.Location = new System.Drawing.Point(12, 390);
+ this.btnScreenshoot.Name = "btnScreenshoot";
+ this.btnScreenshoot.Size = new System.Drawing.Size(75, 23);
+ this.btnScreenshoot.TabIndex = 1;
+ this.btnScreenshoot.Text = "Screenshoot";
+ this.btnScreenshoot.UseVisualStyleBackColor = true;
+ this.btnScreenshoot.Click += new System.EventHandler(this.btnScreenshoot_Click);
+ //
+ // picViewer
+ //
+ this.picViewer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.picViewer.BackColor = System.Drawing.Color.Black;
+ this.picViewer.ImageShow = null;
+ this.picViewer.Location = new System.Drawing.Point(13, 13);
+ this.picViewer.Name = "picViewer";
+ this.picViewer.Size = new System.Drawing.Size(580, 371);
+ this.picViewer.TabIndex = 0;
+ this.picViewer.TabStop = false;
+ //
+ // FrmScreenshooter
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(605, 425);
+ this.Controls.Add(this.btnScreenshoot);
+ this.Controls.Add(this.picViewer);
+ this.Name = "FrmScreenshooter";
+ this.Text = "FrmScreenshooter";
+ ((System.ComponentModel.ISupportInitialize)(this.picViewer)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private VAR.Toolbox.Controls.CtrImageViewer picViewer;
+ private System.Windows.Forms.Button btnScreenshoot;
+ }
+}
\ No newline at end of file
diff --git a/VAR.Toolbox/UI/FrmScreenshooter.cs b/VAR.Toolbox/UI/FrmScreenshooter.cs
new file mode 100644
index 0000000..41a9f6f
--- /dev/null
+++ b/VAR.Toolbox/UI/FrmScreenshooter.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Windows.Forms;
+using VAR.Toolbox.Code;
+
+namespace VAR.Toolbox.UI
+{
+ public partial class FrmScreenshooter : Form
+ {
+ public FrmScreenshooter()
+ {
+ InitializeComponent();
+ }
+
+ private void btnScreenshoot_Click(object sender, EventArgs e)
+ {
+ picViewer.ImageShow = Screenshooter.CaptureScreen();
+ }
+ }
+}
diff --git a/VAR.Toolbox/UI/FrmToolbox.Designer.cs b/VAR.Toolbox/UI/FrmToolbox.Designer.cs
index 0d9100e..4682a9a 100644
--- a/VAR.Toolbox/UI/FrmToolbox.Designer.cs
+++ b/VAR.Toolbox/UI/FrmToolbox.Designer.cs
@@ -40,13 +40,15 @@
this.btnExit = new System.Windows.Forms.Button();
this.btnTestSoapService = new System.Windows.Forms.Button();
this.btnTestRestService = new System.Windows.Forms.Button();
+ this.btnScreenshooter = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// btnBase64
//
- this.btnBase64.Location = new System.Drawing.Point(9, 52);
+ this.btnBase64.Location = new System.Drawing.Point(14, 80);
+ this.btnBase64.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.btnBase64.Name = "btnBase64";
- this.btnBase64.Size = new System.Drawing.Size(165, 34);
+ this.btnBase64.Size = new System.Drawing.Size(248, 52);
this.btnBase64.TabIndex = 0;
this.btnBase64.Text = "Base64";
this.btnBase64.UseVisualStyleBackColor = true;
@@ -54,9 +56,10 @@
//
// btnProxyCmd
//
- this.btnProxyCmd.Location = new System.Drawing.Point(9, 92);
+ this.btnProxyCmd.Location = new System.Drawing.Point(14, 142);
+ this.btnProxyCmd.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.btnProxyCmd.Name = "btnProxyCmd";
- this.btnProxyCmd.Size = new System.Drawing.Size(165, 36);
+ this.btnProxyCmd.Size = new System.Drawing.Size(248, 55);
this.btnProxyCmd.TabIndex = 1;
this.btnProxyCmd.Text = "ProxyCmd";
this.btnProxyCmd.UseVisualStyleBackColor = true;
@@ -64,9 +67,10 @@
//
// btnWebcam
//
- this.btnWebcam.Location = new System.Drawing.Point(9, 135);
+ this.btnWebcam.Location = new System.Drawing.Point(14, 208);
+ this.btnWebcam.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.btnWebcam.Name = "btnWebcam";
- this.btnWebcam.Size = new System.Drawing.Size(165, 36);
+ this.btnWebcam.Size = new System.Drawing.Size(248, 55);
this.btnWebcam.TabIndex = 2;
this.btnWebcam.Text = "Webcam";
this.btnWebcam.UseVisualStyleBackColor = true;
@@ -74,10 +78,9 @@
//
// btnTunnelTCP
//
- this.btnTunnelTCP.Location = new System.Drawing.Point(9, 175);
- this.btnTunnelTCP.Margin = new System.Windows.Forms.Padding(2);
+ this.btnTunnelTCP.Location = new System.Drawing.Point(14, 269);
this.btnTunnelTCP.Name = "btnTunnelTCP";
- this.btnTunnelTCP.Size = new System.Drawing.Size(165, 36);
+ this.btnTunnelTCP.Size = new System.Drawing.Size(248, 55);
this.btnTunnelTCP.TabIndex = 5;
this.btnTunnelTCP.Text = "TunnelTCP";
this.btnTunnelTCP.UseVisualStyleBackColor = true;
@@ -88,28 +91,27 @@
this.lblToolbox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lblToolbox.Font = new System.Drawing.Font("Arial Narrow", 28F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.lblToolbox.Location = new System.Drawing.Point(9, 9);
- this.lblToolbox.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+ this.lblToolbox.Location = new System.Drawing.Point(14, 14);
this.lblToolbox.Name = "lblToolbox";
- this.lblToolbox.Size = new System.Drawing.Size(336, 40);
+ this.lblToolbox.Size = new System.Drawing.Size(504, 62);
this.lblToolbox.TabIndex = 6;
this.lblToolbox.Text = "Toolbox";
this.lblToolbox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// pnlSuspension1
//
- this.pnlSuspension1.Location = new System.Drawing.Point(180, 241);
- this.pnlSuspension1.Margin = new System.Windows.Forms.Padding(1);
+ this.pnlSuspension1.Location = new System.Drawing.Point(270, 371);
+ this.pnlSuspension1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlSuspension1.Name = "pnlSuspension1";
- this.pnlSuspension1.Size = new System.Drawing.Size(165, 114);
+ this.pnlSuspension1.Size = new System.Drawing.Size(248, 175);
this.pnlSuspension1.TabIndex = 4;
//
// pnlCover1
//
- this.pnlCover1.Location = new System.Drawing.Point(12, 241);
- this.pnlCover1.Margin = new System.Windows.Forms.Padding(1);
+ this.pnlCover1.Location = new System.Drawing.Point(18, 371);
+ this.pnlCover1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
this.pnlCover1.Name = "pnlCover1";
- this.pnlCover1.Size = new System.Drawing.Size(162, 114);
+ this.pnlCover1.Size = new System.Drawing.Size(243, 175);
this.pnlCover1.TabIndex = 3;
//
// niTray
@@ -120,9 +122,10 @@
//
// btnExit
//
- this.btnExit.Location = new System.Drawing.Point(12, 359);
+ this.btnExit.Location = new System.Drawing.Point(18, 552);
+ this.btnExit.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.btnExit.Name = "btnExit";
- this.btnExit.Size = new System.Drawing.Size(333, 29);
+ this.btnExit.Size = new System.Drawing.Size(500, 45);
this.btnExit.TabIndex = 7;
this.btnExit.Text = "Exit";
this.btnExit.UseVisualStyleBackColor = true;
@@ -130,9 +133,10 @@
//
// btnTestSoapService
//
- this.btnTestSoapService.Location = new System.Drawing.Point(180, 52);
+ this.btnTestSoapService.Location = new System.Drawing.Point(270, 80);
+ this.btnTestSoapService.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.btnTestSoapService.Name = "btnTestSoapService";
- this.btnTestSoapService.Size = new System.Drawing.Size(165, 34);
+ this.btnTestSoapService.Size = new System.Drawing.Size(248, 52);
this.btnTestSoapService.TabIndex = 8;
this.btnTestSoapService.Text = "TestSoapService";
this.btnTestSoapService.UseVisualStyleBackColor = true;
@@ -140,19 +144,32 @@
//
// btnTestRestService
//
- this.btnTestRestService.Location = new System.Drawing.Point(180, 92);
+ this.btnTestRestService.Location = new System.Drawing.Point(270, 142);
+ this.btnTestRestService.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.btnTestRestService.Name = "btnTestRestService";
- this.btnTestRestService.Size = new System.Drawing.Size(165, 36);
+ this.btnTestRestService.Size = new System.Drawing.Size(248, 55);
this.btnTestRestService.TabIndex = 9;
this.btnTestRestService.Text = "TestRestService";
this.btnTestRestService.UseVisualStyleBackColor = true;
this.btnTestRestService.Click += new System.EventHandler(this.btnTestRestService_Click);
//
+ // btnScreenshooter
+ //
+ this.btnScreenshooter.Location = new System.Drawing.Point(270, 208);
+ this.btnScreenshooter.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.btnScreenshooter.Name = "btnScreenshooter";
+ this.btnScreenshooter.Size = new System.Drawing.Size(248, 55);
+ this.btnScreenshooter.TabIndex = 10;
+ this.btnScreenshooter.Text = "Screenshooter";
+ this.btnScreenshooter.UseVisualStyleBackColor = true;
+ this.btnScreenshooter.Click += new System.EventHandler(this.btnScreenshooter_Click);
+ //
// FrmToolbox
//
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(352, 400);
+ this.ClientSize = new System.Drawing.Size(528, 615);
+ this.Controls.Add(this.btnScreenshooter);
this.Controls.Add(this.btnTestRestService);
this.Controls.Add(this.btnTestSoapService);
this.Controls.Add(this.btnExit);
@@ -164,6 +181,7 @@
this.Controls.Add(this.btnProxyCmd);
this.Controls.Add(this.btnBase64);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
+ this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.MaximizeBox = false;
this.Name = "FrmToolbox";
this.Text = "Toolbox";
@@ -187,6 +205,7 @@
private System.Windows.Forms.Button btnExit;
private System.Windows.Forms.Button btnTestSoapService;
private System.Windows.Forms.Button btnTestRestService;
+ private System.Windows.Forms.Button btnScreenshooter;
}
}
diff --git a/VAR.Toolbox/UI/FrmToolbox.cs b/VAR.Toolbox/UI/FrmToolbox.cs
index 39fac86..e5924b6 100644
--- a/VAR.Toolbox/UI/FrmToolbox.cs
+++ b/VAR.Toolbox/UI/FrmToolbox.cs
@@ -105,6 +105,11 @@ namespace VAR.Toolbox.UI
CreateWindow(typeof(FrmTestRestService));
}
+ private void btnScreenshooter_Click(object sender, EventArgs e)
+ {
+ CreateWindow(typeof(FrmScreenshooter));
+ }
+
#endregion UI events
#region Window handling
diff --git a/VAR.Toolbox/VAR.Toolbox.csproj b/VAR.Toolbox/VAR.Toolbox.csproj
index 11e3252..3355b22 100644
--- a/VAR.Toolbox/VAR.Toolbox.csproj
+++ b/VAR.Toolbox/VAR.Toolbox.csproj
@@ -83,8 +83,10 @@
+
+
@@ -106,6 +108,12 @@
FrmProxyCmd.cs
+
+ Form
+
+
+ FrmScreenshooter.cs
+
Form