当我使用带有电视的笔记本电脑作为其第二台显示器时,我想制作一个小脚本,它将触发屏幕设置从扩展到克隆,当它设置为克隆时,应将屏幕设置设置为扩展。 我想在c#中创建它,因为它是我的主要语言,我认为它可以解决我的问题。 所以我现在已经制作了这样的控制台应用程序: class Program { static void Main(string[] args) { DisplayChanger.Start(); } private static Process DisplayChanger = new Process { StartInfo = { CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden, FileName = “DisplaySwitch.exe”, Arguments = “/extend” } }; } 它可以很好地创建一个新的过程。 但我的问题是,如何查看“显示”的状态? 我需要这样,所以我可以运行一个测试,看看要启动什么过程。 谢谢您的帮助 :)
我目前的代码非常适合读取屏幕上显示的任何像素颜色,其摘录如下所示: using (Bitmap bmpScreenCapture = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)) { using (Graphics g = Graphics.FromImage(bmpScreenCapture)) { g.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, bmpScreenCapture.Size, CopyPixelOperation.SourceCopy); } Color c = bmpScreenCapture.GetPixel(x,y); } 但是,要使其正常工作,我正在检查的窗口必须是屏幕上显示的内容。 如果我将另一个窗口带到前台,那么我的代码不起作用,因为它当然是在监视屏幕像素。 我怎样才能使我的代码可以继续读取与我想要监视的程序相关联的顶部窗口的像素,当它的窗口位于其他窗口后面时? 谢谢。
我试图弄清楚如何将指定的System.Windows.Forms.Form移动到另一个主屏幕上。 我有可用屏幕列表的ComboBox,用户可以选择他喜欢的任何一个屏幕,我的应用程序应该将其中一个窗口移动到该屏幕上。 我的笔记本电脑上只有一个屏幕,没有外接显示器,因此我计算机上的ComboBox只提供一个选项。 我认为最小化所需的窗口,将其左侧的角移动到所选屏幕的边界并且最大化将完成这项工作,对吧? 我只是无法测试它。 这是一个好方法吗? 提前致谢!
我正在为一家汽车公司开发一个反馈系统。 在计费台上,有一个双显示器设置:一个用于计费人员,另一个用于提供反馈的客户。 我需要在两个屏幕上复制Windows表单,作为镜像,以便计费人员可以看到客户给出的反馈。 我使用下面的代码在辅助屏幕上显示: Screen[] sc; Form f = new Form(); sc = Screen.AllScreens; f.FormBorderStyle = FormBorderStyle.None; f.Left = sc[1].Bounds.Left; f.Top = sc[1].Bounds.Top; f.Height = sc[1].Bounds.Height; f.Width = sc[1].Bounds.Width; f.StartPosition = FormStartPosition.Manual; f.Show(); 但是,它不会镜像主屏幕上的表单。 我还提到了重复的窗口问题,但它会为同一个窗体创建不同的实例,这不会镜像Windows窗体。 如何在两个屏幕上镜像?
我正在尝试创建一个程序,它获取光标下窗口的句柄,显示有关它的一些数据,并在整个窗口的顶部绘制一个填充矩形(具有非常低的alpha)。 我正在使用C#和winforms。 我已经成功了,但问题是我的draw方法是在BackgroundWorker的循环中并且它不断在窗口上制作越来越多的矩形( – >具有更高alpha的矩形)或者当将鼠标移动到另一个窗口时旧的仍然存在。 我没有设法找到一个方法来清除绘制的矩形,因为它只是在屏幕上“是”,并没有绑定到图形对象或任何东西。 我尝试过使用某些原生方法,比如 [DllImport(“User32.dll”)] public static extern Int64 SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); [DllImport(“user32.dll”)] public static extern bool InvalidateRect(IntPtr hWnd, IntPtr lpRect, bool bErase); [DllImport(“user32.dll”)] public static extern bool UpdateWindow(IntPtr hWnd); [DllImport(“user32.dll”)] public static extern bool RedrawWindow(IntPtr hWnd, IntPtr lprcUpdate, IntPtr hrgnUpdate, RedrawWindowFlags flags); 但以上都没有正常工作。 它们中的一些确实有效,但是当消息进入队列时,重绘不会立即发生,或者非常缓慢和闪烁(闪烁等)。 所以,问题是,如何使用Graphics.FromHwnd(handleOfWindowUnderCursor)“删除”我绘制的矩形? 我实际上认为它在其他窗口上绘制并不重要,因为我在试图摆脱我自己的forms上的图纸时也遇到了同样的问题(从来没有得到那个固定!)。 […]
我正在使用win32 PrintWindow函数将屏幕捕获到BitMap对象。 如果我只想捕获窗口的某个区域,我该如何在内存中裁剪图像? 这是我用来捕获整个窗口的代码: [System.Runtime.InteropServices.DllImport(strUSER32DLL, CharSet = CharSet.Auto, SetLastError = true)] public static extern int PrintWindow(IntPtr hWnd, IntPtr hBltDC, uint iFlags); public enum enPrintWindowFlags : uint { /// /// /// PW_ALL = 0x00000000, /// /// Only the client area of the window is copied. By default, the entire window is copied. /// PW_CLIENTONLY = 0x00000001 […]
嗨,我一直在寻找,但我找不到答案。 我如何知道屏幕何时关闭或打开。 不是SystemEvents.PowerModeChanged。 我不知道如何检索显示/屏幕事件 private const int WM_POWERBROADCAST = 0x0218; private const int WM_SYSCOMMAND = 0x0112; private const int SC_SCREENSAVE = 0xF140; private const int SC_CLOSE = 0xF060; // dont know private const int SC_MONITORPOWER = 0xF170; private const int SC_MAXIMIZE = 0xF030; // dont know private const int MONITORON = -1; private const int […]
我期待在C#中创建一个非常基本的屏幕共享应用程序。 无需遥控器。 我只是希望用户能够将他们的屏幕广播到网络服务器。 我该如何实现呢? (非常感谢任何指向正确方向的指针)。 它不需要高FPS。 足以甚至更新5s左右。 您认为只需将屏幕截图上传5秒到我的网络服务器就足够了吗?
我找到了一种用c#创建虚拟桌面的方法。 现在我想知道我们是否可以截取特定桌面的屏幕截图,如果是这样的话? 提前致谢 暴雪
我目前正在尝试使用Visual C#打印一个活动窗口。 我有这个代码: SaveFileDialog saveImageDialog = new SaveFileDialog(); saveImageDialog.Title = “Select output file:”; saveImageDialog.Filter = “JPeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif”; //saveImageDialog.FileName = printFileName; if (saveImageDialog.ShowDialog() == DialogResult.OK) { // Set the bitmap object to the size of the screen bmpScreenshot = new Bitmap(this.Bounds.Width, this.Bounds.Height, PixelFormat.Format32bppArgb); // Create a graphics object from the bitmap gfxScreenshot = Graphics.FromImage(bmpScreenshot); […]