Windows图形界面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows图形界面相关的知识,希望对你有一定的参考价值。

参考技术A 窗口就是屏幕上的一块区域,在这块区域中,应用程序取得用户的输入,显示程序的输出。每个GUI应用程序至少要创建一个窗口,称为主窗口,它作为用户与应用程序间的主界面来提供服务。大多数应用程序也直接或者间接地创建其他窗口,来完成与主窗口相关的工作。每个窗口都在显示输出和从用户取得输入方面起着一定的作用。

窗口客户区是应用程序显示输出的部分。应用程序必须提供一个称为窗口函数的回调函数来处理窗口的输入,向客户区显示输出。

GUI应用程序的入口地址是WinMain,这是一个自定义的回调函数。

Windows的消息驱动:
创建窗口之后,就要对窗口的行为负责。是操作系统告诉程序用户在窗口上的动作的。Windows不断向应用程序发送消息,通知发生了什么事情。比如用户改变了窗口大小,Windows就向这个程序发送一个消息,指明窗口新的大小。

当Windows向程序发送消息时,它调用程序中的一个函数,这个函数的参数精确地描述了Windows发送的消息。在程序中这个函数为窗口函数(Window Procedure)或消息处理函数。它是一个自定义的回调函数。SendMessage函数用于向窗口发送消息,直到目标窗口函数处理完这个消息才返回。

系统向应用程序发送消息的过程:
系统为应用程序传递所有的输入到它的各个窗口,每个窗口都关联一个窗口函数,每当这个窗口有输入时,系统调用该函数。窗口函数处理输入,然后再将控制权交给系统。

无限的消息循环:
在调用UpdateWindow函数之后,整个窗口已经显示在桌面上,程序必须准备从用户接收键盘和鼠标输入了。Windows为每个线程维护了一个消息队列,每当有一个输入发生,Windows就把用户的输入翻译成消息放在消息队列中。利用GetMessage函数可以从调用线程的消息队列中取出一个消息来填充MSG结构。如果消息队列中没有消息(即没有用户输入),这个函数会一直等待下去,直到有消息进入到消息队列为止。GetMessage函数从消息队列中取得的消息如果不是WM_QUIT,则返回非零值。一个WM_QUIT消息会促使GetMessage函数返回0,从而结束消息循环。
DispatchMessage函数分发一个消息到对应窗口的窗口函数,当它返回时,消息循环从调用GetMessage函数开始进入下一轮循环。

通常Windows程序设计者用一个switch和case结构来决定消息处理函数收到了什么消息,以及如何处理这个消息。所有消息处理函数不处理的消息都必须传给一个名为DefWindowProc的函数让Windows做默认处理,从DefWindowProc函数返回的值也必须从消息处理函数返回。否则Windows就失去了与应用程序通信的途径,也就不能再控制窗口的行为了。
WM_PAINT消息通知应用程序窗口客户区有一块或者全部变成无效,必须刷新。这意味着窗口客户区的内容必须被重画。对BeginPaint函数的调用将使整个客户区有效,然后返回设备环境句柄,在窗口的客户区显示图形和文字时需要使用这个设备环境句柄。EndPaint函数负责释放设备环境句柄,使它变得不再能用。

Windows 图形化界面子系统安装教程

Windows 图形化界面子系统安装教程

一、概述

为什么需要Windows子系统?

WSL(Windows Subsystem For Linux)是Windows自身提供的对Linux系统的支持套件。

相较于双系统,WSL省去了来回切换系统的工作;相较于VM,WSL提供了更高的性能。

安装WSL的必要条件?

几乎大部分的Win10系统都能安装WSL,但都是没有GUI的那种。

本文探讨的也是这种情况下如何为命令行添加图形渲染能力。

在Win10 Insider Preview内部版本21362+以后提供官方渲染工具WSLg,无需本文中繁琐步骤能一步到位,有条件的朋友可以通过更新系统直接体验。

Microsoft官方同时也宣布Win11内部版本22000或更高版本也支持Linux GUI应用的安装,感兴趣的朋友可以自行参考官方文档

二、安装步骤

注: 本安装步骤以Ubuntu18.04为例,其它系统同理

