none
WPF如何禁止自动转屏? RRS feed

  • 问题

  • Hi,各位

    WPF如何禁止Win10自动转屏功能呢?

    我知道可以通过修改注册表的HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AutoRotation的Enable和SlateEnable来实现

    除此之外,是否有相应的API?C#或者C++都可以

    因为修改注册表需要管理员权限,我们不希望为了实现禁用转屏和要求用户提供管理员权限。

    谢谢大家了

    2016年6月30日 9:56

答案

  • 您好 aaaluke,

    >>"我知道可以通过修改注册表的HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AutoRotation的Enable和SlateEnable来实现"

    这是唯一的方法。是否自动旋转屏幕是Windows的配置,所以修改它需要提供管理员账号。如果是Windows Runtime项目的话可以通过DisplayInformation.AutoRotationPreferences来限定当前应用程序只运行于某种状态(比如竖屏/横屏)。这样可以变相的实现不自动转屏。但是并没有改变当前系统AutoRotation的配置。

    WPF应用程序运行在传统模式。一个应用程序并不是独占全部的操作界面。所以无法实现你所说的功能。只可以通过修改注册表来修改。

    Best Regards,
    Li Wang


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 aaaluke 2016年7月6日 5:30
    2016年7月4日 7:44

全部回复

  • 这一句实现自动转屏
    Screen.orientation = ScreenOrientation.AutoRotation;

    把它设置为横向或纵向

    Screen.orientation = ScreenOrientation.Landscape或Portrait


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年6月30日 12:18
  • 这一句实现自动转屏
    Screen.orientation = ScreenOrientation.AutoRotation;

    把它设置为横向或纵向

    Screen.orientation = ScreenOrientation.Landscape或Portrait


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    Hi

    请问这是for WPF的代码吗?编译不过呢

    winform中倒是有Screen类,但是没有orientation属性


    2016年7月1日 2:37
  • 我也在找这个问题的答案。我看了 @Shuanghua Li 的回答,在网上以“ScreenOrientation.Landscape”为关键字进行搜索,发现都是Android系统的东四。我也很想知道在WPF程序中如何暂时禁用屏幕自动旋转功能。


    Jason

    2016年7月1日 3:02
  • 您好 aaaluke,

    >>"我知道可以通过修改注册表的HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AutoRotation的Enable和SlateEnable来实现"

    这是唯一的方法。是否自动旋转屏幕是Windows的配置,所以修改它需要提供管理员账号。如果是Windows Runtime项目的话可以通过DisplayInformation.AutoRotationPreferences来限定当前应用程序只运行于某种状态(比如竖屏/横屏)。这样可以变相的实现不自动转屏。但是并没有改变当前系统AutoRotation的配置。

    WPF应用程序运行在传统模式。一个应用程序并不是独占全部的操作界面。所以无法实现你所说的功能。只可以通过修改注册表来修改。

    Best Regards,
    Li Wang


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 aaaluke 2016年7月6日 5:30
    2016年7月4日 7:44
  • @DotNet Wang

    王工,我想问一下。目前我们有一个比较旧的WPF程序运行在windows 8.1 操作系统下。这个程序在横屏模式下显示正常,但是在竖屏模式下UI就会错乱;一旦在竖屏模式下错乱后,即使再切换到横屏,还是有部分UI恢复不过来。所以想请教您在传统wpf程序中有没有类似Windows Runtime下的DisplayInformation.AutoRotationPreferences属性能够限制程序只运行于横屏模式呢?

    期待您的回复,在这里先谢谢王工。


    Jason


    • 已编辑 Jason Yuan 2016年7月5日 9:15 修改错别字
    2016年7月5日 9:14
  • 您好 Jason Yuan,

    >>"所以想请教您在传统wpf程序中有没有类似Windows Runtime下的DisplayInformation.AutoRotationPreferences属性能够限制程序只运行于横屏模式呢?"

    没有的。原因我在上一个回复中也提到了。Windows Runtime是全屏模式,而传统的应用程序共享同一个桌面。

    >>"这个程序在横屏模式下显示正常,但是在竖屏模式下UI就会错乱;"

    建议您为你的应用程序提供两套UI。一套应用于竖屏模式,一套应用于横屏模式。并注册DisplaySettingsChanged 事件来切换两套UI。

    Microsoft.Win32.SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;
    private void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e)
    {
        if (SystemParameters.PrimaryScreenWidth > SystemParameters.PrimaryScreenHeight)
        {
            //横屏模式
        }
        else
        {
            //竖屏模式
        }
    }
    Best Regards,
    Li Wang

    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2016年7月5日 9:25
  • 谢谢王工的解答,非常感谢。

    Jason

    • 已建议为答案 Jason Yuan 2016年7月5日 10:19
    2016年7月5日 10:19