• PowerShell创建参考窗口


    背景

    平常我们经常遇到这样一个问题,在使用一个窗口工作时常常需要参考其他窗口的文字或图片,此时就需要频繁切换窗口;或者是看视频时需要参考前面进度的画面;或者是阅读或写文档时需要参考其他位置的文字,这时就希望能有一个始终置顶的窗口,实时显示文字或图片方便参考。

    思路

    因为文字可以通过截图转化为图片,所以只需考虑图片的显示。这个程序的功能和截图联系非常紧密,可以利用QQ截图的功能,我们的程序只需从剪贴板中读取图片就行。此外,我们希望窗口能始终置顶,这样才能方便参考。为了方便,我使用了PowerShell,通过调用.Net的窗口创建和读取剪贴板功能,可以很容易地实现这一功能。

    PowerShell调用.Net里的功能,和C#有以下几点不同:

    • 添加命名空间

      Add-Type -AssemblyName System.Windows.Forms;
      
    • 实例化类

      $form = [Windows.Forms.Form]::new();
      

      类似与静态方法的调用和,用[类名]::new() 创建,同时这个类名可以省略最前面的System.

    • 窗口置顶

      $form.TopMost = $true;
      

      PowerShell里的布尔值前面需要加$

    • 添加点击事件

      $click = {
      	...
      }
      $form.add_Click($click);
      Invoke-Command $click;
      

      PowerShell在给WinForm添加事件时,不像C#通过事件和委托机制实现,而是另外定义了像add_Click 这样的方法,将代码块赋给变量,然后将变量传给add_Click 即可添加点击事件。代码块本身也可以通过Invoke-Command 命令实现。

    • 隐藏命令行窗口

      powershell -windowstyle hidden {
      	...
      }
      

      在所有的代码外套上这一层隐藏命令行的设置,即可实现此功能。

    代码

    powershell -windowstyle hidden { # 隐藏命令行
        Add-Type -AssemblyName System.Windows.Forms; # 添加命名空间
        $form = [Windows.Forms.Form]::new();
        $form.BackgroundImageLayout = 3; # 使图片跟随窗口大小缩放
        $form.TopMost = $true; # 窗口置顶
        $form.MaximizeBox = $false; # 屏蔽最大化按钮
        $click = {
            $data = [Windows.Forms.Clipboard]::GetDataObject(); # 获得剪贴板数据
            if ($data.GetDataPresent([Windows.Forms.DataFormats]::Bitmap)) {
                $img = $data.GetData([Windows.Forms.DataFormats]::Bitmap); # 将数据转换成图片
                $form.BackgroundImage = $img; # 把图片设为窗口背景
                $form.ClientSize = $img.Size; # 把窗口图片区域的大小设为和图片一样
            }
        }
        $form.add_Click($click); # 添加点击事件
        Invoke-Command $click; # 先执行一次,把当前图片放进窗口
        $form.ShowDialog(); # 显示窗口
    }
    
  • 相关阅读:
    【提高组】
    【学习】数论
    【2019.10.2】NOIP2018 模拟赛
    【普及组BOSS】
    ELK搭建elasticsearch常见报错
    Linux 下 安装Python第三方模块工具箱pip,以及用pip安装的方法
    Centos 基本命令不能用恢复方法
    Docker0 网卡删除
    Tomcat 设置开机自启
    Python 终端输出字体颜色
  • 原文地址:https://www.cnblogs.com/YuanZiming/p/13070848.html
Copyright © 2020-2023  润新知