前言

这里所说的针对Winform、WPF 都适用。开机自启动对于控制台的也可以。

还是从项目实践中得来的,在这里记录下来。

对于自适应、分屏显示,在以前感觉应该比较高大上的问题,会比较难。在经过这次的实践感觉挺简单的。不过其中还是有一点要根据实际的业务有一些复杂。

一、自适应分辨率

在屏幕的分辨率改变的时候,改变窗口的大小为当前的分辨率,进行适应。这里是要在 “Window_SizeChanged” 事件里面处理。

具体代码:

        private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
this.WindowState = WindowState.Normal;
this.WindowStyle = WindowStyle.None;
this.ResizeMode = ResizeMode.NoResize;
if (screenIndex == )
{
this.Left = ;
this.Top = ;
Width = Screen.AllScreens[].Bounds.Width;
Height = Screen.AllScreens[].Bounds.Height;
}
else
{
int leftPix = ;
for (int i = screenIndex - ; i >= ; i--)
{
leftPix += Screen.AllScreens[i].Bounds.Width;
}
this.Left = leftPix;
this.Top = ;
Width = Screen.AllScreens[screenIndex].Bounds.Width;
Height = Screen.AllScreens[screenIndex].Bounds.Height;
}
}

这个代码里面有分屏显示的一部分。

二、分屏显示

项目中需要一台主机输出到多个屏幕,在对应屏幕显示窗口。

在这里要注意,屏幕的排列顺序。这个顺序是“显示”设置界面设置的顺序,不是物理的顺序

例如:对于两个屏幕,物理上可以一个在上一个在下,但是在“显示”设置界面,可以设置为左右的。

对于左右顺序:每一个屏幕的宽、高还是屏幕的宽高,只是其起始位置坐标不一样。第一个左上角:(0,0),第二个左上角(width1,0)【这里的 width1 是平屏幕1的宽】,后面以此类推。

对于上下顺序:每一个屏幕的宽、高还是屏幕的宽高,只是其起始位置坐标不一样。第一个左上角:(0,0),第二个左上角(0,height1)【这里的 height1是平屏幕1的高】,后面以此类推。

下面的是一个示例图:

知道了屏幕对应坐标的变化就可以上代码:

        void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
this.WindowState = WindowState.Normal;
this.WindowStyle = WindowStyle.None;
this.ResizeMode = ResizeMode.NoResize;
string appName = "Client";
int appCount = Process.GetProcessesByName(appName).ToList().Count;
int screenCount = Screen.AllScreens.Count();
if (appCount > screenCount)
{
this.Close();
}
else if (appCount == )
{
this.Left = ;
this.Top = ;
Width = Screen.AllScreens[].Bounds.Width;
Height = Screen.AllScreens[].Bounds.Height;
}
else
{
int leftPix = ;
for (int i = appCount - ; i >= ; i--)
{
leftPix += Screen.AllScreens[i].Bounds.Width;
}
this.Left = leftPix;
this.Top = ;
Width = Screen.AllScreens[appCount - ].Bounds.Width;
Height = Screen.AllScreens[appCount - ].Bounds.Height;
}
this.screenIndex = appCount - ; InitPlay();
}

上面的代码就是根据当前程序的个数,来分配屏幕。开了多个程序,感觉这样方式还不够好,应该一个程序进行分配。

三、开机自启动

开机自启动有几个方式:

1、在开机启动文件夹里面加入要开机启动的快捷方式即可;

2、修改注册表,添加要启动的程序到注册表;

这里用的是第二种方法。

        public static void AutoStart(bool isAuto)
{
try
{
if (isAuto == true)
{
RegistryKey R_local = Registry.LocalMachine; //RegistryKey R_local = Registry.CurrentUser;
RegistryKey R_run = R_local.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
R_run.SetValue("应用名称", "程序地址/Client.exe");
R_run.Close();
R_local.Close();
}
else
{
RegistryKey R_local = Registry.LocalMachine;//RegistryKey R_local = Registry.CurrentUser;
RegistryKey R_run = R_local.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
R_run.DeleteValue("应用名称", false);
R_run.Close();
R_local.Close();
} //GlobalVariant.Instance.UserConfig.AutoStart = isAuto;
}
catch (Exception)
{
System.Windows.MessageBox.Show("您需要管理员权限修改", "提示");
}
}

