惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
J
Java Code Geeks
腾讯CDC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
美团技术团队
L
LangChain Blog
WordPress大学
WordPress大学
A
About on SuperTechFans
Martin Fowler
Martin Fowler
月光博客
月光博客
Y
Y Combinator Blog
U
Unit 42
D
Docker
Recent Announcements
Recent Announcements
Hugging Face - Blog
Hugging Face - Blog
B
Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
G
Google Developers Blog
Last Week in AI
Last Week in AI
T
The Blog of Author Tim Ferriss
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

博客园 - 糊涂小猪

ASP.NET页面请求流程 工作气氛 程序员的人生 利用reflector工具导出工程文件 按评论数排序会出现两个一模一样的文章,是BUG么? ORACLE中按长度分割字符串(保持单词完整性和数值完整性) CLS理解 starteam 中文手册 不会技术的比会技术的好混,啥世道现在!! 自定义COMBOBOX控件 ORACLE中批处理的执行 日志文件的生成 MENUITEMS中一个被忽略的属性 继承CollectionBase来扩展自定义的集合类型 C#继承机制 Start without Debugging VS start C#中对ini文件的操作。 C#中提取字符串的解决方法 C#中的[DllImport("kernel32.dll")]的意思是啥?困惑ing。
C#取得当前窗体图片
糊涂小猪 · 2007-04-11 · via 博客园 - 糊涂小猪

   Yesterday,客户对需求提出了一些变更,其中有提到一点就是要打印当前的确窗体.
想到的一个解决方案就是模拟按下ALT+PRNT的组合键,然后从CLIPBOARD中取的要打印的图形.
当然,第一步是要取得你当前的窗体..实现方法如下:
  [DllImport("user32.dll")]
  private static extern IntPtr GetDC(IntPtr hwnd);
  [DllImport("user32.dll")]
  private static extern IntPtr ReleaseDC(IntPtr hc,IntPtr hDest);
   [DllImport("user32.dll")]
  private static extern IntPtr GetWindowDC(IntPtr hwnd);
  [DllImport("user32.dll")]
  private static extern IntPtr GetForegroundWindow();
  [DllImport("user32.dll")]
  private static extern int GetWindowRect(IntPtr hwnd,
   ref  RECT lpRect);
 private Bitmap GetActiveForm()
{
   IntPtr platDC = GetForegroundWindow();
   IntPtr  windDC = GetWindowDC(platDC);
   Rect rect = new Rect();
  GetWindowRect(windDC,ref  rect);
  Bitmap bmp = new Bitmap(rect.right - right.left,rect.bottom - rect.top);
Graphics g = Graphics.FromIamge(bmp);
 IntPtr hdc = g.getHdc();
BitBlt( hdc,0,0,bmp.width,bmp.height,windDC,0,0,3278651);
g.ReleaseHdc(hdc);
g.dispose();
ReleaseDC(platDC,winDC);
return bmp;
}

private void print()
{
   Bitmap bm = new Bitmap();
  bm = GetActiveForm();
// past the bmp to clipboard
  SendKeys.Send("%{PRTSC}");
  Application.DoEvents();

// print bmp
    IDataObject   iData   =   Clipboard.GetDataObject   ();  
   Image   img   =   (Image)iData.GetData   (DataFormats.Bitmap);  
   e.Graphics.DrawImage(img,0,0);  

}

That's all!!