像素和毫米之间的吻合度
我正在做: PhysicalParameters() { IntPtr DeskTopHWND = GetDesktopWindow(); IntPtr HDC = GetDC(DeskTopHWND); int mmX = GetDeviceCaps(HDC, HORZSIZE); int mmY = GetDeviceCaps(HDC, VERTSIZE); int pxX = GetDeviceCaps(HDC, HORZRES); int pxY = GetDeviceCaps(HDC, VERTRES); ReleaseDC(DeskTopHWND, HDC); double CoeffPIX_MM_X = 1.0 * mmX / pxX; double CoeffPIX_MM_Y = 1.0 * mmY
14 2024-04-26
编程技术问答社区
Windows。如何通过VGA模拟连接的屏幕
我正在尝试制作屏幕捕获服务. 我有一台物理PC,我想运行一个显示文档(Ex.Msword)的程序,然后进行屏幕截图. 问题是,如果我使用 using (var bitmap = new Bitmap(p.EndX - p.StartX, p.EndY - p.StartY)) { using (Graphics g = Graphics.FromImage(bitmap)) { g.CopyFromScreen(p.StartX, p.StartY, 0, 0, p.EndX,p.EndY,new Size(p.EndX - p.StartX, p.EndY - p.StartY)); } bitmap.Save("result.png", ImageFormat.Png); } 仅在连接LCD屏幕时才起作用. (或者如果我通过RDP连
6 2024-04-25
编程技术问答社区
一个屏幕的工作区和它的边界之和的区别是什么?
在.net中, 之间有什么区别 myScreen.WorkingArea.Left + myScreen.WorkingArea.Right 和 myscreen.Bounds 解决方案 工作区域: 获取显示的工作区域. 工作区是桌面区域 显示屏,不包括任务栏, 停靠的窗户和停靠的工具栏. 在P> 获得显示的边界. 因此,首先您正在使用实际空间,而在第二个 visual space中. 其他解决方案 WorkingArea排除任务栏(以及其他一些thinds.请参见 msdn ). Bounds包括所有内容. WorkingArea是矩形的实例. 矩形左侧给出x坐标. 矩形.RIGHT给出X坐标 +宽度. 左右添加对我来说没有太多意义.
10 2024-04-25
编程技术问答社区
如何使用C#获得以毫米为单位的屏幕尺寸
现在,我正在开发可以吸引ECG波形的程序,ECG波形的速度为25 mm/秒.所以我需要将像素转换为毫米. 现在,我想使用C#将屏幕尺寸以毫米的形式获取.现在我有2个显示器,我希望知道所有监视器的屏幕尺寸,我知道如何将大小放在像素中,但是我不知道如何获得毫米的价值. 我搜索了Google,发现使用WMI可以获得屏幕大小,我尝试了,但失败了.谁能给我一些建议? 解决方案 我在Stackoverflow中找到了一些代码,以获取以毫米为单位的屏幕大小.使用WMI枚举屏幕并获取设备ID.使用设备ID从寄存器表获取EDID.然后读取" edid"载体的第21项,以获取屏幕的宽度和高度,以毫米为单位. public static List GetDesktopMonitors() { List screenSizeList = new List(); //////////////
16 2024-04-24
编程技术问答社区
在c#中通过多显示器设置获得真正的主屏幕?
我有一个可与多中型人一起使用的C#Windows应用程序.该应用程序具有一个主表单,必须在主显示器中显示,并且需要在第二个屏幕上显示的全屏幕表格(第二个形式以3D护目镜显示). 这是我分配屏幕的方式: Screen.AllScreens[0]对于第一个屏幕,对于辅助屏幕,Screen.AllScreens[1] Screen.AllScreens[1]我在3D护目镜的新版本中遇到问题,因为这是HDMI,即使我将主屏幕设置为监视器(DVI),也设置了护目镜作为屏幕1. 可能是使用Screen.AllScreens[0].Bounds.X == 0的更好方法来检查屏幕0是否是主要屏幕? 更新:我在Screen.AllScreens[x]属性之前使用了Screen.PrimaryScreen,但是该属性也给我带来了一些我真的不记得它们的监视器配置. 解决方案 请注意,在Windows中,可以将主要/辅助显示器移动到任何位置(我在主次级上花了几年的时间),因此检查界限将是没有
16 2024-04-23
编程技术问答社区
在C#中动态地在屏幕上绘制一个填充矩形
我想在屏幕上动态绘制一个填充矩形,并在0.1处不透明度.问题是,当我移动鼠标时,先前的矩形尚不清楚. 这是图形方法. private void OnMouseDown(object sender, MouseEventArgs e) { isMouseDown = true; x = e.X; y = e.Y; g = this.selectorForm.CreateGraphics(); } private void OnMouseMove(object sender, MouseEventArgs e) { if (!isMouseDown) return; this.selectorForm.Invalidate(); g.FillRectangle(brush, this.getRectangle(x, y, e
12 2024-04-22
编程技术问答社区
c#屏幕捕捉虚拟桌面
我找到了一种使用C#创建虚拟桌面的方法.现在,我想知道我们是否可以屏幕截图,如果是这样,请如何? 预先感谢 blizz 解决方案 您是否尝试过GFX对象中的CopyFromScreen方法 Graphics g = new Graphics(); g.CopyFromScreen( ....params.... ) 其他解决方案 我没有尝试过,但是我尝试的第一件事是: 创建一个新线程 通过调用setThreadDesktop 将线程切换到新桌面 拍摄屏幕截图 开关线程 可能只是工作.
12 2024-04-22
编程技术问答社区
如何更改单个显示监视器(NVIDIA配置)的伽马坡道?
我尝试更改一个屏幕的伽玛,而不是所有屏幕. 我使用此代码帮助我 但是这个SetDeviceGammaRamp(GetDC(IntPtr.Zero), ref s_ramp); 用于所有设备. [edit2] 我看到了一件奇怪的事情:setDevicegammaramp与 nvidia面板控制器(我试图改变SetDeviceGammaramp的价值,就像我改变了NVIDIA面板中的亮度和对比的价值一样).所以我认为我必须使用nvidia api:/ 所以,我该如何更改此代码以将我的伽玛放在我的第一个屏幕或第二个屏幕上,但不是两个 [edit1] 这就是我所做的: class Monitor { [DllImport("user32.dll")] static extern bool EnumDisplayMonitors(IntPtr hdc, IntPtr lprcClip, MonitorEnumProc lpfnEnum, Int
12 2024-04-21
编程技术问答社区
在c#中在多个屏幕上复制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
20 2024-04-21
编程技术问答社区
如何编写一个本地化的屏幕键盘
我必须为我们公司的程序编写屏幕键盘,该程序主要用于具有触摸功能的行业PC. 我们不能使用Windows默认键盘,因为我们不需要键盘上的所有键.所以我被要求在C#中写一个自定义的. 我已经找到此博客作为参考,但我是不确定如何开始. 我创建了一个小的原型GUI并为每个键分配scancode,并将这些scancodes转换为相关字符.并将它们发送到主动控制.但是我不确定我应该使用哪些scancodes. 所以我的问题是,这是像这样编写OSK的正确方法,如果是,我应该使用哪些scancodes?有链接吗? 我也不确定如何处理 shift 状态... 编辑: 好吧,我做了更多的研究,并提出了一个OSK,该OSK读取了当前的键盘布局,甚至可以处理Easy shift 状态( shift> shift 和 alt gr ).我写了一个KeyButton类,该类从Button继承,此KeyButton具有类型字节的ScanCode属性,如果您为其分配了有效的sc
14 2024-04-20
编程技术问答社区
如何用.NET关闭特定的显示器?
好吧,我知道有关此主题的帖子很多.但是,它们都没有提供解决我问题的解决方案:我不想关闭我的显示器,我希望我的代码关闭特定的监视器.大多数人所指的URL, http://fci-h.blogspot.com/2007/03/turn-furn-cound-your-monitor-monitor-via-code-c.html ,在这里无济于事,因为它关闭了所有显示器. 所以,我有笔记本电脑屏幕和其他外部监视器.当我看电影时,我将显示器切换到外部显示器,笔记本电脑的屏幕变黑了,但是它仍然在黑暗中发光.我想关闭它.有人可以帮忙吗? 编辑:是否有任何方法可以解决此问题,这意味着它不必用.NET写入.基本上,我只需要一个能够交替关闭特定监视器的.EXE文件. 解决方案 看起来没有关闭特定显示器的好方法,但是可以将笔记本电脑的背光设置为最小亮度.根据您拥有哪种版本的Windows,有不同的方法: 发送ioctl_vide_video_set_set_display_bri
12 2024-04-19
编程技术问答社区
用C#下载整个网站
原谅我对这个主题的无知 我正在使用 string p="http://" + Textbox2.text; string r= textBox3.Text; System.Net.WebClient webclient=new System.Net.Webclient(); webclient.DownloadFile(p,r); 下载网页.您可以帮助我增强代码,以便下载整个网站.尝试使用HTML屏幕刮擦,但它仅返回我的index.html文件的HREF链接.我如何提前 谢谢 解决方案 刮擦网站实际上是很多工作,有很多角案. Invoke wget 而不是. 手册解释如何使用" 递归检索 其他解决方案 protected string GetWebString(string url) { string appURL = url; HttpWebRequest wrWebRequest = WebR
6 2024-04-19
编程技术问答社区
简单的C#屏幕共享应用程序
我希望在C#中创建一个非常基本的屏幕共享应用程序.无需遥控器.我只希望用户能够将其屏幕广播到网络服务器. 我应该如何实施? (任何朝正确方向的指针都将不胜感激). 它不需要高fps.甚至足以更新5s左右.您认为只有5秒钟将屏幕截图上传到我的Web服务器是足够的吗? 解决方案 我以前在博客上写过关于远程屏幕共享软件在此处如何工作,它不是特定于C#的,但对该主题提供了良好的基本理解.该文章中还链接的是远程帧缓冲区规格,您也可能想阅读. 基本上,您需要进行屏幕截图,并且可以传输这些屏幕截图并在另一侧显示它们.您可以保留最后一个屏幕截图,并将屏幕截图比较块中,以查看您需要发送的屏幕截图块.您通常会在发送数据之前进行某种压缩. 要拥有遥控器,您可以跟踪鼠标移动并传输它,并将指针位置设置在另一端.还同时同上击键. 就压缩而言,您可以简单地使用 jpegbitmapencoder 用您想要的质量创建jpeg压缩的屏幕截图. JpegBitmapEncoder
16 2024-04-18
编程技术问答社区
如何用C#确定屏幕宽度/高度
我想根据用户屏幕最大宽度/高度动态设置Window的宽度和高度.我该如何编程确定? 解决方案 对于主屏幕: System.Windows.SystemParameters.PrimaryScreenWidth System.Windows.SystemParameters.PrimaryScreenHeight (请注意,还有一些其他主要屏幕相关的属性,这些属性取决于各种因素,Full*&Maximised* ) 虚拟屏幕: SystemParameters.VirtualScreenWidth SystemParameters.VirtualScreenHeight 其他解决方案 如果您想要监视器的特定维度,则您的程序正在运行(如果有人运行多个监视器),您也可以使用: var helper = new WindowInteropHelper(this); //this being the wpf form var currentScreen
12 2024-04-17
编程技术问答社区
确定一个表格是否完全脱离屏幕
我正在开发一个应用程序,该应用程序可以记住用户对表单最后位于屏幕上的位置的偏好.在某些情况下,用户将将其放在辅助屏幕上,然后稍后将应用程序启动而无需第二个屏幕(有时在屏幕外显示表单).其他时候,用户会更改其分辨率,从而产生类似的效果. 我希望在form_shown事件处理程序中进行检查.基本上,我想确定表单是否完全不在屏幕上,以便我可以重新放置. 有建议吗? 解决方案 是否在屏幕上完全检查: public bool IsOnScreen( Form form ) { Screen[] screens = Screen.AllScreens; foreach( Screen screen in screens ) { Rectangle formRectangle = new Rectangle( form.Left, form.Top,
8 2024-04-17
编程技术问答社区
统一-获取物体所指向的屏幕边缘上的点?
所以这是我的问题: 我在屏幕中有一个指向特定方向的对象.出于演示目的,我添加了一个LineRenderer以显示此方向. 我的最终目标是找到对象与该紫色射线与屏幕边界相交的世界点之间的距离(白色轮廓). float DistToScreenEdge = Vector2.Distance(Object.transform.position, PointOnScreenEdge); 但为此,我需要明白这一点,我不知道该怎么做. Vector2 PointOnScreenEdge = ??? 所以,问题: 我如何获得" PointonScreenedge"? 请注意,我始终知道哪个对象面向哪个对象及其世界坐标. 在Internet上,我读到,找到相对于屏幕的世界点,您可以使用Camera.ScreenToWorldPoint()和Camera.ViewportToWorldPoint(),但我无法弄清楚在这种情况下如何正确使用它们. 谢谢您的帮
12 2024-04-16
编程技术问答社区
如何在.NET中编写一个屏幕录像机?
有没有办法在C#中制作屏幕录音机?如果是这样,是否有人知道我可以使用任何教程或有关该主题的任何信息? 解决方案 看这个vb.net代码. Public Class ScreenRecorder Private Shared tempDir As String = My.Computer.FileSystem.SpecialDirectories.Temp & "snapshot" Private Shared snap As New System.Threading.Thread(AddressOf Snapshot) Private Shared _Bounds As System.Drawing.Rectangle = System.Windows.Forms.Screen.PrimaryScreen.Bounds Public Shared Property Bounds() As System.Drawing.Rectangle Get
18 2024-04-15
编程技术问答社区
如何检查窗口在Windows窗体中是否真的可见?
通常您使用表单.可见检查是否完全可见窗口.但是有时在屏幕窗口上方在其他窗口下方,所以它确实是看不见的. 那么,如何真正可见窗口,如何检查c#Windows表单? 我想完成此操作:当我在键盘上单击ctrl+k时,我的窗口在屏幕上可见,它无能为力.但是,当它在其他窗户下面时,它会弹出到顶部(前面). 善意 解决方案 您可以致电但是,请注意,如果另一个程序处于活动状态,通常会简单地刷桌面按钮(取决于您从何处调用).这是Windows'应该不应该尝试围绕它工作. 其他解决方案 我搜索了网络的谷歌搜索,但是Coud找不到任何直接的答案来查看用户是否真正可见窗口的一部分.实际上,如果鼠标当前位于窗口的可见部分顶部,我实际上需要一种" hittest"表单.我以为我会分享花费几天才能完成的代码: public class VisibilityTester { private delegate bool CallBackPtr(int hwnd, int
8 2024-04-15
编程技术问答社区
如何在C#中找到应用程序在哪个屏幕上运行?
如何确定我的应用程序在哪个屏幕上运行? 解决方案 这应该使您入门.在表单上获取一个按钮和列表框,然后将其放在button_click中: listBox1.Items.Clear(); foreach (var screen in Screen.AllScreens) { listBox1.Items.Add(screen); } listBox1.SelectedItem = Screen.FromControl(this); 答案在最后一行,请记住表单也是一个控制. 其他解决方案 System.Windows.Forms.screen类提供此功能. 例如: 屏幕S =屏幕.Frompoint(p); 其中p是您应用程序上某个地方的点(在屏幕坐标中). 其他解决方案 好吧,很多年已经过去了,这是公认答案的衍生产品,但这对我有用.此方法是表单类的成员. screen变量包含屏幕的属性,该屏幕的左上角是该方
12 2024-04-12
编程技术问答社区
如何确定我的.NET Windows Forms程序是在哪个显示器上运行的?
我有一个C#Windows应用程序,如果用户将其移动到一个,我要确保将显示在第二监视器上.我需要保存主表单的大小,位置和窗口状态 - 我已经处理过 - 但是我还需要知道用户关闭应用程序时的屏幕. 我正在使用屏幕类来确定当前屏幕的大小,但是我找不到有关如何确定应用程序运行的屏幕的任何内容. 编辑:感谢您的回答,大家!我想确定窗口打开哪个监视器,以便我可以进行适当的范围检查,以防用户意外地将窗口放在查看区域外或更改屏幕大小以使表单不再完全可见. 解决方案 您可以获得使用此代码的一系列屏幕. Screen[] screens = Screen.AllScreens; 您还可以通过运行此代码( 是您所在的窗口) 来弄清楚自己在哪个屏幕上 Screen screen = Screen.FromControl(this); //this is the Form class 简而言之 msdn link ,不是有很多..我建议您自己在代码中弄乱. 其他解决
14 2024-04-12
编程技术问答社区