C#如何使显示器变为镜像显示呢?
如何用C#将显示器的图像变为镜像显示呢?就是好像是在镜子里看一样。
如果这个实现不了,那么如何使C#编写的整个窗体是镜像显示的呢?就是别的都正常,就C#窗体是镜像的(包括窗体中打开的任何文字、图片等都是镜像的)
最好能实现第一个要求,我想将C#软件做成自动运行的,进入系统后整个显示器变为镜像显示了。
搞了好几天,不知道怎么弄,相关资料也很少,希望高手能给个源码,分不够再加100分呵呵~~~~~~~ ^_^
[解决办法]
不是高手。
[解决办法]
貌似这个可以。
http://msdn.microsoft.com/en-us/library/ms812499.aspx
[解决办法]
改变显示器模式
[解决办法]
挺有趣的,楼主这是要干什么呢?
[解决办法]
完全不懂。
[解决办法]
镜像显示~~好想法..要不搜索下"C#镜片反射"
[解决办法]
或者搜索"C#镜面反射"
[解决办法]
powerstrip 也没这功能,不知某些显卡驱动有没
不然只能GDI绘,但控件多的话也是很麻烦
[解决办法]
- -# 建议楼主还是去汇编那问问做显示的有什么想法没!
额...字是反着的还真是麻烦,识别都没办法!
恩,要不楼主多弄几个镜子再反射一次.....唔....截屏也没法截...那是个幻灯片!主持人要不停的动....
靠...你们电视台还真是让人脑袋疼,就不好把那东西放电脑里,主持人手底下放个触摸板么...弄几张破纸有个蛋用啊!
[解决办法]
要操作 framebuffer 不然没戏 请给分谢谢
[解决办法]
HOHO 楼主一定是去找触摸板去了.....
这就跟我前几天去办事的时候一样,堂堂一个政府部门,我扫描个照片他居然给我用摄像头对着我的照片照相!我晕的不行啊....买不起相机还是买不起扫描仪
[解决办法]
我今天下午将一个CRT显示器的偏转线圈调换了一下,效果很好,但是我想用LCD显示器,很难啊,看来想用程序实现的难度很大,估计要涉及到显卡底层的很多东西,不懂,唉
哈哈,既然你都会弄偏转线圈了,你为何不把LCD拆出来,把背光灯弄下来,再把LCD屏换个方向就OK啦。几年前DIY投影也是找LCD拆背光灯换投影灯泡,前面加放大镜头,对了,此时LCD屏也是需要镜像的
[解决办法]
LZ你看把显示器倒过来放,然后再加一面镜子靠谱么?
[解决办法]
反转所有图像?貌似有些显卡里面有设置可以做到!
如果用c#实现要重新绘制界面,太麻烦了!
[解决办法]
显卡设定吧,找个专业点的显卡驱动就有这个选项的
[解决办法]
换个显卡吧,好像有的可以设置
[解决办法]
我建议找显卡 或我前面说的,把液晶屏拆出来反转下,可以请电脑城修显示器的帮忙
[解决办法]
using System;using System.Windows.Forms;using System.Runtime.InteropServices;using System.Drawing;class SourceForm:Form{ RichTextBox txtBox; public Control SourceControl{ get{return txtBox;} } public SourceForm() { txtBox = new RichTextBox(); txtBox.Dock = DockStyle.Fill; Text = "Source"; Controls.Add (txtBox); }}class DestForm:Form{ [DllImport("user32.dll")] static extern IntPtr GetDC(IntPtr wnd); [DllImport("user32.dll")] static extern bool ReleaseDC(IntPtr wnd,IntPtr hdc); [DllImport("gdi32.dll")] static extern bool StretchBlt(IntPtr hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, IntPtr hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, uint dwRop); const uint SRCCOPY = 0x00CC0020; Panel panel; Timer timer; void SetDock (Control ctrl){ ctrl.Height = Height - 60; ctrl.Width = Width; ctrl.Anchor = AnchorStyles.Top|AnchorStyles.Bottom|AnchorStyles.Left|AnchorStyles.Right; } SourceForm srcForm; public DestForm(SourceForm srcForm) { this.srcForm = srcForm; srcForm.Show (); timer = new Timer(); panel = new Panel (); var checkBox = new CheckBox(); Text = "Mirror"; checkBox.Checked = false; checkBox.Text = "Mirror On/Off"; checkBox.Dock = DockStyle.Bottom; checkBox.CheckedChanged += (s,e)=>MirrorState = checkBox.Checked; SetDock (panel); Controls.Add (panel); Controls.Add (checkBox); timer.Interval =1; timer.Enabled = true; timer.Tick += (s, e) =>CapSrcFormAndMirror(); } bool MirrorState { get; set; } void CapSrcFormAndMirror() { Bitmap bmp = new Bitmap(srcForm.SourceControl.Width, srcForm.SourceControl.Height); using (var g = panel.CreateGraphics()) { var srcDc = GetDC(srcForm.SourceControl.Handle); var dstDc = g.GetHdc(); if (MirrorState) StretchBlt(dstDc, 0, 0, bmp.Width, bmp.Height, srcDc, bmp.Width - 1, 0, -bmp.Width , bmp.Height, SRCCOPY); else StretchBlt(dstDc, 0, 0, bmp.Width, bmp.Height, srcDc, 0, 0, bmp.Width , bmp.Height, SRCCOPY); g.ReleaseHdc(); ReleaseDC(srcForm.SourceControl.Handle, srcDc); } }}class program{ static void Main() { Application.Run(new DestForm(new SourceForm())); }}
[解决办法]
贴个效果图
[解决办法]
using System;using System.Windows.Forms;using System.Runtime.InteropServices;using System.Drawing;class SourceForm:Form{ RichTextBox txtBox; public Control SourceControl{ get{return txtBox;} } public DestForm DestForm{ get; set; } public SourceForm() { txtBox = new RichTextBox(); txtBox.Dock = DockStyle.Fill; this.FullScreen(); Left = 0; FormBorderStyle = FormBorderStyle.None; txtBox.KeyUp += (s,e)=>{ switch (e.KeyCode) { case Keys.Escape: DestForm.Close(); break; case Keys.F4: DestForm.MirrorState = !DestForm.MirrorState ; Left = DestForm.MirrorState?4000:0; break; } }; Text = "Source"; Controls.Add (txtBox); }}class DestForm:Form{ [DllImport("user32.dll")] static extern IntPtr GetDC(IntPtr wnd); [DllImport("user32.dll")] static extern bool ReleaseDC(IntPtr wnd,IntPtr hdc); [DllImport("gdi32.dll")] static extern bool StretchBlt(IntPtr hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, IntPtr hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, uint dwRop); const uint SRCCOPY = 0x00CC0020; Timer timer; void SetDock (Control ctrl){ ctrl.Height = Height - 60; ctrl.Width = Width; ctrl.Anchor = AnchorStyles.Top|AnchorStyles.Bottom|AnchorStyles.Left|AnchorStyles.Right; } SourceForm srcForm; public DestForm(SourceForm srcForm) { this.srcForm = srcForm; srcForm.DestForm = this; srcForm.Show (); this.FullScreen(); TopMost = false; timer = new Timer(); Text = "Mirror"; GotFocus += (s,e)=> srcForm.SourceControl.Focus(); timer.Interval =1; timer.Enabled = true; timer.Tick += (s, e) =>CapSrcFormAndMirror(); } public bool MirrorState { get; set; } void CapSrcFormAndMirror() { var width = srcForm.SourceControl.Width; var height = srcForm.SourceControl.Height; srcForm.SourceControl.Invalidate (); using (var g = CreateGraphics()) { var srcDc = GetDC(srcForm.SourceControl.Handle); var dstDc = g.GetHdc(); if (MirrorState) StretchBlt(dstDc, 0, 0, width , height, srcDc, width - 1, 0, -width , height, SRCCOPY); else StretchBlt(dstDc, 0, 0, width, height, srcDc, 0, 0, width , height, SRCCOPY); g.ReleaseHdc(); ReleaseDC(srcForm.SourceControl.Handle, srcDc); } }}static class program{ public static void FullScreen (this Form frm){ frm.StartPosition = FormStartPosition.Manual; frm.FormBorderStyle = FormBorderStyle.None; frm.Size = Screen.PrimaryScreen.Bounds .Size; frm.Location = new Point (0,0); } static void Main() { Application.Run(new DestForm(new SourceForm())); }}
[解决办法]