public void GetNextScreen(int height, int width, int x, int y, ScreenDisplayMode mode) { if (this.WhetherClose) { return; } _frameCount++; //Console.WriteLine(this.imgDesktop.Height + " | " + Width + "|" + this.Height + " | " + this.Width); if (_frameCount == 1)//使帧数更连续 { var rect = SerializePacket(new ScreenHotRectanglePack() { X = x, Y = y, Height = height, Width = width, CtrlMode = mode.ConvertTo <int>() }); for (int i = 0; i < 3; i++) { SendTo(CurrentSession, MessageHead.S_SCREEN_NEXT_SCREENBITMP, rect); } } else if (_frameCount == 3) { _frameCount = 0; } }
public void StartGetScreen(int height, int width, int x, int y, ScreenDisplayMode mode) { var rect = SerializePacket(new ScreenHotRectanglePack() { X = x, Y = y, Height = height, Width = width, CtrlMode = mode.ConvertTo <int>() }); _frameCount = 0; //第一帧不计入连续帧 for (int i = 0; i < 3; i++) { SendTo(CurrentSession, MessageHead.S_SCREEN_NEXT_SCREENBITMP, rect); } }
protected override void WndProc(ref Message m) { if (m.Msg == WM_SYSCOMMAND) { IntPtr sysMenuHandle = GetSystemMenu(m.HWnd, false); switch (m.WParam.ToInt32()) { case IDM_SCREENMON: if (_screenDisplayMode == ScreenDisplayMode.Original) { return; } CheckMenuItem(sysMenuHandle, IDM_SCREENMON, MF_CHECKED); CheckMenuItem(sysMenuHandle, IDM_FULL_SCREEN, MF_UNCHECKED); EnableMenuItem(sysMenuHandle, IDM_KEYMOUSE_CTRL, MF_ENABLED); this.imgDesktop.Dock = DockStyle.None; this.imgDesktop.SizeMode = PictureBoxSizeMode.AutoSize; _screenDisplayMode = ScreenDisplayMode.Original; break; case IDM_FULL_SCREEN: if (_screenDisplayMode == ScreenDisplayMode.Fullscreen) { return; } CheckMenuItem(sysMenuHandle, IDM_FULL_SCREEN, MF_CHECKED); CheckMenuItem(sysMenuHandle, IDM_SCREENMON, MF_UNCHECKED); //CheckMenuItem(sysMenuHandle, IDM_KEYMOUSE_CTRL, MF_UNCHECKED); //EnableMenuItem(sysMenuHandle, IDM_KEYMOUSE_CTRL, MF_DISABLED); this.imgDesktop.Dock = DockStyle.Fill; this.imgDesktop.SizeMode = PictureBoxSizeMode.StretchImage; _screenDisplayMode = ScreenDisplayMode.Fullscreen; break; case IDM_KEYMOUSE_CTRL: if (_isControl == true) { CheckMenuItem(sysMenuHandle, IDM_KEYMOUSE_CTRL, MF_UNCHECKED); _isControl = false; } else { CheckMenuItem(sysMenuHandle, IDM_KEYMOUSE_CTRL, MF_CHECKED); _isControl = true; } break; case IDM_LOCK_MOUSEKEY: if (_islockMkey == false) { this.RemoteScreenAdapterHandler.RemoteMouseBlock(true); _islockMkey = true; CheckMenuItem(sysMenuHandle, IDM_LOCK_MOUSEKEY, MF_CHECKED); } else { this.RemoteScreenAdapterHandler.RemoteMouseBlock(false); _islockMkey = false; CheckMenuItem(sysMenuHandle, IDM_LOCK_MOUSEKEY, MF_UNCHECKED); } break; case IDM_BLACKSCREEN: this.RemoteScreenAdapterHandler.RemoteScreenBlack(); break; case IDM_SAVESCREEN: string fileName = DateTime.Now.ToFileTime().ToString() + " 远程桌面快照.bmp"; Image img = imgDesktop.Image; img.Save(fileName); MessageBoxHelper.ShowBoxExclamation("快照已保存到:" + Path.Combine(Environment.CurrentDirectory, fileName)); break; case IDM_FULL_DIFFER: CheckMenuItem(sysMenuHandle, IDM_FULL_DIFFER, MF_CHECKED); CheckMenuItem(sysMenuHandle, IDM_DIFFER, MF_UNCHECKED); this.RemoteScreenAdapterHandler.RemoteChangeScanMode(ScreenScanMode.Noninterlaced); break; case IDM_DIFFER: CheckMenuItem(sysMenuHandle, IDM_FULL_DIFFER, MF_UNCHECKED); CheckMenuItem(sysMenuHandle, IDM_DIFFER, MF_CHECKED); this.RemoteScreenAdapterHandler.RemoteChangeScanMode(ScreenScanMode.Difference); break; case IDM_1X: CheckMenuItem(sysMenuHandle, IDM_1X, MF_CHECKED); CheckMenuItem(sysMenuHandle, IDM_4X, MF_UNCHECKED); CheckMenuItem(sysMenuHandle, IDM_16X, MF_UNCHECKED); this.RemoteScreenAdapterHandler.RemoteResetBrandColor(BrandColorMode.X1); break; case IDM_4X: CheckMenuItem(sysMenuHandle, IDM_1X, MF_UNCHECKED); CheckMenuItem(sysMenuHandle, IDM_4X, MF_CHECKED); CheckMenuItem(sysMenuHandle, IDM_16X, MF_UNCHECKED); this.RemoteScreenAdapterHandler.RemoteResetBrandColor(BrandColorMode.X4); break; case IDM_16X: CheckMenuItem(sysMenuHandle, IDM_1X, MF_UNCHECKED); CheckMenuItem(sysMenuHandle, IDM_4X, MF_UNCHECKED); CheckMenuItem(sysMenuHandle, IDM_16X, MF_CHECKED); this.RemoteScreenAdapterHandler.RemoteResetBrandColor(BrandColorMode.X16); break; case IDM_Qty: var dlg = new ScreenQtyForm(); if (dlg.ShowDialog() == DialogResult.OK) { this.RemoteScreenAdapterHandler.RemoteSetScreenQuantity(dlg.QualityValue); } break; case IDM_SET_CLIPBOARD: using (var setClipoardDlg = new EnterForm()) { setClipoardDlg.Caption = "设置的剪切板内容:"; if (setClipoardDlg.ShowDialog() == DialogResult.OK) { var text = setClipoardDlg.Value; this.RemoteScreenAdapterHandler.SetRemoteClipoardText(text); } } break; case IDM_GET_CLIPBOARD: this.RemoteScreenAdapterHandler.GetRemoteClipoardText(); break; case IDM_CTRL_ALT_DEL: this.RemoteScreenAdapterHandler.SendCtrlAltDel(); break; case IDM_CHANGE_MONITOR: var dialog = new ScreenMonitorChangeForm(); dialog.SetMonitors(_monitorItems, _currenMonitorIndex); if (dialog.ShowDialog() == DialogResult.OK) { if (_currenMonitorIndex == dialog.CurrentMonitorIndex) { break; } _currenMonitorIndex = dialog.CurrentMonitorIndex; this.RemoteScreenAdapterHandler.MonitorChange(dialog.CurrentMonitorIndex); } break; case IDM_DELETE_WALLPAPER: this.RemoteScreenAdapterHandler.RemoteDeleteWallPaper(); break; case IDM_RECORD: if (_stop) { if (_srcImageHeight == 0 || _srcImageWidth == 0) { return; } if (!_videoFrameGraphics.IsNull()) { _videoFrameGraphics.Dispose(); } if (!_videoFrame.IsNull()) { _videoFrame.Dispose(); } lock (this) { _videoFrame = new Bitmap(this._srcImageWidth, this._srcImageHeight); _videoFrameGraphics = Graphics.FromImage(_videoFrame); _videoFrameGraphics.DrawImage(_currentFrame, 0, 0); } _stop = false; ModifyMenu(sysMenuHandle, _menuContextIndex, MF_BYPOSITION, IDM_RECORD, "停止录制"); Task.Run(CreateDesktopRecordThread); } else { _stop = true; ModifyMenu(sysMenuHandle, _menuContextIndex, MF_BYPOSITION, IDM_RECORD, "开始录制"); } break; } } base.WndProc(ref m); }