背景

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

思路

因为文字可以通过截图转化为图片,所以只需考虑图片的显示。这个程序的功能和截图联系非常紧密,可以利用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(); # 显示窗口
}

PowerShell创建参考窗口的更多相关文章

  1. Azure PowerShell (5) 使用Azure PowerShell创建简单的Azure虚拟机和Linux虚拟机

    <Windows Azure Platform 系列文章目录> 本文介绍的是国外的Azure Global.如果是国内由世纪互联运维的Azure China,请参考这篇文档: Azure ...

  2. 解决PowerShell命令行窗口中不显示光标的问题

    不知道什么原因,在有些系统上打开PowerShell命令行窗口后,光标无法显示.这种情况在Windows Server 2008/2012.Windows 8/9/10上都出现过,估计是由于某些系统软 ...

  3. SharePoint 2013 使用PowerShell创建State Service

    今天,搞SPD配置的sp2010wf迁移到sp2013环境上去,发布解决方案都很正常,给列表添加wf的时候报错“该表单无法显示,可能是由于 Microsoft SharePoint Server St ...

  4. Android创建窗口(一)创建应用窗口

    所谓的窗口(Window)就是一个显示在手机屏幕上可视化视图的一片区域.在Android中窗口是一个抽象的概念,每一个Activity就对应着一个窗口,而所有的窗口都是由视图(View)来呈现,而我们 ...

  5. Azure VMSS ---- PowerShell创建自定义镜像的VMSS集群

    前面一篇文章介绍了如何用PowerShell创建标准镜像的VMSS集群.http://www.cnblogs.com/hengwei/p/7391178.html 本文将介绍,如何用PowerShel ...

  6. 使用CreateWindowEx创建子窗口的注意事项

    比如: 使用 HWND child = CreateWindowEx(0,L"childclass",NULL,WS_CHILD | WS_VISIBLE | WS_CLIPSIB ...

  7. Duiib 创建不规则窗口(转载)

    方法一: 转载:http://blog.csdn.net/chenlycly/article/details/46447297 转载:http://blog.csdn.net/harvic880925 ...

  8. [Redis]如何通过Powershell创建Redis服务

    目前Redis在中国上线了,不过只是预览版而且不能通过Portal进行操作,不过可以通过Powershell创建,具体如下: 下载最新的Powershell SDK:http://www.window ...

  9. win32手动创建windows窗口的,小记

    摘抄自文档,其中的函数需要以后花时间看 向 WinMain 添加功能 首先,在 WinMain 函数内部创建 WNDCLASSEX 类型的窗口类结构. 此结构包含有关窗口的信息,如应用程序图标.窗口的 ...

随机推荐

  1. mybatis实现多表一对一,一对多,多对多关联查询

    原文:https://blog.csdn.net/m0_37787069/article/details/79247321 1.一对一关键字:association作用:针对pojo对象属性的映射  ...

  2. Pikachu的暴力破解演示-----基于表单的暴力破解

    1 首先打开XAMMP与burpsuite 2 打开游览器输入127.0.0.1:88进入pikachu,(由于我的端口有80改成88所以输入127.0.0.1:88要是没有更改80只需要输入127. ...

  3. 1169A+B问题终结版(高精度计算)

    描述 给定两个整数A和B,输出A+B的值.A和B的值可能会很大很大,甚至达到100位.现在请你解决这一问题. 输入 两行,分别是两个整数A,B,换行隔开.A和B会很大很大. 输出 一个整数,即A+B的 ...

  4. 基于TCP与UDP协议的socket通信

    基于TCP与UDP协议的socket通信 C/S架构与初识socket 在开始socket介绍之前,得先知道一个Client端/服务端架构,也就是 C/S 架构,互联网中处处充满了 C/S 架构(Cl ...

  5. 入门大数据---Kafka的搭建与应用

    前言 上一章介绍了Kafka是什么,这章就讲讲怎么搭建以及如何使用. 快速开始 Step 1:Download the code Download the 2.4.1 release and un-t ...

  6. 编译ts时候src目录的ts分别生成了单独的js文件

    { "compilerOptions": { "target": "es5", "outDir": "bin- ...

  7. html+css快速入门教程(6)

    9 综合实例 仿百度云盘下载页面实战 10 表格 10.1 table table 为表格标签 可以让我们的表格在浏览器中显示 table 下面还有两个常用标签 tr 和 td tr表示一行 td表示 ...

  8. postman无法正常启动

    想请教下各位大神,我电脑的postman打开之后就一直转,没法启动是怎么回事?重装了不同版本的也是同样的情况,重启电脑也没用...同样的安装包,在别的电脑上就能正常打开!有什么办法解决吗?  0 20 ...

  9. 基于小程序请求接口 wx.request 封装的类 axios 请求

    基于小程序请求接口 wx.request 封装的类 axios 请求 Introduction wx.request 的配置.axios 的调用方式 源码戳我 feature 支持 wx.reques ...

  10. 【数据库内核】RocksDB:事务锁设计与实现

    本文主要介绍 RocksDB 锁结构设计.加锁解锁过程,并与 InnoDB 锁实现做一个简单对比. 本文由作者授权发布,未经许可,请勿转载. 作者:王刚,网易杭研数据库内核开发工程师 MyRocks ...