背景

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

思路

因为文字可以通过截图转化为图片,所以只需考虑图片的显示。这个程序的功能和截图联系非常紧密,可以利用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. (十)HttpClient以multipart/form-data上传文件

    原文链接:https://blog.csdn.net/wsdtq123/article/details/78888734 POST上传文件 最早的HTTP POST是不支持文件上传的,给编程开发带来很 ...

  2. git 本机链接多库配置

    git config --list 查看所有配置 // 提交时读取用户名称及邮箱优先级 --local > --global > --system // 全局配置用户名称及邮箱 git c ...

  3. CSS中link和@import的区别

    1.link属于HTML标签,而@import是CSS提供的 2.页面被加载时link会同时被加载:而@import引用的CSS会等到页面被加载完再加载 3.@import只在IE5以上才能识别,而l ...

  4. ubuntu 显示桌面快捷键

    ubuntu 显示桌面快捷键 快速显示桌面的快捷键是 ctrl + win + d win:就是窗口键,在键盘左侧ctrl与Alt之间的那个建.

  5. vue 生命周期:

    vue  生命周期: 1. beforeCreate()创建组件;        2. created() 创建完成;        3. beforeMounte() 组件被挂裁前;        ...

  6. 2020年IDEA破解激活码永久

    我想很多做开发的小伙伴和小编一样,和往常一样开机搬砖. 打开idea的时候,会收到一个个提示,也是idea许可证过期啦,需要重新激活! 那怎么办呢?我最近发现了一个相对稳定的激活码 . 亲测可用.现在 ...

  7. GitLab Runner部署(kubernetes环境)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. 面试官:你精通多少种语言的 Hello World?

    Hello World,是程序员入门编程语言的第一课.不论是C.C++还是Java ,我们写的第一个程序就是它了,还记得小编在大一C语言课上,花了一整节课时间才把它打印到控制台上.万事开头难啊,相信看 ...

  9. python文件处理-检查文件名/路径是否正确

    内容涉及:检查路径是否存在,文件名长度是否一直,将重复的文件夹重命名 # -*- coding: utf-8 -*- import os import sys import numpy as np i ...

  10. Oracle数据库的闪回操作(查询指定时间的数据、恢复数据)

    通过DELETE删除数据后相当于放入回收站,一般情况下可以找回:通过UPDATE更新数据后数据库也会保留数据快照.闪回就是恢复指定时间的数据快照以达到恢复数据的目的.根据步骤一查询出数据快照,恢复数据 ...