all groups > dotnet windows forms designtime > december 2004 >
You're in the dotnet windows forms designtime group:
Not able to take screen shots of "S to make presentation
dotnet windows forms designtime:
[quoted text, click to view] "Rajat Tandon" <rajat.tandon@siliconbiztech.com> wrote in message news:OtJWm2V2EHA.2112@TK2MSFTNGP15.phx.gbl... > Hello there, > > I am relatively new to the newsgroups and C#. I have never been > disappointed > with the groups and always got the prompt replies to my queries.This is > yet > another strange issue, I am facing. Please please help me to solve this as > soon as possible. > > So here we go ... > > I am not able to take the screen shot of the windows form based "Smart > Client" application at run time.This is urgently required for making the > presentation . > > Till now I have tried 4 methods... > -------------------------------- > 1) Using IrfanView software > 2) Using Snag-it > 3) Using Camtasia_Capture&menumaker > 4) Using the program which is given below... >
How about 5) Hit [Prt Scr], launch mspaint and paste. David
I suspect that the poster meant programmatically when he said "at runtime" so I doubt print screen is going to meet his needs. But, that said, it occurs to me that a simple way (and I haven't tested this, so I may be wrong), might be to simply send the print-screen keystroke via the Win32 SendInput() API function and then get the bitmap out of the clipboard. Pete "David Browne" <davidbaxterbrowne no potted meat@hotmail.com> wrote in message news:OPWG0NW2EHA.3128@TK2MSFTNGP14.phx.gbl... [quoted text, click to view] > "Rajat Tandon" <rajat.tandon@siliconbiztech.com> wrote in message > news:OtJWm2V2EHA.2112@TK2MSFTNGP15.phx.gbl... > > Hello there, > > > > I am relatively new to the newsgroups and C#. I have never been > > disappointed > > with the groups and always got the prompt replies to my queries.This is > > yet > > another strange issue, I am facing. Please please help me to solve this as > > soon as possible. > > > > So here we go ... > > > > I am not able to take the screen shot of the windows form based "Smart > > Client" application at run time.This is urgently required for making the > > presentation . > > > > Till now I have tried 4 methods... > > -------------------------------- > > 1) Using IrfanView software > > 2) Using Snag-it > > 3) Using Camtasia_Capture&menumaker > > 4) Using the program which is given below... > > > > How about > 5) Hit [Prt Scr], launch mspaint and paste. > > David > >
If you have Windows XP, you can use the "PrintWindow" API. It will take a snapshot of a window and put it into a DC. Look in MSDN for info on the PrintWindow() API. You should be able to replace the BitBlt() call with a PrintWindow call, and then your code should work. It would probably look something like this (UNTESTED CODE): [System.Runtime.InteropServices.DllImportAttribute("user32.dll")] private static extern bool PrintWindow ( IntPtr hWnd, IntPtr hDC, int nFlags ); private void Capture_Screen(string filename) { Image MyImage = new Bitmap(this.Width, this.Height); Graphics g = Graphics.FromImage(MyImage); IntPtr dc = g.GetHdc(); PrintWindow(this.Handle,dc,0); g.ReleaseHdc(dc); MyImage.Save(@"d:\rajat\screen_captures\" + filename + ".jpg" ,System.Drawing.Imaging.ImageFormat.Jpeg); } If you don't have XP - well, I'm not sure what to tell you there. HTH - Scott [quoted text, click to view] "Rajat Tandon" <rajat.tandon@siliconbiztech.com> wrote in message news:OtJWm2V2EHA.2112@TK2MSFTNGP15.phx.gbl... > Hello there, > > I am relatively new to the newsgroups and C#. I have never been disappointed > with the groups and always got the prompt replies to my queries.This is yet > another strange issue, I am facing. Please please help me to solve this as > soon as possible. > > So here we go ... > > I am not able to take the screen shot of the windows form based "Smart > Client" application at run time.This is urgently required for making the > presentation . > > Till now I have tried 4 methods... > -------------------------------- > 1) Using IrfanView software > 2) Using Snag-it > 3) Using Camtasia_Capture&menumaker > 4) Using the program which is given below... > > using System; > using System.Drawing; > > using System.Collections; > > using System.ComponentModel; > > using System.Windows.Forms; > > using System.Data; > > using System.Reflection; > > using Microsoft.Win32 ; > > using System.Runtime.InteropServices; > > namespace WindowsApplication1 > > { > > /// <summary> > > /// Summary description for Form1. > > /// </summary> > > public class Form1 : System.Windows.Forms.Form > > { > > private System.Windows.Forms.Timer timer1; > > private System.ComponentModel.IContainer components; > > private System.Windows.Forms.Button button1; > > > > int i; > > > > public Form1() > > { > > // > > // Required for Windows Form Designer support > > // > > InitializeComponent(); > > i=0; > > // > > // TODO: Add any constructor code after InitializeComponent call > > // > > } > > /// <summary> > > /// Clean up any resources being used. > > /// </summary> > > protected override void Dispose( bool disposing ) > > { > > if( disposing ) > > { > > if (components != null) > > { > > components.Dispose(); > > } > > } > > base.Dispose( disposing ); > > } > > > > [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] > > private static extern bool BitBlt > > ( > > IntPtr hdcDest, // handle to destination DC > > int nXDest, // x-coord of destination upper-left corner > > int nYDest, // y-coord of destination upper-left corner > > int nWidth, // width of destination rectangle > > int nHeight, // height of destination rectangle > > IntPtr hdcSrc, // handle to source DC > > int nXSrc, // x-coordinate of source upper-left corner > > int nYSrc, // y-coordinate of source upper-left corner > > System.Int32 dwRop // raster operation code > > ); > > private void Capture_Screen(string filename) > > { > > Graphics g1 = this.CreateGraphics(); > > Image MyImage = new Bitmap(this.ClientRectangle.Width, > > this.ClientRectangle.Height, g1); > > MyImage = new Bitmap(this.ClientRectangle.Width, > > this.ClientRectangle.Height, g1); > > Graphics g2 = Graphics.FromImage(MyImage); > > IntPtr dc1 = g1.GetHdc(); > > IntPtr dc2 = g2.GetHdc(); > > BitBlt(dc2, 0, 0, this.ClientRectangle.Width, > > this.ClientRectangle.Height, dc1, 0, 0, 13369376); > > g1.ReleaseHdc(dc1); > > g2.ReleaseHdc(dc2); > > MyImage.Save(@"d:\rajat\screen_captures\" + filename + ".jpg" > ,System.Drawing.Imaging.ImageFormat.Jpeg); > > } > > > > #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() > > { > > this.components = new System.ComponentModel.Container(); > > this.timer1 = new System.Windows.Forms.Timer(this.components); > > this.button1 = new System.Windows.Forms.Button(); > > this.SuspendLayout(); > > // > > // timer1 > > // > > this.timer1.Enabled = true; > > this.timer1.Interval = 1000; > > this.timer1.Tick += new System.EventHandler(this.timer1_Tick); > > // > > // button1 > > // > > this.button1.Location = new System.Drawing.Point(80, 32); > > this.button1.Name = "button1"; > > this.button1.TabIndex = 0; > > this.button1.Text = "button1"; > > this.button1.Click += new System.EventHandler(this.button1_Click); > > // > > // Form1 > > // > > this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); > > this.ClientSize = new System.Drawing.Size(232, 101); > > this.Controls.Add(this.button1); > > this.Name = "Form1"; > > this.Text = "Form1"; > > this.WindowState = System.Windows.Forms.FormWindowState.Maximized; > > this.Load += new System.EventHandler(this.Form1_Load); > > this.ResumeLayout(false); > > } > > #endregion > > /// <summary> > > /// The main entry point for the application. > > /// </summary> > > [STAThread] > > static void Main() > > { > > Application.Run(new Form1()); > > } > > private void Form1_Load(object sender, System.EventArgs e) > > { > > this.Hide(); > > } > > private void Connecticon_Click(object sender, System.EventArgs e) > > { > > > } > > > > private void timer1_Tick(object sender, System.EventArgs e) > > { > > > string filename; > > try > > { > > i=i+1; > > filename= "img" + i.ToString() ; > > > Capture_Screen(filename); > > } > > catch(Exception exx) > > { > > MessageBox.Show(exx.Message.ToString()); > > > this.Dispose(); > > Application.Exit(); > > } > > > > } > > private void button1_Click(object sender, System.EventArgs e) > > { > > > } > > } > > } > > > Problem Description > ---------------------- > > These programs are taking the screenshots of the wallpaper behind the > windows application along with the mouse cursor .So it is apparent that > mouse is clicking on the particular points of screen where menus or button > exist in my application but doesn't take the screen shot of form. Isn't it > strange? Also these programs are taking the snapshot of other windows based > application. >
Hello there, I am relatively new to the newsgroups and C#. I have never been disappointed with the groups and always got the prompt replies to my queries.This is yet another strange issue, I am facing. Please please help me to solve this as soon as possible. So here we go ... I am not able to take the screen shot of the windows form based "Smart Client" application at run time.This is urgently required for making the presentation . Till now I have tried 4 methods... -------------------------------- 1) Using IrfanView software 2) Using Snag-it 3) Using Camtasia_Capture&menumaker 4) Using the program which is given below... using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Reflection; using Microsoft.Win32 ; using System.Runtime.InteropServices; namespace WindowsApplication1 { /// <summary> /// Summary description for Form1. /// </summary> public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Timer timer1; private System.ComponentModel.IContainer components; private System.Windows.Forms.Button button1; int i; public Form1() { // // Required for Windows Form Designer support // InitializeComponent(); i=0; // // TODO: Add any constructor code after InitializeComponent call // } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] private static extern bool BitBlt ( IntPtr hdcDest, // handle to destination DC int nXDest, // x-coord of destination upper-left corner int nYDest, // y-coord of destination upper-left corner int nWidth, // width of destination rectangle int nHeight, // height of destination rectangle IntPtr hdcSrc, // handle to source DC int nXSrc, // x-coordinate of source upper-left corner int nYSrc, // y-coordinate of source upper-left corner System.Int32 dwRop // raster operation code ); private void Capture_Screen(string filename) { Graphics g1 = this.CreateGraphics(); Image MyImage = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height, g1); MyImage = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height, g1); Graphics g2 = Graphics.FromImage(MyImage); IntPtr dc1 = g1.GetHdc(); IntPtr dc2 = g2.GetHdc(); BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376); g1.ReleaseHdc(dc1); g2.ReleaseHdc(dc2); MyImage.Save(@"d:\rajat\screen_captures\" + filename + ".jpg" ,System.Drawing.Imaging.ImageFormat.Jpeg); } #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() { this.components = new System.ComponentModel.Container(); this.timer1 = new System.Windows.Forms.Timer(this.components); this.button1 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // timer1 // this.timer1.Enabled = true; this.timer1.Interval = 1000; this.timer1.Tick += new System.EventHandler(this.timer1_Tick); // // button1 // this.button1.Location = new System.Drawing.Point(80, 32); this.button1.Name = "button1"; this.button1.TabIndex = 0; this.button1.Text = "button1"; this.button1.Click += new System.EventHandler(this.button1_Click); // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(232, 101); this.Controls.Add(this.button1); this.Name = "Form1"; this.Text = "Form1"; this.WindowState = System.Windows.Forms.FormWindowState.Maximized; this.Load += new System.EventHandler(this.Form1_Load); this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new Form1()); } private void Form1_Load(object sender, System.EventArgs e) { this.Hide(); } private void Connecticon_Click(object sender, System.EventArgs e) { } private void timer1_Tick(object sender, System.EventArgs e) { string filename; try { i=i+1; filename= "img" + i.ToString() ; Capture_Screen(filename); } catch(Exception exx) { MessageBox.Show(exx.Message.ToString()); this.Dispose(); Application.Exit(); } } private void button1_Click(object sender, System.EventArgs e) { } } } Problem Description ---------------------- These programs are taking the screenshots of the wallpaper behind the windows application along with the mouse cursor .So it is apparent that mouse is clicking on the particular points of screen where menus or button exist in my application but doesn't take the screen shot of form. Isn't it strange? Also these programs are taking the snapshot of other windows based application. I am able to take the snapshot of my application (which is not visible to above programs) using "PrintScreen" and pasting it in the paint.Also I am able to take the snapshots of some of the forms of application (using above 4 programs), which have a label to display the message and some background image setup at runtime. Let me tell you that my windows application uses the skins which can be changed dynamically using XML and there are few background images setup at runtime for the forms. I think that the problem is because of some property of the application or windows form. I believe that I have described the problem well enough to understand. Now the ball is in your court. Please help me.......... Regards, Rajat Tandon. A DotNet Learner.
Hi David and everybody, Thank you for early reply. Of course PrintScreen is an option but not a good one, As I have to make presentation. Print Screen and paste will require me to do this for thousands of time.Hence I want the automated way. Looking for more replies Bye Rajat Tandon A DotNet Learner "David Browne" <davidbaxterbrowne no potted meat@hotmail.com> wrote in message news:OPWG0NW2EHA.3128@TK2MSFTNGP14.phx.gbl... [quoted text, click to view] > "Rajat Tandon" <rajat.tandon@siliconbiztech.com> wrote in message > news:OtJWm2V2EHA.2112@TK2MSFTNGP15.phx.gbl... > > Hello there, > > > > I am relatively new to the newsgroups and C#. I have never been > > disappointed > > with the groups and always got the prompt replies to my queries.This is > > yet > > another strange issue, I am facing. Please please help me to solve this as > > soon as possible. > > > > So here we go ... > > > > I am not able to take the screen shot of the windows form based "Smart > > Client" application at run time.This is urgently required for making the > > presentation . > > > > Till now I have tried 4 methods... > > -------------------------------- > > 1) Using IrfanView software > > 2) Using Snag-it > > 3) Using Camtasia_Capture&menumaker > > 4) Using the program which is given below... > > > > How about > 5) Hit [Prt Scr], launch mspaint and paste. > > David > >
Scott, As you suggested about using the PrintWindow API . It is a good step for Windows XP and to write my own code.Thank you for adding this to my knowledge but I am more interested with the defect (if any) in my application. Is there any property of the Window's form/.Net Framework which is giving us trouble. There are already a no. of good programs available to capture the screen and I have already tried 3 of them as written earlier(Camastasia,Snagit,Irfanview) and one of my own code.All of them were unsuccessful because of some problem with the application itself. I am very much sure that all of the new code will only add into the unsuccessful list. Hence please suggest the possible causes of the failure in the application itself... [quoted text, click to view] "Scott McChesney" <scott.mcchesneyNOSPAM@us.army.mil> wrote in message news:uXLRI4W2EHA.3120@TK2MSFTNGP12.phx.gbl... > If you have Windows XP, you can use the "PrintWindow" API. It will take a > snapshot of a window and put it into a DC. > > Look in MSDN for info on the PrintWindow() API. You should be able to > replace the BitBlt() call with a PrintWindow call, and then your code should > work. It would probably look something like this (UNTESTED CODE): > > [System.Runtime.InteropServices.DllImportAttribute("user32.dll")] > private static extern bool PrintWindow > ( > IntPtr hWnd, > IntPtr hDC, > int nFlags > ); > > private void Capture_Screen(string filename) > { > Image MyImage = new Bitmap(this.Width, this.Height); > Graphics g = Graphics.FromImage(MyImage); > IntPtr dc = g.GetHdc(); > > PrintWindow(this.Handle,dc,0); > g.ReleaseHdc(dc); > MyImage.Save(@"d:\rajat\screen_captures\" + filename + ".jpg" > ,System.Drawing.Imaging.ImageFormat.Jpeg); > } > > If you don't have XP - well, I'm not sure what to tell you there. > > HTH > > - Scott > > "Rajat Tandon" <rajat.tandon@siliconbiztech.com> wrote in message > news:OtJWm2V2EHA.2112@TK2MSFTNGP15.phx.gbl... > > Hello there, > > > > I am relatively new to the newsgroups and C#. I have never been > disappointed > > with the groups and always got the prompt replies to my queries.This is > yet > > another strange issue, I am facing. Please please help me to solve this as > > soon as possible. > > > > So here we go ... > > > > I am not able to take the screen shot of the windows form based "Smart > > Client" application at run time.This is urgently required for making the > > presentation . > > > > Till now I have tried 4 methods... > > -------------------------------- > > 1) Using IrfanView software > > 2) Using Snag-it > > 3) Using Camtasia_Capture&menumaker > > 4) Using the program which is given below... > > > > using System; > > using System.Drawing; > > > > using System.Collections; > > > > using System.ComponentModel; > > > > using System.Windows.Forms; > > > > using System.Data; > > > > using System.Reflection; > > > > using Microsoft.Win32 ; > > > > using System.Runtime.InteropServices; > > > > namespace WindowsApplication1 > > > > { > > > > /// <summary> > > > > /// Summary description for Form1. > > > > /// </summary> > > > > public class Form1 : System.Windows.Forms.Form > > > > { > > > > private System.Windows.Forms.Timer timer1; > > > > private System.ComponentModel.IContainer components; > > > > private System.Windows.Forms.Button button1; > > > > > > > > int i; > > > > > > > > public Form1() > > > > { > > > > // > > > > // Required for Windows Form Designer support > > > > // > > > > InitializeComponent(); > > > > i=0; > > > > // > > > > // TODO: Add any constructor code after InitializeComponent call > > > > // > > > > } > > > > /// <summary> > > > > /// Clean up any resources being used. > > > > /// </summary> > > > > protected override void Dispose( bool disposing ) > > > > { > > > > if( disposing ) > > > > { > > > > if (components != null) > > > > { > > > > components.Dispose(); > > > > } > > > > } > > > > base.Dispose( disposing ); > > > > } > > > > > > > > [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] > > > > private static extern bool BitBlt > > > > ( > > > > IntPtr hdcDest, // handle to destination DC > > > > int nXDest, // x-coord of destination upper-left corner > > > > int nYDest, // y-coord of destination upper-left corner > > > > int nWidth, // width of destination rectangle > > > > int nHeight, // height of destination rectangle > > > > IntPtr hdcSrc, // handle to source DC > > > > int nXSrc, // x-coordinate of source upper-left corner > > > > int nYSrc, // y-coordinate of source upper-left corner > > > > System.Int32 dwRop // raster operation code > > > > ); > > > > private void Capture_Screen(string filename) > > > > { > > > > Graphics g1 = this.CreateGraphics(); > > > > Image MyImage = new Bitmap(this.ClientRectangle.Width, > > > > this.ClientRectangle.Height, g1); > > > > MyImage = new Bitmap(this.ClientRectangle.Width, > > > > this.ClientRectangle.Height, g1); > > > > Graphics g2 = Graphics.FromImage(MyImage); > > > > IntPtr dc1 = g1.GetHdc(); > > > > IntPtr dc2 = g2.GetHdc(); > > > > BitBlt(dc2, 0, 0, this.ClientRectangle.Width, > > > > this.ClientRectangle.Height, dc1, 0, 0, 13369376); > > > > g1.ReleaseHdc(dc1); > > > > g2.ReleaseHdc(dc2); > > > > MyImage.Save(@"d:\rajat\screen_captures\" + filename + ".jpg" > > ,System.Drawing.Imaging.ImageFormat.Jpeg); > > > > } > > > > > > > > #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() > > > > { > > > > this.components = new System.ComponentModel.Container(); > > > > this.timer1 = new System.Windows.Forms.Timer(this.components); > > > > this.button1 = new System.Windows.Forms.Button(); > > > > this.SuspendLayout(); > > > > // > > > > // timer1 > > > > // > > > > this.timer1.Enabled = true; > > > > this.timer1.Interval = 1000; > > > > this.timer1.Tick += new System.EventHandler(this.timer1_Tick); > > > > // > > > > // button1 > > > > // > > > > this.button1.Location = new System.Drawing.Point(80, 32); > > > > this.button1.Name = "button1"; > > > > this.button1.TabIndex = 0; > > > > this.button1.Text = "button1"; > > > > this.button1.Click += new System.EventHandler(this.button1_Click); > > > > // > > > > // Form1 > > > > // > > > > this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); > > > > this.ClientSize = new System.Drawing.Size(232, 101); > > > > this.Controls.Add(this.button1); > > > > this.Name = "Form1"; > > > > this.Text = "Form1"; > > > > this.WindowState = System.Windows.Forms.FormWindowState.Maximized; > >
Just to add, Right now I am working on Windows 2000 Professional. [quoted text, click to view] "Scott McChesney" <scott.mcchesneyNOSPAM@us.army.mil> wrote in message news:uXLRI4W2EHA.3120@TK2MSFTNGP12.phx.gbl... > If you have Windows XP, you can use the "PrintWindow" API. It will take a > snapshot of a window and put it into a DC. > > Look in MSDN for info on the PrintWindow() API. You should be able to > replace the BitBlt() call with a PrintWindow call, and then your code should > work. It would probably look something like this (UNTESTED CODE): > > [System.Runtime.InteropServices.DllImportAttribute("user32.dll")] > private static extern bool PrintWindow > ( > IntPtr hWnd, > IntPtr hDC, > int nFlags > ); > > private void Capture_Screen(string filename) > { > Image MyImage = new Bitmap(this.Width, this.Height); > Graphics g = Graphics.FromImage(MyImage); > IntPtr dc = g.GetHdc(); > > PrintWindow(this.Handle,dc,0); > g.ReleaseHdc(dc); > MyImage.Save(@"d:\rajat\screen_captures\" + filename + ".jpg" > ,System.Drawing.Imaging.ImageFormat.Jpeg); > } > > If you don't have XP - well, I'm not sure what to tell you there. > > HTH > > - Scott > > "Rajat Tandon" <rajat.tandon@siliconbiztech.com> wrote in message > news:OtJWm2V2EHA.2112@TK2MSFTNGP15.phx.gbl... > > Hello there, > > > > I am relatively new to the newsgroups and C#. I have never been > disappointed > > with the groups and always got the prompt replies to my queries.This is > yet > > another strange issue, I am facing. Please please help me to solve this as > > soon as possible. > > > > So here we go ... > > > > I am not able to take the screen shot of the windows form based "Smart > > Client" application at run time.This is urgently required for making the > > presentation . > > > > Till now I have tried 4 methods... > > -------------------------------- > > 1) Using IrfanView software > > 2) Using Snag-it > > 3) Using Camtasia_Capture&menumaker > > 4) Using the program which is given below... > > > > using System; > > using System.Drawing; > > > > using System.Collections; > > > > using System.ComponentModel; > > > > using System.Windows.Forms; > > > > using System.Data; > > > > using System.Reflection; > > > > using Microsoft.Win32 ; > > > > using System.Runtime.InteropServices; > > > > namespace WindowsApplication1 > > > > { > > > > /// <summary> > > > > /// Summary description for Form1. > > > > /// </summary> > > > > public class Form1 : System.Windows.Forms.Form > > > > { > > > > private System.Windows.Forms.Timer timer1; > > > > private System.ComponentModel.IContainer components; > > > > private System.Windows.Forms.Button button1; > > > > > > > > int i; > > > > > > > > public Form1() > > > > { > > > > // > > > > // Required for Windows Form Designer support > > > > // > > > > InitializeComponent(); > > > > i=0; > > > > // > > > > // TODO: Add any constructor code after InitializeComponent call > > > > // > > > > } > > > > /// <summary> > > > > /// Clean up any resources being used. > > > > /// </summary> > > > > protected override void Dispose( bool disposing ) > > > > { > > > > if( disposing ) > > > > { > > > > if (components != null) > > > > { > > > > components.Dispose(); > > > > } > > > > } > > > > base.Dispose( disposing ); > > > > } > > > > > > > > [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] > > > > private static extern bool BitBlt > > > > ( > > > > IntPtr hdcDest, // handle to destination DC > > > > int nXDest, // x-coord of destination upper-left corner > > > > int nYDest, // y-coord of destination upper-left corner > > > > int nWidth, // width of destination rectangle > > > > int nHeight, // height of destination rectangle > > > > IntPtr hdcSrc, // handle to source DC > > > > int nXSrc, // x-coordinate of source upper-left corner > > > > int nYSrc, // y-coordinate of source upper-left corner > > > > System.Int32 dwRop // raster operation code > > > > ); > > > > private void Capture_Screen(string filename) > > > > { > > > > Graphics g1 = this.CreateGraphics(); > > > > Image MyImage = new Bitmap(this.ClientRectangle.Width, > > > > this.ClientRectangle.Height, g1); > > > > MyImage = new Bitmap(this.ClientRectangle.Width, > > > > this.ClientRectangle.Height, g1); > > > > Graphics g2 = Graphics.FromImage(MyImage); > > > > IntPtr dc1 = g1.GetHdc(); > > > > IntPtr dc2 = g2.GetHdc(); > > > > BitBlt(dc2, 0, 0, this.ClientRectangle.Width, > > > > this.ClientRectangle.Height, dc1, 0, 0, 13369376); > > > > g1.ReleaseHdc(dc1); > > > > g2.ReleaseHdc(dc2); > > > > MyImage.Save(@"d:\rajat\screen_captures\" + filename + ".jpg" > > ,System.Drawing.Imaging.ImageFormat.Jpeg); > > > > } > > > > > > > > #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() > > > > { > > > > this.components = new System.ComponentModel.Container(); > > > > this.timer1 = new System.Windows.Forms.Timer(this.components); > > > > this.button1 = new System.Windows.Forms.Button(); > > > > this.SuspendLayout(); > > > > // > > > > // timer1 > > > > // > > > > this.timer1.Enabled = true; > > > > this.timer1.Interval = 1000; > > > > this.timer1.Tick += new System.EventHandler(this.timer1_Tick); > > > > // > > > > // button1 > > > > // > > > > this.button1.Location = new System.Drawing.Point(80, 32); > > > > this.button1.Name = "button1"; > > > > this.button1.TabIndex = 0; > > > > this.button1.Text = "button1"; > > > > this.button1.Click += new System.EventHandler(this.button1_Click); > > > > // > > > > // Form1 > > > > // > > > > this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); > > > > this.ClientSize = new System.Drawing.Size(232, 101); > > > > this.Controls.Add(this.button1); > > > > this.Name = "Form1"; > > > > this.Text = "Form1"; > > > > this.WindowState = System.Windows.Forms.FormWindowState.Maximized; > > > > this.Load += new System.EventHandler(this.Form1_Load); > > > > this.ResumeLayout(false); > > > > } > > > > #endregion > > > > /// <summary> > > > > /// The main entry point for the application. > > > > /// </summary> > > > > [STAThread] > > > > static void Main() > > > > { > > > > Application.Run(new Form1()); > > > > } > > > > private void Form1_Load(object sender, System.EventArgs e) > > > > { > > > > this.Hide(); > > > > } > > > > private void Connecticon_Click(object sender, System.EventArgs e) > > > > { > > > > > > } > > > > > > > > private void timer1_Tick(object sender, System.EventArgs e) > > > > { > > > > > > string filename; > > > > try > > > > { > >
I found out the solution of the problem... It is as simple as this.AllowTransparency = false; in the loading of forms which are creating the trouble. I read somewhere that there is some known bug related to windows 2000 which is related to the transparency of application but it is still not clear.I would appreciate if someone could explain this in detail or direct me towards a good tutorial Regards, Rajat Tandon. [quoted text, click to view] "Rajat Tandon" <rajat.tandon@siliconbiztech.com> wrote in message news:OtJWm2V2EHA.2112@TK2MSFTNGP15.phx.gbl... > Hello there, > > I am relatively new to the newsgroups and C#. I have never been disappointed > with the groups and always got the prompt replies to my queries.This is yet > another strange issue, I am facing. Please please help me to solve this as > soon as possible. > > So here we go ... > > I am not able to take the screen shot of the windows form based "Smart > Client" application at run time.This is urgently required for making the > presentation . > > Till now I have tried 4 methods... > -------------------------------- > 1) Using IrfanView software > 2) Using Snag-it > 3) Using Camtasia_Capture&menumaker > 4) Using the program which is given below... > > using System; > using System.Drawing; > > using System.Collections; > > using System.ComponentModel; > > using System.Windows.Forms; > > using System.Data; > > using System.Reflection; > > using Microsoft.Win32 ; > > using System.Runtime.InteropServices; > > namespace WindowsApplication1 > > { > > /// <summary> > > /// Summary description for Form1. > > /// </summary> > > public class Form1 : System.Windows.Forms.Form > > { > > private System.Windows.Forms.Timer timer1; > > private System.ComponentModel.IContainer components; > > private System.Windows.Forms.Button button1; > > > > int i; > > > > public Form1() > > { > > // > > // Required for Windows Form Designer support > > // > > InitializeComponent(); > > i=0; > > // > > // TODO: Add any constructor code after InitializeComponent call > > // > > } > > /// <summary> > > /// Clean up any resources being used. > > /// </summary> > > protected override void Dispose( bool disposing ) > > { > > if( disposing ) > > { > > if (components != null) > > { > > components.Dispose(); > > } > > } > > base.Dispose( disposing ); > > } > > > > [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] > > private static extern bool BitBlt > > ( > > IntPtr hdcDest, // handle to destination DC > > int nXDest, // x-coord of destination upper-left corner > > int nYDest, // y-coord of destination upper-left corner > > int nWidth, // width of destination rectangle > > int nHeight, // height of destination rectangle > > IntPtr hdcSrc, // handle to source DC > > int nXSrc, // x-coordinate of source upper-left corner > > int nYSrc, // y-coordinate of source upper-left corner > > System.Int32 dwRop // raster operation code > > ); > > private void Capture_Screen(string filename) > > { > > Graphics g1 = this.CreateGraphics(); > > Image MyImage = new Bitmap(this.ClientRectangle.Width, > > this.ClientRectangle.Height, g1); > > MyImage = new Bitmap(this.ClientRectangle.Width, > > this.ClientRectangle.Height, g1); > > Graphics g2 = Graphics.FromImage(MyImage); > > IntPtr dc1 = g1.GetHdc(); > > IntPtr dc2 = g2.GetHdc(); > > BitBlt(dc2, 0, 0, this.ClientRectangle.Width, > > this.ClientRectangle.Height, dc1, 0, 0, 13369376); > > g1.ReleaseHdc(dc1); > > g2.ReleaseHdc(dc2); > > MyImage.Save(@"d:\rajat\screen_captures\" + filename + ".jpg" > ,System.Drawing.Imaging.ImageFormat.Jpeg); > > } > > > > #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() > > { > > this.components = new System.ComponentModel.Container(); > > this.timer1 = new System.Windows.Forms.Timer(this.components); > > this.button1 = new System.Windows.Forms.Button(); > > this.SuspendLayout(); > > // > > // timer1 > > // > > this.timer1.Enabled = true; > > this.timer1.Interval = 1000; > > this.timer1.Tick += new System.EventHandler(this.timer1_Tick); > > // > > // button1 > > // > > this.button1.Location = new System.Drawing.Point(80, 32); > > this.button1.Name = "button1"; > > this.button1.TabIndex = 0; > > this.button1.Text = "button1"; > > this.button1.Click += new System.EventHandler(this.button1_Click); > > // > > // Form1 > > // > > this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); > > this.ClientSize = new System.Drawing.Size(232, 101); > > this.Controls.Add(this.button1); > > this.Name = "Form1"; > > this.Text = "Form1"; > > this.WindowState = System.Windows.Forms.FormWindowState.Maximized; > > this.Load += new System.EventHandler(this.Form1_Load); > > this.ResumeLayout(false); > > } > > #endregion > > /// <summary> > > /// The main entry point for the application. > > /// </summary> > > [STAThread] > > static void Main() > > { > > Application.Run(new Form1()); > > } > > private void Form1_Load(object sender, System.EventArgs e) > > { > > this.Hide(); > > } > > private void Connecticon_Click(object sender, System.EventArgs e) > > { > > > } > > > > private void timer1_Tick(object sender, System.EventArgs e) > > { > > > string filename; > > try > > { > > i=i+1; > > filename= "img" + i.ToString() ; > > > Capture_Screen(filename); > > } > > catch(Exception exx) > > { > > MessageBox.Show(exx.Message.ToString()); > > > this.Dispose(); > > Application.Exit(); > > } > > > > } > > private void button1_Click(object sender, System.EventArgs e) > > { > > > } > > } > > } > > > Problem Description > ---------------------- > > These programs are taking the screenshots of the wallpaper behind the > windows application along with the mouse cursor .So it is apparent that > mouse is clicking on the particular points of screen where menus or button > exist in my application but doesn't take the screen shot of form. Isn't it > strange? Also these programs are taking the snapshot of other windows based > application. > > I am able to take the snapshot of my application (which is not visible to > above programs) using "PrintScreen" and pasting it in the paint.Also I am > able to take the snapshots of some of the forms of application (using above > 4 programs), which have a label to display the message and some background > image setup at runtime. > > Let me tell you that my windows application uses the skins which can be > changed dynamically using XML and there are few background images setup at
Well, I can't comment on why the commercial programs wouldn't work. As for the code you have, I don't see anything wrong with it on the surface, in the sense that it should run. I don't know of anything in the .NET framework that would keep this from running, but I'm not a GDI+ expert. In truth, you probably would get a better response if you posted this to the "microsoft.public.dotnet.framework.drawing" newsgroup, since this is right up their alley. That said, there is a "quirk" to the code here: you will only be capturing the client area of the form. Traditional screen-capture programs copy the entire form. If you want to capture the entire form, you'll probably have to use the desktop as your source DC, and your source rectangle would be the screen position & size of the entire form. You also don't need the "MyImage = new Bitmap(this.ClientRectangle.Width,this.ClientRectangle.Height, g1);" line - you create and initialize your MyImage variable all in one line, so this line does the same thing as the one before it. But that shouldn't hurt anything. I don't know what you're seeing, or what you're getting in your JPG file, so I don't know exactly what your problem is. As I said, I see nothing in the code that shouldn't work. If you can provide some more detail as to what you're experiencing, we may be able to help some more. Beyond this, and posting to the other NG I mentioned, I would check out Bob Powell's GDI+ site - he's about the smartest guy I've seen in the NG's when it comes to this stuff. A quick check of his site reveals a page that looks like it will solve your problem: http://www.bobpowell.net/capture.htm Between that and my suggestion about using the screen as your source, you should be able to get there with some small modifications to this code. HTH - Scott [quoted text, click to view] "Rajat Tandon" <rajat.tandon@siliconbiztech.com> wrote in message news:O6BTBCY2EHA.1076@TK2MSFTNGP09.phx.gbl... > Scott, As you suggested about using the PrintWindow API . It is a good > step > for Windows XP and to write my own code.Thank you for adding this to my > knowledge but I am more interested with the defect (if any) in my > application. Is there any property of the Window's form/.Net Framework > which > is giving us trouble. > > There are already a no. of good programs available to capture the screen > and > I have already tried 3 of them as written > earlier(Camastasia,Snagit,Irfanview) and one of my own code.All of them > were > unsuccessful because of some problem with the application itself. I am > very > much sure that all of the new code will only add into the unsuccessful > list. > > Hence please suggest the possible causes of the failure in the application > itself... > > "Scott McChesney" <scott.mcchesneyNOSPAM@us.army.mil> wrote in message > news:uXLRI4W2EHA.3120@TK2MSFTNGP12.phx.gbl... >> If you have Windows XP, you can use the "PrintWindow" API. It will take >> a >> snapshot of a window and put it into a DC. >> >> Look in MSDN for info on the PrintWindow() API. You should be able to >> replace the BitBlt() call with a PrintWindow call, and then your code > should >> work. It would probably look something like this (UNTESTED CODE): >> >> [System.Runtime.InteropServices.DllImportAttribute("user32.dll")] >> private static extern bool PrintWindow >> ( >> IntPtr hWnd, >> IntPtr hDC, >> int nFlags >> ); >> >> private void Capture_Screen(string filename) >> { >> Image MyImage = new Bitmap(this.Width, this.Height); >> Graphics g = Graphics.FromImage(MyImage); >> IntPtr dc = g.GetHdc(); >> >> PrintWindow(this.Handle,dc,0); >> g.ReleaseHdc(dc); >> MyImage.Save(@"d:\rajat\screen_captures\" + filename + ".jpg" >> ,System.Drawing.Imaging.ImageFormat.Jpeg); >> } >> >> If you don't have XP - well, I'm not sure what to tell you there. >> >> HTH >> >> - Scott >> >> "Rajat Tandon" <rajat.tandon@siliconbiztech.com> wrote in message >> news:OtJWm2V2EHA.2112@TK2MSFTNGP15.phx.gbl... >> > Hello there, >> > >> > I am relatively new to the newsgroups and C#. I have never been >> disappointed >> > with the groups and always got the prompt replies to my queries.This is >> yet >> > another strange issue, I am facing. Please please help me to solve this > as >> > soon as possible. >> > >> > So here we go ... >> > >> > I am not able to take the screen shot of the windows form based "Smart >> > Client" application at run time.This is urgently required for making >> > the >> > presentation . >> > >> > Till now I have tried 4 methods... >> > -------------------------------- >> > 1) Using IrfanView software >> > 2) Using Snag-it >> > 3) Using Camtasia_Capture&menumaker >> > 4) Using the program which is given below... >> > >> > using System; >> > using System.Drawing; >> > >> > using System.Collections; >> > >> > using System.ComponentModel; >> > >> > using System.Windows.Forms; >> > >> > using System.Data; >> > >> > using System.Reflection; >> > >> > using Microsoft.Win32 ; >> > >> > using System.Runtime.InteropServices; >> > >> > namespace WindowsApplication1 >> > >> > { >> > >> > /// <summary> >> > >> > /// Summary description for Form1. >> > >> > /// </summary> >> > >> > public class Form1 : System.Windows.Forms.Form >> > >> > { >> > >> > private System.Windows.Forms.Timer timer1; >> > >> > private System.ComponentModel.IContainer components; >> > >> > private System.Windows.Forms.Button button1; >> > >> > >> > >> > int i; >> > >> > >> > >> > public Form1() >> > >> > { >> > >> > // >> > >> > // Required for Windows Form Designer support >> > >> > // >> > >> > InitializeComponent(); >> > >> > i=0; >> > >> > // >> > >> > // TODO: Add any constructor code after InitializeComponent call >> > >> > // >> > >> > } >> > >> > /// <summary> >> > >> > /// Clean up any resources being used. >> > >> > /// </summary> >> > >> > protected override void Dispose( bool disposing ) >> > >> > { >> > >> > if( disposing ) >> > >> > { >> > >> > if (components != null) >> > >> > { >> > >> > components.Dispose(); >> > >> > } >> > >> > } >> > >> > base.Dispose( disposing ); >> > >> > } >> > >> > >> > >> > [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] >> > >> > private static extern bool BitBlt >> > >> > ( >> > >> > IntPtr hdcDest, // handle to destination DC >> > >> > int nXDest, // x-coord of destination upper-left corner >> > >> > int nYDest, // y-coord of destination upper-left corner >> > >> > int nWidth, // width of destination rectangle >> > >> > int nHeight, // height of destination rectangle >> > >> > IntPtr hdcSrc, // handle to source DC >> > >> > int nXSrc, // x-coordinate of source upper-left corner >> > >> > int nYSrc, // y-coordinate of source upper-left corner >> >
As far as I have tried, the BitBlt method of grabbing doesn't capture Layered windows (windows that have WS_EX_LAYERED flag set, .NET sets this when color keying or semi-transparency is activated). What's wrong about the PrtSc method, anyway? It seems to work all right... HTH, Stefan [quoted text, click to view] "Rajat Tandon" <rajat.tandon@siliconbiztech.com> wrote in message news:OtJWm2V2EHA.2112@TK2MSFTNGP15.phx.gbl... > Hello there, > > I am relatively new to the newsgroups and C#. I have never been > disappointed > with the groups and always got the prompt replies to my queries.This is > yet > another strange issue, I am facing. Please please help me to solve this as > soon as possible. > > So here we go ... > > I am not able to take the screen shot of the windows form based "Smart > Client" application at run time.This is urgently required for making the > presentation . > > Till now I have tried 4 methods... > -------------------------------- > 1) Using IrfanView software > 2) Using Snag-it > 3) Using Camtasia_Capture&menumaker > 4) Using the program which is given below... > > using System; > using System.Drawing; > > using System.Collections; > > using System.ComponentModel; > > using System.Windows.Forms; > > using System.Data; > > using System.Reflection; > > using Microsoft.Win32 ; > > using System.Runtime.InteropServices; > > namespace WindowsApplication1 > > { > > /// <summary> > > /// Summary description for Form1. > > /// </summary> > > public class Form1 : System.Windows.Forms.Form > > { > > private System.Windows.Forms.Timer timer1; > > private System.ComponentModel.IContainer components; > > private System.Windows.Forms.Button button1; > > > > int i; > > > > public Form1() > > { > > // > > // Required for Windows Form Designer support > > // > > InitializeComponent(); > > i=0; > > // > > // TODO: Add any constructor code after InitializeComponent call > > // > > } > > /// <summary> > > /// Clean up any resources being used. > > /// </summary> > > protected override void Dispose( bool disposing ) > > { > > if( disposing ) > > { > > if (components != null) > > { > > components.Dispose(); > > } > > } > > base.Dispose( disposing ); > > } > > > > [System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")] > > private static extern bool BitBlt > > ( > > IntPtr hdcDest, // handle to destination DC > > int nXDest, // x-coord of destination upper-left corner > > int nYDest, // y-coord of destination upper-left corner > > int nWidth, // width of destination rectangle > > int nHeight, // height of destination rectangle > > IntPtr hdcSrc, // handle to source DC > > int nXSrc, // x-coordinate of source upper-left corner > > int nYSrc, // y-coordinate of source upper-left corner > > System.Int32 dwRop // raster operation code > > ); > > private void Capture_Screen(string filename) > > { > > Graphics g1 = this.CreateGraphics(); > > Image MyImage = new Bitmap(this.ClientRectangle.Width, > > this.ClientRectangle.Height, g1); > > MyImage = new Bitmap(this.ClientRectangle.Width, > > this.ClientRectangle.Height, g1); > > Graphics g2 = Graphics.FromImage(MyImage); > > IntPtr dc1 = g1.GetHdc(); > > IntPtr dc2 = g2.GetHdc(); > > BitBlt(dc2, 0, 0, this.ClientRectangle.Width, > > this.ClientRectangle.Height, dc1, 0, 0, 13369376); > > g1.ReleaseHdc(dc1); > > g2.ReleaseHdc(dc2); > > MyImage.Save(@"d:\rajat\screen_captures\" + filename + ".jpg" > ,System.Drawing.Imaging.ImageFormat.Jpeg); > > } > > > > #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() > > { > > this.components = new System.ComponentModel.Container(); > > this.timer1 = new System.Windows.Forms.Timer(this.components); > > this.button1 = new System.Windows.Forms.Button(); > > this.SuspendLayout(); > > // > > // timer1 > > // > > this.timer1.Enabled = true; > > this.timer1.Interval = 1000; > > this.timer1.Tick += new System.EventHandler(this.timer1_Tick); > > // > > // button1 > > // > > this.button1.Location = new System.Drawing.Point(80, 32); > > this.button1.Name = "button1"; > > this.button1.TabIndex = 0; > > this.button1.Text = "button1"; > > this.button1.Click += new System.EventHandler(this.button1_Click); > > // > > // Form1 > > // > > this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); > > this.ClientSize = new System.Drawing.Size(232, 101); > > this.Controls.Add(this.button1); > > this.Name = "Form1"; > > this.Text = "Form1"; > > this.WindowState = System.Windows.Forms.FormWindowState.Maximized; > > this.Load += new System.EventHandler(this.Form1_Load); > > this.ResumeLayout(false); > > } > > #endregion > > /// <summary> > > /// The main entry point for the application. > > /// </summary> > > [STAThread] > > static void Main() > > { > > Application.Run(new Form1()); > > } > > private void Form1_Load(object sender, System.EventArgs e) > > { > > this.Hide(); > > } > > private void Connecticon_Click(object sender, System.EventArgs e) > > { > > > } > > > > private void timer1_Tick(object sender, System.EventArgs e) > > { > > > string filename; > > try > > { > > i=i+1; > > filename= "img" + i.ToString() ; > > > Capture_Screen(filename); > > } > > catch(Exception exx) > > { > > MessageBox.Show(exx.Message.ToString()); > > > this.Dispose(); > > Application.Exit(); > > } > > > > } > > private void button1_Click(object sender, System.EventArgs e) > > { > > > } > > } > > } > > > Problem Description > ---------------------- > > These programs are taking the screenshots of the wallpaper behind the > windows application along with the mouse cursor .So it is apparent that > mouse is clicking on the particular points of screen where menus or button > exist in my application but doesn't take the screen shot of form. Isn't it > strange? Also these programs are taking the snapshot of other windows > based > application. > > I am able to take the snapshot of my application (which is not visible to > above programs) using "PrintScreen" and pasting it in the paint.Also I am > able to take the snapshots of some of the forms of application (using > above > 4 programs), which have a label to display the message and some background > image setup at runtime. > > Let me tell you that my windows application uses the skins which can be > changed dynamically using XML and there are few background images setup at > runtime for the forms. I think that the problem is because of some > property > of the application or windows form. >
Don't see what you're looking for? Try a search.
|
|
|