/// <summary> /// 截一张图用作识别 /// </summary> private void getPicture() { IntPtr hWnd = WindowsAPI.FindWindow(null, "夜神模拟器"); IntPtr hscrdc = WindowsAPI.GetWindowDC(hWnd); System.Drawing.Rectangle rect = new System.Drawing.Rectangle(); WindowsAPI.GetWindowRect(hWnd, out rect); System.Drawing.Bitmap bmp = null; if (Config.ScreenMode == ScreenMode.Window) { IntPtr hbitmap = WindowsAPI.CreateCompatibleBitmap(hscrdc, rect.Width, rect.Height); IntPtr hmemdc = WindowsAPI.CreateCompatibleDC(hscrdc); WindowsAPI.SelectObject(hmemdc, hbitmap); WindowsAPI.PrintWindow(hWnd, hmemdc, 0); bmp = System.Drawing.Bitmap.FromHbitmap(hbitmap); WindowsAPI.DeleteDC(hmemdc); } else if (Config.ScreenMode == ScreenMode.Desktop) { bmp = WindowsAPI.GetDesktop(rect); } if (File.Exists(TempImages.OrigImagePath)) { File.Delete(TempImages.OrigImagePath); } if (bmp != null) { bmp.Save(TempImages.OrigImagePath); bmp.Dispose(); bmp = null; } WindowsAPI.DeleteDC(hscrdc); }
/// <summary> /// 启动匹配程序 /// </summary> public static void Start() { windowHand = WindowsAPI.FindWindow(null, "夜神模拟器"); windowDC = WindowsAPI.GetWindowDC(windowHand); WindowsAPI.GetWindowRect(windowHand, out rect); bitmapHand = WindowsAPI.CreateCompatibleBitmap(windowDC, rect.Width, rect.Height); bitmapDC = WindowsAPI.CreateCompatibleDC(windowDC); }
static public void StrechBitmap(Graphics gDest, Rectangle rcDest, Rectangle rcSource, Bitmap bitmap) { // Draw From bitmap IntPtr hDCTo = gDest.GetHdc(); WindowsAPI.SetStretchBltMode(hDCTo, (int)StrechModeFlags.COLORONCOLOR); IntPtr hDCFrom = WindowsAPI.CreateCompatibleDC(hDCTo); IntPtr hOldFromBitmap = WindowsAPI.SelectObject(hDCFrom, bitmap.GetHbitmap()); WindowsAPI.StretchBlt(hDCTo, rcDest.Left, rcDest.Top, rcDest.Width, rcDest.Height, hDCFrom, rcSource.Left, rcSource.Top, rcSource.Width, rcSource.Height, (int)PatBltTypes.SRCCOPY); // Cleanup WindowsAPI.SelectObject(hDCFrom, hOldFromBitmap); gDest.ReleaseHdc(hDCTo); }
static public Bitmap GetStrechedBitmap(Graphics gDest, Rectangle rcDest, Bitmap bitmap) { // Draw To bitmap Bitmap newBitmap = new Bitmap(rcDest.Width, rcDest.Height); Graphics gBitmap = Graphics.FromImage(newBitmap); IntPtr hDCTo = gBitmap.GetHdc(); WindowsAPI.SetStretchBltMode(hDCTo, (int)StrechModeFlags.COLORONCOLOR); IntPtr hDCFrom = WindowsAPI.CreateCompatibleDC(hDCTo); IntPtr hOldFromBitmap = WindowsAPI.SelectObject(hDCFrom, bitmap.GetHbitmap()); WindowsAPI.StretchBlt(hDCTo, rcDest.Left, rcDest.Top, rcDest.Width, rcDest.Height, hDCFrom, 0, 0, bitmap.Width, bitmap.Height, (int)PatBltTypes.SRCCOPY); // Cleanup WindowsAPI.SelectObject(hDCFrom, hOldFromBitmap); gBitmap.ReleaseHdc(hDCTo); return(newBitmap); }