PYNQ开发板上使用USB声卡+OSS兼容层播放音频


背景

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

思路

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

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

代码

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(); # 显示窗口
}