2.1 安装子系统

  1. 打开开发者模式(非管理员账号登录的同学请移步到文末,有解决方案)

  2. 打开或关闭Windows功能中添加Hyper-V支持和WSL支持

  3. 重启电脑应用更新

  4. 打开Windows应用商店,搜索并安装Ubuntu(以ubuntu18.04为例)

  5. 设置默认管理员角色

    至此我们已经可以在开始菜单中找到安装好的Ubuntu

    先不着急启动,我们配置一下管理员角色,可以省去我们以后每条指令都要加“sudo”的烦恼

    打开Ubuntu安装目录(我是 C:\\Users\\user\\AppData\\Local\\Microsoft\\WindowsApps\\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc)执行以下指令即可

    ubuntu1804.exe config --default-user root
    

2.2 安装图形化界面

  1. 切换WSL版本

    • 下载并安装WSL2内核更新包

    • 管理员身份运行PowerShell执行以下指令升级WSL

      # 查看当前版本 如果VERSION是1才切换
      wsl -l -v
      # 关闭wsl
      wsl --shutdown
      # 重启vm service
      Get-Service vmcompute | Restart-Service
      # 切换版本,切换版本会中断子系统
      wsl --set-default-version 2 / wsl --set-version Ubuntu-18.04 2
      # 等待数分钟后查看切换后的结果
      wsl -l -v
      
  2. 安装MobaXterm,Moba为子系统提供了图形化渲染接口

  3. 安装好后设置Moba X11,主要是设置权限控制方式和剪贴板

  4. 重启电脑

  5. 重启电脑后打开Moba,通过Moba连接Ubuntu命令行界面(如果此步出现问题可以移步至文末查找解决方案)

  6. 连接后在Ubuntu下执行指令,配置图形化界面ip和端口

    vim ~/.bashrc
    # 编辑模式里加入以下脚本,该脚本自动找路由第二跳,也就是WSL虚拟网卡IP,在Windows下用ipconfig可以看到WSL网卡地址
    export DISPLAY=`ip route | grep default | awk 'print $3'`:0
    # 使脚本立即生效
    source ~/.bashrc
    
  7. 然后我们就可以下载IDEA在命令行执行以下命令启动idea

    # 先cd到你Ubuntu IDEA安装bin目录下
    sh idea.sh
    
  8. Moba会自动帮我们渲染出IDEA的图形化界面,剩下步骤和我们在Windows上使用一样

2.3 后续

  • 非管理员账号登录打开开发者模式

    注: 这一步是针对非管理员账号登录,但是能申请到管理员权限(比如公司、网吧非PC的权限管理方式),如果拿不到管理员权限就没必要继续下去了

    非管理员账号无法直接通过设置打开开发者模式,但是可以通过修改注册表的方式实现同样的效果。

    非管理员账号进入开发者选项大概率会看到以下的界面:

    Follow以下步骤即可完成开启工作:

    1. 使用管理员身份运行CMD

    2. CMD中输入以下内容回车

      regedit
      
    3. 打开注册表编辑器后找到键值

      HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\AppModelUnlock
      

    4. 右键新建DWORD值名为AllowDevelopmentWithoutDevLicens,双击输入值为1(进制无所谓)

    5. 再增加一项AllowAllTrustedApps 也是Dword 值为1

    6. 这样就打开了开发者模式(注意图形界面显示可能是没有打开,但是实际打开了)

    7. 不放心可以重启下电脑

  • Moba连不上Ubuntu

    常发生于重启电脑第一次连接时,重启下服务就好了,PowerShell管理员权限执行以下指令:

    restart-service vmms
    
  • Windows下Ubuntu挂载位置

    我的电脑里是以下路径

    C:\\Users\\user\\AppData\\Local\\Packages\\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\\LocalState\\rootfs\\home\\ling
    
  • Ubuntu连不上网

    如果Windows网络好用的情况下,Ubuntu连不上很可能是Name Server的问题

    在Ubuntu下执行以下指令

    sudo rm /etc/resolv.confsudo bash -c 'echo "nameserver 10.237.161.149" > /etc/resolv.conf'sudo bash -c 'echo "[network]" > /etc/wsl.conf'sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'sudo chattr +i /etc/resolv.conf
    

以上是关于Windows图形界面的主要内容,如果未能解决你的问题,请参考以下文章

centos 7 可以安装图形界面吗

Metasploitable有图形界面吗

Windows 图形化界面子系统安装教程

Windows 图形化界面子系统安装教程

Windows 图形化界面子系统安装教程

Windows 图形化界面子系统安装教程