精华内容
下载资源
问答
  • Windows全屏应用的优化

    千次阅读 2020-05-02 16:00:47
    本文主要告诉大家从微软官方的文档以及考古了解到的 Windows全屏应用的优化,以及是如何进行的优化,方便小伙伴在撕的时候可以找到根据 当然,很多小伙伴只是需要依据,所以我就先贴出一篇特别好的官方文档,...

    全屏应用对应的是窗口模式应用,全屏应用指的是整个屏幕都是被咱一个应用独占了,屏幕上没有显示其他的应用,此时的应用就叫全屏应用。如希沃白板这个程序。本文主要告诉大家从微软官方的文档以及考古了解到的 Windows 对全屏应用的优化,以及是如何进行的优化,方便小伙伴在撕的时候可以找到根据

    当然,很多小伙伴只是需要依据,所以我就先贴出一篇特别好的官方文档,当然本文大部分内容都是从这篇文档抄的

    在开始聊 Windows 对全屏应用的优化之前,需要先聊聊窗口的显示方式。在 Windows 上运行的应用,如游戏等有三个不同的显示模式(考古发现还有一些特别的显示模式,但是太诡异了我就不敢说了)包括 全拼独占模式(FSE Fullscreen Exclusive)、窗口模式(Windowed)、无边框窗口。全屏独占窗口可以让应用独占显示和拥有更多(不是全部占有,但也差不多)的显卡资源。而在进入窗口模式的应用需要和其他的应用共享显示和计算资源,其他窗口在后台运行的依然需要使用显卡计算资源。此时的窗口模式应用需要依靠桌面管理器(DWM Desktop Window Manager)进行调度,此时的显卡资源也就需要将资源共享给其他所有的应用,而不是和独占全屏一样。而第三个模式无边框模式的窗口,应用依然是窗口运行,但是这个窗口没有边框,这意味着窗口可以调整大小用来做全屏,但此时的其他应用依然在后台运行

    在微软的这篇文档 Demystifying Fullscreen Optimizations 说在 win10 发布之后,微软进行了全拼窗口优化。但是考古发现其实在 win7 的 dx9 就有这样的优化,详细请看 Direct3D 9Ex Improvements - Win32 apps 官方文档

    在微软官方文档说 win10 的一个优化是对无边框窗口进行全屏显示的应用的优化,对于无边框的窗口可以让用户体验和全屏独占应用一样的方法,但是会比独占全屏模式更加有利。原因在于独占全屏模式会出现切换的等待,虽然在大部分设备上有显卡的优化,这部分的时间非常短,但是如果想要做频繁的切换,效果也不是很好。而微软 win10 的优化另一部分就是对提供了更快的应用命令,如 alt+tab 切换窗口和多个屏幕的显示效果。通过大量的测试微软对全屏的无边框窗口的性能优化基本达到了全屏独占窗口的性能

    什么全屏独占窗口能具有更高的性能?其实在上文有提到的是可以独占所有的显示,也就是屏幕的每个像素都是由这个应用控制的,此时的显卡可以使用更多的计算资源给到这个应用。但是为什么后面又提出了让无边框窗口通过修改大小做到全屏?然后花大量的资源优化无边框全屏窗口的性能。原因在于以下:

    • 全屏独占应用在分辨率切换的时候的处理相对复杂,有大量的应用没有对这方面进行支持
    • 全屏独占应用的显卡支持也是需要具体显卡的
    • 如果有需求让其他的窗口,如游戏工具栏,如 xbox 游戏工具栏覆盖在全屏独占窗口时,就需要拦截全屏独占窗口的渲染。这个拦截会出现比较多性能问题和不稳定问题
    • 全屏独占窗口对于多个屏幕的设备不够友好,如果使用 DWM 管理另一个屏幕,那么当另一个屏幕的应用获取焦点又需要如何处理。在 windows 的几个版本里面的处理是在其他窗口获取焦点的时候自动最小化全屏独占窗口,这样就让玩全屏独占应用的小伙伴很难同时一边玩全屏游戏一边看电影
    • 上文说到的如果是窗口模式,那么渲染此时由 DWM 做的,但是如果有应用进入全屏独占模式,此时 DWM 需要将显示交给应用,此时会出现屏幕切换。如果进行频繁的切换如 alt+tab 那么这个效果比较差

    此时小伙伴应该就能了解到为什么微软对全屏应用的优化将不仅是对全屏独占应用的优化,还包括对无边框窗口的全屏显示优化了。其实无边框窗口本身也是一个窗口,此时的屏幕依然是 DWM 管理显示

    在 windows xp 开始,在有硬件设备的支持下,微软能给全屏独占应用特别好的支持,可以让几乎所有的显卡资源用在了全屏独占应用,同时停掉后台运行窗口的实际渲染(古老渲染方式的窗口请忽略)而在没有硬件设备的支持下,微软也能做到让计算资源大部分放在全屏独占应用

    在 Windows 10 开始(我记得 win7 dx9 就有这个功能)微软不仅可以对全屏独占应用提供性能优化支持,同时对无边框的全屏窗口提供几乎同等的性能优化,此时更多的应用都选择使用无边框的全屏窗口而不是全屏独占窗口

    但如果是进行更多的性能优化,可以考虑进入全屏独占窗口

    如果是 WPF 程序,那么设置无边框然后设置窗口大小和屏幕一样大,也能在 win10 下拿到这部分优化效果。更多关于 WPF 的优化请看 从 DX 层面讲 WPF 渲染卡顿

    注:有小伙伴对于独占全屏应用的多屏幕处理觉得有点迷,我换句话告诉大家,请打开一个 UWP 的视频应用,让他进入全屏。这个应用进入全屏就是独占模式,此时你在另一个屏幕移动一个窗口,逐步移动到视频应用的屏幕上,你可以看到要么视频的屏幕依然播放视频,要么就是你移动过去了,视频应用就最小化了

    另外在 win7 下的对无边框的全屏应用的优化也是有坑的,要求你的应用需要覆盖屏幕的每一个像素才会隐藏任务栏。在一些有趣的设备上,不会给无边框的全屏应用设置前台焦点,因为窗口没有焦点所以此时的任务栏依然可以显示,解决方法请看 WPF 让窗口激活作为前台最上层窗口的方法

    更多博客

    Windows桌面实现之七(DirectX HOOK 方式截取特殊的全屏程序之一)

    我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

    如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

    如有不方便在博客评论的问题,可以加我 QQ 2844808902 交流

    知识共享许可协议
    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

    展开全文
  • Windows CE和Pocket PC设备制作全屏应用程序。
  • Windows CE和Pocket PC设备制作全屏应用程序。
  • 用flash制作的windows窗口应用,带全屏显示,虽然简单一些但是具有实用性和学习性
  • //没有标题栏、关闭按钮、最大化、最小化按钮的全屏窗口 private void Form1_Load(object sender, EventArgs e) { this.FormBorderStyle = FormBorderStyle.None; this.WindowState = FormWindo...
        //没有标题栏、关闭按钮、最大化、最小化按钮的全屏窗口
    
            private void Form1_Load(object sender, EventArgs e)
            {
                this.FormBorderStyle = FormBorderStyle.None;
                this.WindowState = FormWindowState.Maximized;
            }
    展开全文
  • 判断当前全屏应用是否是桌面 39 if (hWnd.Equals(desktopHandle) || hWnd.Equals(shellHandle)) 40 { 41 RunningFullScreenApp = false ; 42 break ; 43 } 44 // 判断是否全屏 45 if ...

    新建一个 AppWrapper工具类,用来注册事件,获取窗口句柄。

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Runtime.InteropServices;
     5 using System.Text;
     6 using System.Threading.Tasks;
     7 
     8 namespace CombinationKeyRecord
     9 {
    10     public class APIWrapper
    11     {
    12         [DllImport("SHELL32", CallingConvention = CallingConvention.StdCall)]
    13         public static extern uint SHAppBarMessage(int dwMessage, ref APPBARDATA pData);
    14         [DllImport("User32.dll", CharSet = CharSet.Auto)]
    15         public static extern int RegisterWindowMessage(string msg);
    16         //取得Shell窗口句柄函数 
    17         [DllImport("user32.dll")] 
    18         public static extern IntPtr GetShellWindow();
    19         //取得桌面窗口句柄函数 
    20         [DllImport("user32.dll")]
    21         public static extern IntPtr GetDesktopWindow();
    22         //取得前台窗口句柄函数 
    23         [DllImport("user32.dll")]
    24         public static extern IntPtr GetForegroundWindow();
    25     }
    26     [StructLayout(LayoutKind.Sequential)]
    27     public struct RECT
    28     {
    29         public int left;
    30         public int top;
    31         public int right;
    32         public int bottom;
    33     }
    34     [StructLayout(LayoutKind.Sequential)]
    35     public struct APPBARDATA
    36     {
    37         public int cbSize;
    38         public IntPtr hWnd;
    39         public int uCallbackMessage;
    40         public int uEdge;
    41         public RECT rc;
    42         public IntPtr lParam;
    43     }
    44     public enum ABMsg : int
    45     {
    46         ABM_NEW = 0,
    47         ABM_REMOVE,
    48         ABM_QUERYPOS,
    49         ABM_SETPOS,
    50         ABM_GETSTATE,
    51         ABM_GETTASKBARPOS,
    52         ABM_ACTIVATE,
    53         ABM_GETAUTOHIDEBAR,
    54         ABM_SETAUTOHIDEBAR,
    55         ABM_WINDOWPOSCHANGED,
    56         ABM_SETSTATE
    57     }
    58     public enum ABNotify : int
    59     {
    60         ABN_STATECHANGE = 0,
    61         ABN_POSCHANGED,
    62         ABN_FULLSCREENAPP,
    63         ABN_WINDOWARRANGE
    64     }
    65     public enum ABEdge : int
    66     {
    67         ABE_LEFT = 0,
    68         ABE_TOP,
    69         ABE_RIGHT,
    70         ABE_BOTTOM
    71     }
    72 }

     

    在Form类中添加这些方法和属性

     1      Boolean RunningFullScreenApp = false;
     2         private IntPtr desktopHandle;
     3         private IntPtr shellHandle;
     4         int uCallBackMsg;
     5 
     6         private void RegisterAppBar(bool registered)
     7         {
     8             APPBARDATA abd = new APPBARDATA();
     9             abd.cbSize = Marshal.SizeOf(abd);
    10             abd.hWnd = this.Handle;
    11 
    12             desktopHandle = APIWrapper.GetDesktopWindow();
    13             shellHandle = APIWrapper.GetShellWindow();
    14             if (!registered)
    15             {
    16                 //register
    17                 uCallBackMsg = APIWrapper.RegisterWindowMessage("APPBARMSG_CSDN_HELPER");
    18                 abd.uCallbackMessage = uCallBackMsg;
    19                 uint ret = APIWrapper.SHAppBarMessage((int)ABMsg.ABM_NEW, ref abd);
    20             }
    21             else
    22             {
    23                 APIWrapper.SHAppBarMessage((int)ABMsg.ABM_REMOVE, ref abd);
    24             }
    25         }
    26 
    27         
    28         //重载窗口消息处理函数
    29         protected override void WndProc(ref System.Windows.Forms.Message m)
    30         {
    31             if (m.Msg == uCallBackMsg)
    32             {
    33                 switch (m.WParam.ToInt32())
    34                 {
    35                     case (int)ABNotify.ABN_FULLSCREENAPP:
    36                         {
    37                             IntPtr hWnd = APIWrapper.GetForegroundWindow();
    38                             //判断当前全屏的应用是否是桌面
    39                             if(hWnd.Equals(desktopHandle) || hWnd.Equals(shellHandle))
    40                             {
    41                                 RunningFullScreenApp = false;
    42                                 break;
    43                             }
    44                             //判断是否全屏
    45                             if ((int)m.LParam == 1)
    46                                 this.RunningFullScreenApp = true;
    47                             else
    48                                 this.RunningFullScreenApp = false;
    49                             break;
    50                         }
    51                     default:
    52                         break;
    53                 }
    54             }
    55             base.WndProc(ref m);
    56         }

     

    使用方法:

    RegisterAppBar(false);//注册该事件;

    RegisterAppBar(true);//清除该事件;

     

    转载于:https://www.cnblogs.com/Red-ButterFly/p/7726528.html

    展开全文
  • 全屏最小化样式By design, Metro apps in Windows 8 are not meant to be shut down, because you wouldn’t normally shut down apps on a phone or tablet. Therefore, you won’t find an exit command or a ...
    全屏最小化样式

    全屏最小化样式

    00_lead_image_orig

    By design, Metro apps in Windows 8 are not meant to be shut down, because you wouldn’t normally shut down apps on a phone or tablet. Therefore, you won’t find an exit command or a close button, like you’re used to.

    在设计上,Windows 8中的Metro应用并非要关闭,因为您通常不会关闭手机或平板电脑上的应用。 因此,您将不会像以前那样找到退出命令或关闭按钮。

    However, if you really want to shut down a Metro app, there are a few ways you can do this.

    但是,如果您确实要关闭Metro应用程序,则有几种方法可以执行此操作。

    使用键盘关闭Metro应用 (Use the Keyboard to Close a Metro App)

    The quickest and easiest way to shut down a Metro app is to press Alt + F4. This terminates the currently running app immediately.

    关闭Metro应用程序最快,最简单的方法是按Alt + F4。 这将立即终止当前正在运行的应用程序。

    01_full_screen_ie

    使用鼠标关闭Metro应用 (Use the Mouse to Close a Metro App)

    To shut down the currently running Metro app using the mouse, click and hold on the top edge of the app, or the screen, and drag down to the bottom edge of the screen. The app becomes a smaller window and is dragged off the bottom of the screen.

    要使用鼠标关闭当前正在运行的Metro应用程序,请在应用程序或屏幕的顶部边缘上单击并按住,然后向下拖动到屏幕的底部边缘。 该应用程序将变成一个较小的窗口,并被拖离屏幕底部。

    02_dragging_metro_app_to_bottom

    使用任务管理器关闭Metro应用 (Use the Task Manager to Close a Metro App)

    The most powerful way to shut down a Metro app is using the Task Manager. Press Ctrl + Shift + Esc to bring up the Task Manager. Find the app, select it, and click End Task.

    关闭Metro应用程序最强大的方法是使用任务管理器。 按Ctrl + Shift + Esc打开任务管理器。 找到该应用,将其选中,然后单击“结束任务”。

    NOTE: For IE, there may be two versions of it running. The image below shows two tabs open in the desktop version of IE (with the round icon), and the Metro version of IE open as well (with the square icon).

    注意:对于IE,可能有两个版本正在运行。 下图显示了在IE的桌面版本中打开的两个选项卡(带有圆形图标),以及在IE的Metro版本中也打开了(带有方形图标)。

    03_ending_task_in_task_manager

    最小化Metro应用 (Minimize a Metro App)

    If you want a Metro app out of the way, but you don’t want to close it, you can minimize it. One way is to move the mouse to the extreme, lower, left corner of the screen to show the mini Start screen button and click it. The Start screen displays, but the app is still running in the background.

    如果您想要使用Metro应用程序,但又不想关闭它,则可以将其最小化。 一种方法是将鼠标移至屏幕的最左下角以显示迷你“开始”屏幕按钮,然后单击它。 显示“开始”屏幕,但该应用程序仍在后台运行。

    NOTE: When clicking the mini Start screen button, be sure to keep your mouse button in the extreme, lower, left corner. If you move it away slightly to click on the button, the button may disappear.

    注意:单击迷你“开始”屏幕按钮时,请确保将鼠标按钮保持在最左下角。 如果将其稍微移开以单击该按钮,该按钮可能会消失。

    Another way is to press Windows key + D or Alt + Shift + Esc to go back to the desktop. Then, go back to the Start screen by clicking the Start screen button in the extreme, lower, left corner of the desktop or press the Windows key.

    另一种方法是按Windows键+ D或Alt + Shift + Esc返回到桌面。 然后,通过单击桌面左下角的“开始”屏幕按钮返回“开始”屏幕,或按Windows键。

    04_minimize_metro_app_with_start_button

    关闭最小化的Metro应用 (Close a Minimized Metro App)

    Use your mouse to close a minimized Metro app running in the background. Move your mouse to the extreme, upper, left corner of the screen until you see a thumbnail of your running app. Right-click on the thumbnail and click Close.

    使用鼠标关闭在后台运行的最小化Metro应用程序。 将鼠标移到屏幕的左上角,直到看到正在运行的应用的缩略图。 右键单击缩略图,然后单击关闭。

    NOTE: The thumbnail displays the last app that was active. If you just switched from the Desktop to the Metro screen, the Desktop shows. If that happens, open the app again from the Metro screen and close it using one of the methods mentioned earlier in this article.

    注意:缩略图显示最后一个活动的应用程序。 如果您只是从桌面切换到Metro屏幕,则会显示桌面。 如果发生这种情况,请从“地铁”屏幕再次打开该应用程序,然后使用本文前面提到的方法之一将其关闭。

    05_closing_a_minimized_app

    Closing and minimizing apps in Windows 8 may seem complicated, but after a while you can get used to it.

    在Windows 8中关闭和最小化应用程序似乎很复杂,但是过一会儿您就会习惯了。

    翻译自: https://www.howtogeek.com/118588/how-to-shut-down-or-minimize-full-screen-metro-apps-in-windows-8/

    全屏最小化样式

    展开全文
  • Windows C++ 窗口全屏

    2021-03-30 21:14:40
    1、在一些场景中我们需要将应用程序窗口进行全屏显示,比如一些会议程序,为了观看的清晰度,会将整个渲染窗口全屏显示。下面主要就实现一下这个功能 2、首先创建一个窗口 LRESULT CALLBACK WndProc(HWND hwnd, ...
  • 应用程序全屏工具

    2019-01-16 18:57:00
    windows应用程序全屏工具 #include<iostream> #include<Windows.h> int main() { HWND hWnd = FindWindow(NULL, "输入"); LONG_PTR Style = ::GetWindowLongPtr(hWnd, GWL_STYLE); Sty...
  • Windows Mobile如何让应用程序全屏显示,网上问这个问题的人很多,你也能轻松找到答案,但很多人反映效果不完美,如切换程序后又没了全屏效果,这次我花了些时间整理出我的实现,当然我也不保证我的就很完美,但至少...
  • 如何将windows启动时自动打开的应用程序(例如Total Commander)的窗口默认设置为全屏?   类似的问题是:每次我打开一个链接窗口,都要手工最大化,为什么不能按默认全屏显示呢?    ...
  • 需要给PDA上的应用程序的截图,截屏工具wceui_capturescreen
  • Wpf应用程序进入全屏和退出全屏

    千次阅读 2012-12-05 09:10:18
    如果做到仅仅全屏即可,只需在loaded函数中添加如下代码: private void Window_Loaded(object sender, RoutedEventArgs e) { // 设置全屏 this.WindowState = System.Windows.WindowState.Normal;
  • Windows应用程序,用于批量编辑兼容性设置。 它使您可以快速快速地启用/禁用多个应用程序的兼容性设置,而不必一个接一个地进行。 安装 解压缩它(您需要 )。 运行CompatibilityManager.exe 。 ??? 利润。 但为...
  • windows C/C++ 使控制台窗口全屏

    万次阅读 2018-07-23 12:50:58
    背景 ... 在写windows控制台应用程序的时候,我们希望修改一下控制台窗口的大小以及位置等信息。 方法 方法一:使用cmd命令mode  语法: MODE CON[:] [COLS=c] [LINES=n]  指定控制台行数及...
  • 如何在Windows CE上截全屏,截屏工具

    千次阅读 2011-06-08 00:13:00
    近来写毕业设计论文,需要给PDA上的应用程序的截图,想到电脑可以截屏,那么运行环境为Windows CE6.0的PDA也可以截屏,呵呵,终于在网上找到了Windows CE的截屏工具,非常好用,给大家介绍下。1. 载截屏工具wceui_...
  • 全屏windows程序怎么才能阻止别的程序切换到前台?怎么实现应用程序的免打扰模式?
  • 我想让这个air应用windows下和linux下都全屏开始用了stage.displayState = StageDisplayState.FULL_SCREEN,这个语句结果是在windows下这个air虽然大小是全屏幕大但它尽然带着边框,气人。让后我就更改了窗口...
  • 笔者使用的是thinkpad x220,在启动war3.exe后,两边总是有黑边,无法全屏。...然后在“一般设置”中,将 内置显示器的 分辨率 换一个 ,这时候就会出现 如下选项“缩放”,选择“缩放全屏”,然后 点击“应用”即
  • 很多时候,希望程序占用整个屏幕,而不需要在屏幕上方 留出显示 时间、...这个时候,需要设置应用全屏显示。 graphics.IsFullScreen = true; XNA开发时,屏幕默认是横屏,也可修改屏幕长宽 改为竖屏 graphi
  • 使用 PyQt5 (版本为 5.7)中的 QtWebEngineView 构建的桌面应用,部署到远程机器(Windows 7 平台)上以全屏模式运行时,通过 teamviewer 观察到远程桌面没有变化,但是鼠标右键后会弹出菜单选项,与正常打开的 ...
  • 使用JavaScript的STY Windows Store应用程序 Sams在24小时内使用JavaScript和HTML5自学Windows Store应用程序源...12使用远程数据### Part IV:使其成为Windows Store应用程序13使用全屏,填充,快照和纵向视图 14使用
  • c#开发全屏最前端窗口应用程序

    千次阅读 2011-08-20 09:57:57
    c#开发全屏最前端窗口应用程序 设置 窗口属性 将 WindowState = System.Windows.Forms.FormWindowState.Maximized; 将 Menu = null; 将CONTROLBOX =FLASE将showicon= flasesh
  • 实现方式很简单,你需要完成...this.WindowState = System.Windows.Forms.FormWindowState.Maximized; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 2,使用P/Invoke调用WIN32API进行隐藏...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 588
精华内容 235
关键字:

windows应用全屏