2using System.Collections;
3using System.Collections.Generic;
6using System.Runtime.InteropServices;
9using System.ComponentModel;
12using NaughtyAttributes;
14using System.Diagnostics;
15using System.Drawing.Imaging;
16using System.Text.RegularExpressions;
21 [DllImport(
"gdi32.dll")]
22 static extern bool BitBlt(IntPtr hdcDest,
int nxDest,
int nyDest,
int nWidth,
int nHeight, IntPtr hdcSrc,
int nXSrc,
int nYSrc,
int dwRop);
24 [DllImport(
"gdi32.dll")]
25 static extern IntPtr CreateCompatibleBitmap(IntPtr hdc,
int width,
int nHeight);
27 [DllImport(
"gdi32.dll")]
28 static extern IntPtr CreateCompatibleDC(IntPtr hdc);
30 [DllImport(
"gdi32.dll")]
31 static extern IntPtr DeleteDC(IntPtr hdc);
33 [DllImport(
"gdi32.dll")]
34 static extern IntPtr DeleteObject(IntPtr hObject);
36 [DllImport(
"user32.dll")]
37 static extern IntPtr GetDesktopWindow();
39 [DllImport(
"user32.dll")]
40 static extern IntPtr GetWindowDC(IntPtr hWnd);
42 [DllImport(
"user32.dll")]
43 static extern bool ReleaseDC(IntPtr hWnd, IntPtr hDc);
45 [DllImport(
"gdi32.dll")]
46 static extern IntPtr SelectObject(IntPtr hdc, IntPtr hObject);
48 [DllImport(
"user32.dll")]
49 static extern IntPtr GetForegroundWindow();
50 [DllImport(
"user32.dll")]
52 private static extern IntPtr FindWindow(
string className,
string windowName);
54 const int SRCCOPY = 0x00CC0020;
56 const int CAPTUREBLT = 0x40000000;
57 bool Reloading =
true;
60 internal int LeftCorr;
62 internal int RightCorr;
63 internal int BottomCorr;
64 internal float xWidth, yWidth;
66 internal Queue<float> fpsQueue;
78 GetForegroundWindow();
80 FindWindow(
"UnityWndClass",
"VR Skills Toolkit");
84 Texture2D texture =
new Texture2D(90, 90);
86 Bitmap original = (Bitmap)frame;
87 Bitmap resized =
new Bitmap(original,
new Size(original.Width, original.Height));
88 MemoryStream msFinger =
new MemoryStream();
89 resized.Save(msFinger, ImageFormat.Png);
90 texture.LoadImage(msFinger.ToArray());
99 GetComponent<RectTransform>().SetWidth(
StageManager.GetComponent<RectTransform>().sizeDelta.x/4);
100 GetComponent<RectTransform>().SetHeight(
StageManager.GetComponent<RectTransform>().sizeDelta.y/4);
101 GetComponent<BoxCollider>().size =
new Vector3(GetComponent<RectTransform>().sizeDelta.x, GetComponent<RectTransform>().sizeDelta.y, 0.000001f);
102 GetComponent<BoxCollider>().center =
new Vector3(GetComponent<RectTransform>().sizeDelta.x / 2, GetComponent<RectTransform>().sizeDelta.y / 2, 0);
108 fpsQueue =
new Queue<float>();
109 StartCoroutine(ScreenRefresher());
116 fps= 1/Time.deltaTime;
117 fpsQueue.Enqueue(fps);
118 if (fpsQueue.Count > 9)
120 var avg =
default(
float);
121 foreach (var v
in fpsQueue)
126 avg /= fpsQueue.Count;
128 while (fpsQueue.Count > 9)
135 IEnumerator ScreenRefresher()
144 if (avgFPS < 40 && i<1)
149 yield
return new WaitForSeconds(i);
158 private ImageCodecInfo GetEncoder(ImageFormat format)
160 ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
162 foreach (ImageCodecInfo codec
in codecs)
164 if (codec.FormatID == format.Guid)
183 desktophWnd = GetDesktopWindow();
184 desktopDc = GetWindowDC(desktophWnd);
185 memoryDc = CreateCompatibleDC(desktopDc);
186 bitmap = CreateCompatibleBitmap(desktopDc, x2-x1, y2-y1);
187 oldBitmap = SelectObject(memoryDc, bitmap);
189 success = BitBlt(memoryDc, 0, 0, x2-x1, y2-y1, desktopDc, x1, y1, SRCCOPY | CAPTUREBLT);
195 throw new Win32Exception();
198 result = System.Drawing.Image.FromHbitmap(bitmap);
202 SelectObject(memoryDc, oldBitmap);
203 DeleteObject(bitmap);
205 ReleaseDC(desktophWnd, desktopDc);
209 [DllImport(
"user32.dll", SetLastError =
true)]
213 [StructLayout(LayoutKind.Sequential)]
229 Vector3[] center =
new Vector3[4];
230 StageManager.GetComponent<RectTransform>().GetWorldCorners(center);
233 Vector3 size =
StageManager.GetComponent<RectTransform>().sizeDelta;
235 xWidth = center[2].x - center[0].x;
236 yWidth = center[1].y - center[0].y;
237 LeftCorr = (int)center[0].x;
238 TopCorr = Screen.height - (int)center[1].y;
239 RightCorr = Screen.width - (int)center[2].x;
240 BottomCorr = (int)center[3].y;
UnityEngine.UI.Button Button
static bool GetWindowRect(IntPtr hwnd, out RECT lpRect)
Bitmap CaptureRegion(int x1, int x2, int y1, int y2)
Bitmap CaptureWindow(IntPtr hWnd)