Windows 窗体的自适应分辨率、分屏显示、开机自启动的更多相关文章

  1. c# Winform 开发分屏显示应用程序

    分屏显示即可把一台主机内运行的多个程序分别显示在不同的两个(或多个)屏幕上.目前市面上主流的显卡都支持分屏显示(显示双屏幕),如果需要显示2个以上的屏幕,则应使用“拖机卡”类的硬件. 设置分屏显示的两 ...

  2. vim 分屏显示

    我用vim打开一个文件后,想同时打开另一个文件,就像windows中打开两个记事本一样,因此需要分屏显示 首先用vim打开一个文件 vim file1 输入命令[Esc] :sp file2 分屏打开 ...

  3. cat 显示文本、less 分屏显示文本、more 分页显示文件、head 显示文件的前面的内容、cut 切割、paste合并、wc用来对文本进行统计、sort排序、权限、关闭文件、vim的使用

    cat 显示文本  -E 显示结尾的$符 -n 对显示的每一行进行编号 -b 对非空行进行编号 -s 对连续的空行进行压缩 tac 倒序显示 less 分屏显示文本 向下翻一屏 空格 向下翻一行 回车 ...

  4. 转: Eclipse 分屏显示同一个文件

    Eclipse 分屏显示同一个文件   场景 : 某个类很大,可能有数千行.当你想要将类开头部分与中间或者靠后的部分进行对比时,请follow如下步骤: Window -> Editor -&g ...

  5. wpf 制作播放视频的屏保程序、而且能分屏显示

    这个程序用到了WPF里  “visual_Brush”(主要是为了实现分屏显示) , “UserControl” ,这两个知识点: 在屏保状态下播放指定文件夹下的视频,而且能分屏显示: 把编译好的屏保 ...

  6. c# 远程监控(4) 接收端 RTP包重组 分屏显示

    我们在上一期使用RTP协议,并进行了配置,打包了视频数据,这一期我们就对发送的数据进行重组,并显示在接受端上.最后对其进行扩展,支持多客户端视频发送,并在接收端分屏显示.完成远程监控的模拟. 先来个效 ...

  7. (转载)mysql分屏显示结果

    (转载)http://blog.csdn.net/wylkeke/article/details/7280645 linux机器: 在mysql命令行输入pager more就可以分屏显示结果了,取消 ...

  8. Eclipse 分屏显示同一个代码文件

    描述: 今天在使用Eclipse开发的时候不知按错哪个键,出现编辑框分屏显示同一个代码,由于之前没有使用过这一功能,所以就去查了一下,原来是Eclipse的分屏功能. 快捷键: 方式一:Window ...

  9. linux下信息分屏显示

    在字符界面下,经常遇到ls之后信息太长,只能看到最后一页的信息,这时就需要分屏显示了. 常用: ls | less 这样就可以分屏显示了,并可以用PgUp和PgDn来上下翻页. 也可以用: ls | ...

随机推荐

  1. Influx Sql系列教程三:measurement 表

    在influxdb中measurement相当于mysql中的表,可以理解为一条一条记录都是存与measurent中的,一个数据库中可以有多个measurement,一个measurement中可以存 ...

  2. IDEA 2019 注册码

     CATF44LT7C-eyJsaWNlbnNlSWQiOiJDQVRGNDRMVDdDIiwibGljZW5zZWVOYW1lIjoiVmxhZGlzbGF2IEtvdmFsZW5rbyIsImFz ...

  3. PHP 获取星期

    <?php function getWeek($time = 0) { $week_array=array('日', '一', '二', '三', '四', '五', '六'); //先定义一个 ...

  4. Django-01-Web框架简介

    1. 什么是web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于所有 ...

  5. Makefile 介绍

    makefile:是告诉编译器(交叉工具链)如何去编译.链接一个工程的规则.   一.概述 什 么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为 ...

  6. PHP生成随机单词

    class GenRandWords { private static $_alphas = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', ' ...

  7. 消息认证码 - MAC (Message Authentication Code)

    消息认证包括两个目标 1消息完整性认证: 确保张三发给我的消息是完整的,在传输过程中没有被第三方篡改 2消息的来源认证: 确保这个数据是张三发给我的,而不是李四发给我的 第一个目标通常使用散列函数来达 ...

  8. 结合consul raft库理解raft

    一 入口 github.com/hashicorp/consul/agent/consul/server.go func (s *Server) setupRaft() error { 状态机,用于c ...

  9. Spring Cloud Alibaba学习笔记(21) - Spring Cloud Gateway 自定义全局过滤器

    在前文中,我们介绍了Spring Cloud Gateway内置了一系列的全局过滤器,本文介绍如何自定义全局过滤器. 自定义全局过滤需要实现GlobalFilter 接口,该接口和 GatewayFi ...

  10. MySQL分库备份

    1.需求概述 每天00:00备份MySQL数据库数据: 每一个库生成一个文件,使用gzip压缩,文件名:backup_库名_yyyymmdd.sql.gz,注意yyyymmdd需要是前一天: 备份文件 ...