這裏顯示兩個版本的差異處。
Both sides previous revision 前次修改 下次修改 | 前次修改 | ||
programming:c_sharp [2009/02/15 14:55] wenpei |
programming:c_sharp [2011/04/09 00:02] (目前版本) wenpei 畫面截圖 |
||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== 在 C# 中抓取指定視窗的畫面截圖 ====== | ||
+ | Ref: http://dan.zzhc.org/post/3617137304/capture-window-with-c-sharp | ||
+ | |||
+ | <code> | ||
+ | /* 引入 Win32 API 中的 User32.DLL | ||
+ | * 需要加上 using System.Runtime.InteropServices; | ||
+ | */ | ||
+ | [DllImport("user32.dll")] | ||
+ | public static extern Boolean GetWindowRect(IntPtr hWnd, ref Rectangle bounds); | ||
+ | |||
+ | public void CaptureWindow () { | ||
+ | /* 取得目標視窗的 Handle | ||
+ | * 需要加上 using System.Diagnostics; | ||
+ | */ | ||
+ | Process[] process = Process.GetProcessesByName("notepad"); | ||
+ | |||
+ | /* 取得該視窗的大小與位置 */ | ||
+ | Rectangle bounds; | ||
+ | GetWindowRect(process[0].MainWindowHandle, ref bounds); | ||
+ | |||
+ | /* 抓取截圖 */ | ||
+ | Bitmap screenshot = new Bitmap(bounds.Width, bounds.Height, PixelFormat.Format32bppArgb); | ||
+ | Graphics gfx = Graphics.FromImage(screenshot); | ||
+ | gfx.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy); | ||
+ | |||
+ | /* 利用 PictureBox 顯示出來 */ | ||
+ | imageView.Image = (Image) screenshot; | ||
+ | imageView.Update(); | ||
+ | } | ||
+ | |||
+ | </code> | ||
+ | |||
+ | ====== Techotopia: C# Essentials ====== | ||
+ | http://www.techotopia.com/index.php/C_Sharp_Essentials | ||
+ | |||
====== 在背景中下載檔案 ====== | ====== 在背景中下載檔案 ====== | ||
http://msdn2.microsoft.com/zh-tw/library/ms229675(VS.80).aspx | http://msdn2.microsoft.com/zh-tw/library/ms229675(VS.80).aspx | ||
行 11: | 行 46: | ||
http://aaronmind.blogspot.com/2009/01/clow-level-keyboard-hook.html | http://aaronmind.blogspot.com/2009/01/clow-level-keyboard-hook.html | ||
+ | ====== Windows Service ====== | ||
+ | http://blog.miniasp.com/post/2009/02/Add-Installer-for-Windows-Service-and-Setup-Windows-Firewall-rule.aspx | ||
+ | |||
+ | ====== C# 4.0 新特性:動態型別、選用參數、具名參數 ====== | ||
+ | http://blog.miniasp.com/post/2009/02/CSharp-40-New-Features-Dynamic-Lookup-and-Named-and-Optional-Arguments.aspx | ||
+ | |||
+ | ====== 以 C# 撰寫多執行緒 (Multi-threading) 相關學習資源整理 ====== | ||
+ | http://blog.miniasp.com/post/2009/03/Multi-Threading-in-CSharp-Learning-Resources.aspx | ||
+ | |||
+ | ====== 在 C# 中抓取指定視窗的畫面截圖 ====== | ||
+ | http://dan.zzhc.org/post/3617137304/capture-window-with-c-sharp | ||
+ | |||
+ | <code> | ||
+ | /* 引入 Win32 API 中的 User32.DLL | ||
+ | * 需要加上 using System.Runtime.InteropServices; | ||
+ | */ | ||
+ | [DllImport("user32.dll")] | ||
+ | public static extern Boolean GetWindowRect(IntPtr hWnd, ref Rectangle bounds); | ||
+ | |||
+ | public void CaptureWindow () { | ||
+ | /* 取得目標視窗的 Handle | ||
+ | * 需要加上 using System.Diagnostics; | ||
+ | */ | ||
+ | Process[] process = Process.GetProcessesByName("notepad"); | ||
+ | |||
+ | /* 取得該視窗的大小與位置 */ | ||
+ | Rectangle bounds; | ||
+ | GetWindowRect(process[0].MainWindowHandle, ref bounds); | ||
+ | |||
+ | /* 抓取截圖 */ | ||
+ | Bitmap screenshot = new Bitmap(bounds.Width, bounds.Height, PixelFormat.Format32bppArgb); | ||
+ | Graphics gfx = Graphics.FromImage(screenshot); | ||
+ | gfx.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy); | ||
+ | |||
+ | /* 利用 PictureBox 顯示出來 */ | ||
+ | imageView.Image = (Image) screenshot; | ||
+ | imageView.Update(); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ====== .NET Reflector ====== | ||
+ | http://www.red-gate.com/products/reflector/ | ||
+ | .NET Reflector enables you to easily view, navigate, and search through, the class hierarchies of .NET assemblies, even if you don't have the code for them. With it, you can decompile and analyze .NET assemblies in C#, Visual Basic, and IL. |